[{"data":1,"prerenderedAt":175926},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-python-jiao-cheng\u002Fch12-zong-he-an-li-yu-fu-xi-lu-xian":3,"wiki-doc-nav":3693},{"id":4,"title":5,"body":6,"description":3686,"extension":3687,"meta":3688,"navigation":159,"path":3689,"seo":3690,"stem":3691,"__hash__":3692},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":8,"toc":3662},"minimark",[9,13,18,22,25,56,59,67,71,76,79,102,105,116,120,1818,1821,1843,1847,1850,1864,1867,2085,2088,2221,2224,2228,2232,2377,2381,2473,2477,2559,2563,2603,2607,2812,2816,2819,3054,3058,3061,3248,3251,3255,3258,3264,3267,3293,3297,3300,3314,3317,3345,3348,3362,3365,3382,3385,3402,3405,3422,3426,3452,3456,3479,3483,3486,3489,3495,3498,3520,3523,3529,3535,3539,3542,3625,3628,3632,3658],[10,11,5],"h1",{"id":12},"_12-综合案例与复习路线",[14,15,17],"h2",{"id":16},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,20,21],"p",{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,23,24],{},"一个合格的入门综合项目最好覆盖：",[26,27,28,32,35,38,41,44,47,50,53],"ol",{},[29,30,31],"li",{},"输入输出。",[29,33,34],{},"判断和循环。",[29,36,37],{},"函数拆分。",[29,39,40],{},"列表、字典等容器。",[29,42,43],{},"文件持久化。",[29,45,46],{},"异常处理。",[29,48,49],{},"模块拆分。",[29,51,52],{},"可选：面向对象。",[29,54,55],{},"可选：数据可视化。",[19,57,58],{},"本章整理两个方向：",[26,60,61,64],{},[29,62,63],{},"学生管理系统。",[29,65,66],{},"销售数据统计和可视化。",[14,68,70],{"id":69},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[72,73,75],"h3",{"id":74},"_1221-需求","12.2.1 需求",[19,77,78],{},"实现一个命令行学生管理系统：",[26,80,81,84,87,90,93,96,99],{},[29,82,83],{},"添加学生。",[29,85,86],{},"删除学生。",[29,88,89],{},"修改学生。",[29,91,92],{},"查询学生。",[29,94,95],{},"显示所有学生。",[29,97,98],{},"保存到 JSON 文件。",[29,100,101],{},"程序启动时自动读取 JSON 文件。",[19,103,104],{},"学生字段：",[106,107,113],"pre",{"className":108,"code":110,"language":111,"meta":112},[109],"language-text","学号 student_id\n姓名 name\n年龄 age\n成绩 score\n","text","",[114,115,110],"code",{"__ignoreMap":112},[14,117,119],{"id":118},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[106,121,125],{"className":122,"code":123,"language":124,"meta":112,"style":112},"language-python shiki shiki-themes github-light github-dark","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","python",[114,126,127,140,154,161,181,186,191,204,219,228,233,242,285,299,308,321,328,333,338,349,382,412,417,422,432,445,457,469,481,493,505,517,522,527,538,553,574,582,591,596,601,612,623,631,647,658,671,676,681,691,700,707,721,730,742,747,752,762,780,785,793,805,811,816,833,849,865,870,876,885,894,903,912,918,924,936,941,946,956,972,983,988,1003,1015,1020,1025,1031,1036,1048,1053,1058,1068,1084,1093,1098,1111,1122,1127,1132,1148,1162,1176,1181,1197,1212,1227,1232,1237,1249,1254,1259,1269,1285,1294,1299,1312,1323,1328,1333,1339,1344,1349,1360,1368,1395,1415,1435,1456,1462,1467,1472,1482,1491,1503,1508,1513,1541,1552,1558,1563,1568,1578,1589,1594,1603,1609,1626,1631,1646,1652,1667,1673,1687,1693,1707,1713,1727,1733,1747,1759,1765,1773,1785,1790,1795,1812],{"__ignoreMap":112},[128,129,132,136],"span",{"class":130,"line":131},"line",1,[128,133,135],{"class":134},"szBVR","import",[128,137,139],{"class":138},"sVt8B"," json\n",[128,141,143,146,149,151],{"class":130,"line":142},2,[128,144,145],{"class":134},"from",[128,147,148],{"class":138}," pathlib ",[128,150,135],{"class":134},[128,152,153],{"class":138}," Path\n",[128,155,157],{"class":130,"line":156},3,[128,158,160],{"emptyLinePlaceholder":159},true,"\n",[128,162,164,168,171,174,178],{"class":130,"line":163},4,[128,165,167],{"class":166},"sj4cs","DATA_FILE",[128,169,170],{"class":134}," =",[128,172,173],{"class":138}," Path(",[128,175,177],{"class":176},"sZZnC","\"students.json\"",[128,179,180],{"class":138},")\n",[128,182,184],{"class":130,"line":183},5,[128,185,160],{"emptyLinePlaceholder":159},[128,187,189],{"class":130,"line":188},6,[128,190,160],{"emptyLinePlaceholder":159},[128,192,194,197,201],{"class":130,"line":193},7,[128,195,196],{"class":134},"def",[128,198,200],{"class":199},"sScJk"," load_students",[128,202,203],{"class":138},"():\n",[128,205,207,210,213,216],{"class":130,"line":206},8,[128,208,209],{"class":134},"    if",[128,211,212],{"class":134}," not",[128,214,215],{"class":166}," DATA_FILE",[128,217,218],{"class":138},".exists():\n",[128,220,222,225],{"class":130,"line":221},9,[128,223,224],{"class":134},"        return",[128,226,227],{"class":138}," []\n",[128,229,231],{"class":130,"line":230},10,[128,232,160],{"emptyLinePlaceholder":159},[128,234,236,239],{"class":130,"line":235},11,[128,237,238],{"class":134},"    try",[128,240,241],{"class":138},":\n",[128,243,245,248,251,254,256,259,262,264,268,271,274,277,280,283],{"class":130,"line":244},12,[128,246,247],{"class":134},"        with",[128,249,250],{"class":166}," open",[128,252,253],{"class":138},"(",[128,255,167],{"class":166},[128,257,258],{"class":138},", ",[128,260,261],{"class":176},"\"r\"",[128,263,258],{"class":138},[128,265,267],{"class":266},"s4XuR","encoding",[128,269,270],{"class":134},"=",[128,272,273],{"class":176},"\"utf-8\"",[128,275,276],{"class":138},") ",[128,278,279],{"class":134},"as",[128,281,282],{"class":266}," file",[128,284,241],{"class":138},[128,286,288,291,294,297],{"class":130,"line":287},13,[128,289,290],{"class":134},"            return",[128,292,293],{"class":138}," json.load(",[128,295,296],{"class":266},"file",[128,298,180],{"class":138},[128,300,302,305],{"class":130,"line":301},14,[128,303,304],{"class":134},"    except",[128,306,307],{"class":138}," json.JSONDecodeError:\n",[128,309,311,314,316,319],{"class":130,"line":310},15,[128,312,313],{"class":166},"        print",[128,315,253],{"class":138},[128,317,318],{"class":176},"\"数据文件格式错误，已使用空数据启动\"",[128,320,180],{"class":138},[128,322,324,326],{"class":130,"line":323},16,[128,325,224],{"class":134},[128,327,227],{"class":138},[128,329,331],{"class":130,"line":330},17,[128,332,160],{"emptyLinePlaceholder":159},[128,334,336],{"class":130,"line":335},18,[128,337,160],{"emptyLinePlaceholder":159},[128,339,341,343,346],{"class":130,"line":340},19,[128,342,196],{"class":134},[128,344,345],{"class":199}," save_students",[128,347,348],{"class":138},"(students):\n",[128,350,352,355,357,359,361,363,366,368,370,372,374,376,378,380],{"class":130,"line":351},20,[128,353,354],{"class":134},"    with",[128,356,250],{"class":166},[128,358,253],{"class":138},[128,360,167],{"class":166},[128,362,258],{"class":138},[128,364,365],{"class":176},"\"w\"",[128,367,258],{"class":138},[128,369,267],{"class":266},[128,371,270],{"class":134},[128,373,273],{"class":176},[128,375,276],{"class":138},[128,377,279],{"class":134},[128,379,282],{"class":266},[128,381,241],{"class":138},[128,383,385,388,390,392,395,397,400,402,405,407,410],{"class":130,"line":384},21,[128,386,387],{"class":138},"        json.dump(students, ",[128,389,296],{"class":266},[128,391,258],{"class":138},[128,393,394],{"class":266},"ensure_ascii",[128,396,270],{"class":134},[128,398,399],{"class":166},"False",[128,401,258],{"class":138},[128,403,404],{"class":266},"indent",[128,406,270],{"class":134},[128,408,409],{"class":166},"2",[128,411,180],{"class":138},[128,413,415],{"class":130,"line":414},22,[128,416,160],{"emptyLinePlaceholder":159},[128,418,420],{"class":130,"line":419},23,[128,421,160],{"emptyLinePlaceholder":159},[128,423,425,427,430],{"class":130,"line":424},24,[128,426,196],{"class":134},[128,428,429],{"class":199}," show_menu",[128,431,203],{"class":138},[128,433,435,438,440,443],{"class":130,"line":434},25,[128,436,437],{"class":166},"    print",[128,439,253],{"class":138},[128,441,442],{"class":176},"\"====== 学生管理系统 ======\"",[128,444,180],{"class":138},[128,446,448,450,452,455],{"class":130,"line":447},26,[128,449,437],{"class":166},[128,451,253],{"class":138},[128,453,454],{"class":176},"\"1. 添加学生\"",[128,456,180],{"class":138},[128,458,460,462,464,467],{"class":130,"line":459},27,[128,461,437],{"class":166},[128,463,253],{"class":138},[128,465,466],{"class":176},"\"2. 删除学生\"",[128,468,180],{"class":138},[128,470,472,474,476,479],{"class":130,"line":471},28,[128,473,437],{"class":166},[128,475,253],{"class":138},[128,477,478],{"class":176},"\"3. 修改学生\"",[128,480,180],{"class":138},[128,482,484,486,488,491],{"class":130,"line":483},29,[128,485,437],{"class":166},[128,487,253],{"class":138},[128,489,490],{"class":176},"\"4. 查询学生\"",[128,492,180],{"class":138},[128,494,496,498,500,503],{"class":130,"line":495},30,[128,497,437],{"class":166},[128,499,253],{"class":138},[128,501,502],{"class":176},"\"5. 显示所有学生\"",[128,504,180],{"class":138},[128,506,508,510,512,515],{"class":130,"line":507},31,[128,509,437],{"class":166},[128,511,253],{"class":138},[128,513,514],{"class":176},"\"0. 退出系统\"",[128,516,180],{"class":138},[128,518,520],{"class":130,"line":519},32,[128,521,160],{"emptyLinePlaceholder":159},[128,523,525],{"class":130,"line":524},33,[128,526,160],{"emptyLinePlaceholder":159},[128,528,530,532,535],{"class":130,"line":529},34,[128,531,196],{"class":134},[128,533,534],{"class":199}," find_student",[128,536,537],{"class":138},"(students, student_id):\n",[128,539,541,544,547,550],{"class":130,"line":540},35,[128,542,543],{"class":134},"    for",[128,545,546],{"class":138}," student ",[128,548,549],{"class":134},"in",[128,551,552],{"class":138}," students:\n",[128,554,556,559,562,565,568,571],{"class":130,"line":555},36,[128,557,558],{"class":134},"        if",[128,560,561],{"class":138}," student[",[128,563,564],{"class":176},"\"student_id\"",[128,566,567],{"class":138},"] ",[128,569,570],{"class":134},"==",[128,572,573],{"class":138}," student_id:\n",[128,575,577,579],{"class":130,"line":576},37,[128,578,290],{"class":134},[128,580,581],{"class":138}," student\n",[128,583,585,588],{"class":130,"line":584},38,[128,586,587],{"class":134},"    return",[128,589,590],{"class":166}," None\n",[128,592,594],{"class":130,"line":593},39,[128,595,160],{"emptyLinePlaceholder":159},[128,597,599],{"class":130,"line":598},40,[128,600,160],{"emptyLinePlaceholder":159},[128,602,604,606,609],{"class":130,"line":603},41,[128,605,196],{"class":134},[128,607,608],{"class":199}," input_int",[128,610,611],{"class":138},"(prompt):\n",[128,613,615,618,621],{"class":130,"line":614},42,[128,616,617],{"class":134},"    while",[128,619,620],{"class":166}," True",[128,622,241],{"class":138},[128,624,626,629],{"class":130,"line":625},43,[128,627,628],{"class":134},"        try",[128,630,241],{"class":138},[128,632,634,636,639,641,644],{"class":130,"line":633},44,[128,635,290],{"class":134},[128,637,638],{"class":166}," int",[128,640,253],{"class":138},[128,642,643],{"class":166},"input",[128,645,646],{"class":138},"(prompt))\n",[128,648,650,653,656],{"class":130,"line":649},45,[128,651,652],{"class":134},"        except",[128,654,655],{"class":166}," ValueError",[128,657,241],{"class":138},[128,659,661,664,666,669],{"class":130,"line":660},46,[128,662,663],{"class":166},"            print",[128,665,253],{"class":138},[128,667,668],{"class":176},"\"请输入整数\"",[128,670,180],{"class":138},[128,672,674],{"class":130,"line":673},47,[128,675,160],{"emptyLinePlaceholder":159},[128,677,679],{"class":130,"line":678},48,[128,680,160],{"emptyLinePlaceholder":159},[128,682,684,686,689],{"class":130,"line":683},49,[128,685,196],{"class":134},[128,687,688],{"class":199}," input_float",[128,690,611],{"class":138},[128,692,694,696,698],{"class":130,"line":693},50,[128,695,617],{"class":134},[128,697,620],{"class":166},[128,699,241],{"class":138},[128,701,703,705],{"class":130,"line":702},51,[128,704,628],{"class":134},[128,706,241],{"class":138},[128,708,710,712,715,717,719],{"class":130,"line":709},52,[128,711,290],{"class":134},[128,713,714],{"class":166}," float",[128,716,253],{"class":138},[128,718,643],{"class":166},[128,720,646],{"class":138},[128,722,724,726,728],{"class":130,"line":723},53,[128,725,652],{"class":134},[128,727,655],{"class":166},[128,729,241],{"class":138},[128,731,733,735,737,740],{"class":130,"line":732},54,[128,734,663],{"class":166},[128,736,253],{"class":138},[128,738,739],{"class":176},"\"请输入数字\"",[128,741,180],{"class":138},[128,743,745],{"class":130,"line":744},55,[128,746,160],{"emptyLinePlaceholder":159},[128,748,750],{"class":130,"line":749},56,[128,751,160],{"emptyLinePlaceholder":159},[128,753,755,757,760],{"class":130,"line":754},57,[128,756,196],{"class":134},[128,758,759],{"class":199}," add_student",[128,761,348],{"class":138},[128,763,765,768,770,773,775,778],{"class":130,"line":764},58,[128,766,767],{"class":138},"    student_id ",[128,769,270],{"class":134},[128,771,772],{"class":166}," input",[128,774,253],{"class":138},[128,776,777],{"class":176},"\"请输入学号:\"",[128,779,180],{"class":138},[128,781,783],{"class":130,"line":782},59,[128,784,160],{"emptyLinePlaceholder":159},[128,786,788,790],{"class":130,"line":787},60,[128,789,209],{"class":134},[128,791,792],{"class":138}," find_student(students, student_id):\n",[128,794,796,798,800,803],{"class":130,"line":795},61,[128,797,313],{"class":166},[128,799,253],{"class":138},[128,801,802],{"class":176},"\"学号已存在\"",[128,804,180],{"class":138},[128,806,808],{"class":130,"line":807},62,[128,809,810],{"class":134},"        return\n",[128,812,814],{"class":130,"line":813},63,[128,815,160],{"emptyLinePlaceholder":159},[128,817,819,822,824,826,828,831],{"class":130,"line":818},64,[128,820,821],{"class":138},"    name ",[128,823,270],{"class":134},[128,825,772],{"class":166},[128,827,253],{"class":138},[128,829,830],{"class":176},"\"请输入姓名:\"",[128,832,180],{"class":138},[128,834,836,839,841,844,847],{"class":130,"line":835},65,[128,837,838],{"class":138},"    age ",[128,840,270],{"class":134},[128,842,843],{"class":138}," input_int(",[128,845,846],{"class":176},"\"请输入年龄:\"",[128,848,180],{"class":138},[128,850,852,855,857,860,863],{"class":130,"line":851},66,[128,853,854],{"class":138},"    score ",[128,856,270],{"class":134},[128,858,859],{"class":138}," input_float(",[128,861,862],{"class":176},"\"请输入成绩:\"",[128,864,180],{"class":138},[128,866,868],{"class":130,"line":867},67,[128,869,160],{"emptyLinePlaceholder":159},[128,871,873],{"class":130,"line":872},68,[128,874,875],{"class":138},"    students.append({\n",[128,877,879,882],{"class":130,"line":878},69,[128,880,881],{"class":176},"        \"student_id\"",[128,883,884],{"class":138},": student_id,\n",[128,886,888,891],{"class":130,"line":887},70,[128,889,890],{"class":176},"        \"name\"",[128,892,893],{"class":138},": name,\n",[128,895,897,900],{"class":130,"line":896},71,[128,898,899],{"class":176},"        \"age\"",[128,901,902],{"class":138},": age,\n",[128,904,906,909],{"class":130,"line":905},72,[128,907,908],{"class":176},"        \"score\"",[128,910,911],{"class":138},": score,\n",[128,913,915],{"class":130,"line":914},73,[128,916,917],{"class":138},"    })\n",[128,919,921],{"class":130,"line":920},74,[128,922,923],{"class":138},"    save_students(students)\n",[128,925,927,929,931,934],{"class":130,"line":926},75,[128,928,437],{"class":166},[128,930,253],{"class":138},[128,932,933],{"class":176},"\"添加成功\"",[128,935,180],{"class":138},[128,937,939],{"class":130,"line":938},76,[128,940,160],{"emptyLinePlaceholder":159},[128,942,944],{"class":130,"line":943},77,[128,945,160],{"emptyLinePlaceholder":159},[128,947,949,951,954],{"class":130,"line":948},78,[128,950,196],{"class":134},[128,952,953],{"class":199}," delete_student",[128,955,348],{"class":138},[128,957,959,961,963,965,967,970],{"class":130,"line":958},79,[128,960,767],{"class":138},[128,962,270],{"class":134},[128,964,772],{"class":166},[128,966,253],{"class":138},[128,968,969],{"class":176},"\"请输入要删除的学号:\"",[128,971,180],{"class":138},[128,973,975,978,980],{"class":130,"line":974},80,[128,976,977],{"class":138},"    student ",[128,979,270],{"class":134},[128,981,982],{"class":138}," find_student(students, student_id)\n",[128,984,986],{"class":130,"line":985},81,[128,987,160],{"emptyLinePlaceholder":159},[128,989,991,993,995,998,1001],{"class":130,"line":990},82,[128,992,209],{"class":134},[128,994,546],{"class":138},[128,996,997],{"class":134},"is",[128,999,1000],{"class":166}," None",[128,1002,241],{"class":138},[128,1004,1006,1008,1010,1013],{"class":130,"line":1005},83,[128,1007,313],{"class":166},[128,1009,253],{"class":138},[128,1011,1012],{"class":176},"\"学生不存在\"",[128,1014,180],{"class":138},[128,1016,1018],{"class":130,"line":1017},84,[128,1019,810],{"class":134},[128,1021,1023],{"class":130,"line":1022},85,[128,1024,160],{"emptyLinePlaceholder":159},[128,1026,1028],{"class":130,"line":1027},86,[128,1029,1030],{"class":138},"    students.remove(student)\n",[128,1032,1034],{"class":130,"line":1033},87,[128,1035,923],{"class":138},[128,1037,1039,1041,1043,1046],{"class":130,"line":1038},88,[128,1040,437],{"class":166},[128,1042,253],{"class":138},[128,1044,1045],{"class":176},"\"删除成功\"",[128,1047,180],{"class":138},[128,1049,1051],{"class":130,"line":1050},89,[128,1052,160],{"emptyLinePlaceholder":159},[128,1054,1056],{"class":130,"line":1055},90,[128,1057,160],{"emptyLinePlaceholder":159},[128,1059,1061,1063,1066],{"class":130,"line":1060},91,[128,1062,196],{"class":134},[128,1064,1065],{"class":199}," update_student",[128,1067,348],{"class":138},[128,1069,1071,1073,1075,1077,1079,1082],{"class":130,"line":1070},92,[128,1072,767],{"class":138},[128,1074,270],{"class":134},[128,1076,772],{"class":166},[128,1078,253],{"class":138},[128,1080,1081],{"class":176},"\"请输入要修改的学号:\"",[128,1083,180],{"class":138},[128,1085,1087,1089,1091],{"class":130,"line":1086},93,[128,1088,977],{"class":138},[128,1090,270],{"class":134},[128,1092,982],{"class":138},[128,1094,1096],{"class":130,"line":1095},94,[128,1097,160],{"emptyLinePlaceholder":159},[128,1099,1101,1103,1105,1107,1109],{"class":130,"line":1100},95,[128,1102,209],{"class":134},[128,1104,546],{"class":138},[128,1106,997],{"class":134},[128,1108,1000],{"class":166},[128,1110,241],{"class":138},[128,1112,1114,1116,1118,1120],{"class":130,"line":1113},96,[128,1115,313],{"class":166},[128,1117,253],{"class":138},[128,1119,1012],{"class":176},[128,1121,180],{"class":138},[128,1123,1125],{"class":130,"line":1124},97,[128,1126,810],{"class":134},[128,1128,1130],{"class":130,"line":1129},98,[128,1131,160],{"emptyLinePlaceholder":159},[128,1133,1135,1137,1139,1141,1143,1146],{"class":130,"line":1134},99,[128,1136,821],{"class":138},[128,1138,270],{"class":134},[128,1140,772],{"class":166},[128,1142,253],{"class":138},[128,1144,1145],{"class":176},"\"请输入新姓名:\"",[128,1147,180],{"class":138},[128,1149,1151,1153,1155,1157,1160],{"class":130,"line":1150},100,[128,1152,838],{"class":138},[128,1154,270],{"class":134},[128,1156,843],{"class":138},[128,1158,1159],{"class":176},"\"请输入新年龄:\"",[128,1161,180],{"class":138},[128,1163,1165,1167,1169,1171,1174],{"class":130,"line":1164},101,[128,1166,854],{"class":138},[128,1168,270],{"class":134},[128,1170,859],{"class":138},[128,1172,1173],{"class":176},"\"请输入新成绩:\"",[128,1175,180],{"class":138},[128,1177,1179],{"class":130,"line":1178},102,[128,1180,160],{"emptyLinePlaceholder":159},[128,1182,1184,1187,1190,1192,1194],{"class":130,"line":1183},103,[128,1185,1186],{"class":138},"    student[",[128,1188,1189],{"class":176},"\"name\"",[128,1191,567],{"class":138},[128,1193,270],{"class":134},[128,1195,1196],{"class":138}," name\n",[128,1198,1200,1202,1205,1207,1209],{"class":130,"line":1199},104,[128,1201,1186],{"class":138},[128,1203,1204],{"class":176},"\"age\"",[128,1206,567],{"class":138},[128,1208,270],{"class":134},[128,1210,1211],{"class":138}," age\n",[128,1213,1215,1217,1220,1222,1224],{"class":130,"line":1214},105,[128,1216,1186],{"class":138},[128,1218,1219],{"class":176},"\"score\"",[128,1221,567],{"class":138},[128,1223,270],{"class":134},[128,1225,1226],{"class":138}," score\n",[128,1228,1230],{"class":130,"line":1229},106,[128,1231,160],{"emptyLinePlaceholder":159},[128,1233,1235],{"class":130,"line":1234},107,[128,1236,923],{"class":138},[128,1238,1240,1242,1244,1247],{"class":130,"line":1239},108,[128,1241,437],{"class":166},[128,1243,253],{"class":138},[128,1245,1246],{"class":176},"\"修改成功\"",[128,1248,180],{"class":138},[128,1250,1252],{"class":130,"line":1251},109,[128,1253,160],{"emptyLinePlaceholder":159},[128,1255,1257],{"class":130,"line":1256},110,[128,1258,160],{"emptyLinePlaceholder":159},[128,1260,1262,1264,1267],{"class":130,"line":1261},111,[128,1263,196],{"class":134},[128,1265,1266],{"class":199}," query_student",[128,1268,348],{"class":138},[128,1270,1272,1274,1276,1278,1280,1283],{"class":130,"line":1271},112,[128,1273,767],{"class":138},[128,1275,270],{"class":134},[128,1277,772],{"class":166},[128,1279,253],{"class":138},[128,1281,1282],{"class":176},"\"请输入要查询的学号:\"",[128,1284,180],{"class":138},[128,1286,1288,1290,1292],{"class":130,"line":1287},113,[128,1289,977],{"class":138},[128,1291,270],{"class":134},[128,1293,982],{"class":138},[128,1295,1297],{"class":130,"line":1296},114,[128,1298,160],{"emptyLinePlaceholder":159},[128,1300,1302,1304,1306,1308,1310],{"class":130,"line":1301},115,[128,1303,209],{"class":134},[128,1305,546],{"class":138},[128,1307,997],{"class":134},[128,1309,1000],{"class":166},[128,1311,241],{"class":138},[128,1313,1315,1317,1319,1321],{"class":130,"line":1314},116,[128,1316,313],{"class":166},[128,1318,253],{"class":138},[128,1320,1012],{"class":176},[128,1322,180],{"class":138},[128,1324,1326],{"class":130,"line":1325},117,[128,1327,810],{"class":134},[128,1329,1331],{"class":130,"line":1330},118,[128,1332,160],{"emptyLinePlaceholder":159},[128,1334,1336],{"class":130,"line":1335},119,[128,1337,1338],{"class":138},"    print_student(student)\n",[128,1340,1342],{"class":130,"line":1341},120,[128,1343,160],{"emptyLinePlaceholder":159},[128,1345,1347],{"class":130,"line":1346},121,[128,1348,160],{"emptyLinePlaceholder":159},[128,1350,1352,1354,1357],{"class":130,"line":1351},122,[128,1353,196],{"class":134},[128,1355,1356],{"class":199}," print_student",[128,1358,1359],{"class":138},"(student):\n",[128,1361,1363,1365],{"class":130,"line":1362},123,[128,1364,437],{"class":166},[128,1366,1367],{"class":138},"(\n",[128,1369,1371,1374,1377,1380,1383,1386,1389,1392],{"class":130,"line":1370},124,[128,1372,1373],{"class":134},"        f",[128,1375,1376],{"class":176},"\"",[128,1378,1379],{"class":166},"{",[128,1381,1382],{"class":138},"student[",[128,1384,1385],{"class":176},"'student_id'",[128,1387,1388],{"class":138},"]",[128,1390,1391],{"class":166},"}\\t",[128,1393,1394],{"class":176},"\"\n",[128,1396,1398,1400,1402,1404,1406,1409,1411,1413],{"class":130,"line":1397},125,[128,1399,1373],{"class":134},[128,1401,1376],{"class":176},[128,1403,1379],{"class":166},[128,1405,1382],{"class":138},[128,1407,1408],{"class":176},"'name'",[128,1410,1388],{"class":138},[128,1412,1391],{"class":166},[128,1414,1394],{"class":176},[128,1416,1418,1420,1422,1424,1426,1429,1431,1433],{"class":130,"line":1417},126,[128,1419,1373],{"class":134},[128,1421,1376],{"class":176},[128,1423,1379],{"class":166},[128,1425,1382],{"class":138},[128,1427,1428],{"class":176},"'age'",[128,1430,1388],{"class":138},[128,1432,1391],{"class":166},[128,1434,1394],{"class":176},[128,1436,1438,1440,1442,1444,1446,1449,1451,1454],{"class":130,"line":1437},127,[128,1439,1373],{"class":134},[128,1441,1376],{"class":176},[128,1443,1379],{"class":166},[128,1445,1382],{"class":138},[128,1447,1448],{"class":176},"'score'",[128,1450,1388],{"class":138},[128,1452,1453],{"class":166},"}",[128,1455,1394],{"class":176},[128,1457,1459],{"class":130,"line":1458},128,[128,1460,1461],{"class":138},"    )\n",[128,1463,1465],{"class":130,"line":1464},129,[128,1466,160],{"emptyLinePlaceholder":159},[128,1468,1470],{"class":130,"line":1469},130,[128,1471,160],{"emptyLinePlaceholder":159},[128,1473,1475,1477,1480],{"class":130,"line":1474},131,[128,1476,196],{"class":134},[128,1478,1479],{"class":199}," show_all_students",[128,1481,348],{"class":138},[128,1483,1485,1487,1489],{"class":130,"line":1484},132,[128,1486,209],{"class":134},[128,1488,212],{"class":134},[128,1490,552],{"class":138},[128,1492,1494,1496,1498,1501],{"class":130,"line":1493},133,[128,1495,313],{"class":166},[128,1497,253],{"class":138},[128,1499,1500],{"class":176},"\"暂无学生\"",[128,1502,180],{"class":138},[128,1504,1506],{"class":130,"line":1505},134,[128,1507,810],{"class":134},[128,1509,1511],{"class":130,"line":1510},135,[128,1512,160],{"emptyLinePlaceholder":159},[128,1514,1516,1518,1520,1523,1526,1529,1531,1534,1536,1539],{"class":130,"line":1515},136,[128,1517,437],{"class":166},[128,1519,253],{"class":138},[128,1521,1522],{"class":176},"\"学号",[128,1524,1525],{"class":166},"\\t",[128,1527,1528],{"class":176},"姓名",[128,1530,1525],{"class":166},[128,1532,1533],{"class":176},"年龄",[128,1535,1525],{"class":166},[128,1537,1538],{"class":176},"成绩\"",[128,1540,180],{"class":138},[128,1542,1544,1546,1548,1550],{"class":130,"line":1543},137,[128,1545,543],{"class":134},[128,1547,546],{"class":138},[128,1549,549],{"class":134},[128,1551,552],{"class":138},[128,1553,1555],{"class":130,"line":1554},138,[128,1556,1557],{"class":138},"        print_student(student)\n",[128,1559,1561],{"class":130,"line":1560},139,[128,1562,160],{"emptyLinePlaceholder":159},[128,1564,1566],{"class":130,"line":1565},140,[128,1567,160],{"emptyLinePlaceholder":159},[128,1569,1571,1573,1576],{"class":130,"line":1570},141,[128,1572,196],{"class":134},[128,1574,1575],{"class":199}," main",[128,1577,203],{"class":138},[128,1579,1581,1584,1586],{"class":130,"line":1580},142,[128,1582,1583],{"class":138},"    students ",[128,1585,270],{"class":134},[128,1587,1588],{"class":138}," load_students()\n",[128,1590,1592],{"class":130,"line":1591},143,[128,1593,160],{"emptyLinePlaceholder":159},[128,1595,1597,1599,1601],{"class":130,"line":1596},144,[128,1598,617],{"class":134},[128,1600,620],{"class":166},[128,1602,241],{"class":138},[128,1604,1606],{"class":130,"line":1605},145,[128,1607,1608],{"class":138},"        show_menu()\n",[128,1610,1612,1615,1617,1619,1621,1624],{"class":130,"line":1611},146,[128,1613,1614],{"class":138},"        choice ",[128,1616,270],{"class":134},[128,1618,772],{"class":166},[128,1620,253],{"class":138},[128,1622,1623],{"class":176},"\"请输入操作:\"",[128,1625,180],{"class":138},[128,1627,1629],{"class":130,"line":1628},147,[128,1630,160],{"emptyLinePlaceholder":159},[128,1632,1634,1636,1639,1641,1644],{"class":130,"line":1633},148,[128,1635,558],{"class":134},[128,1637,1638],{"class":138}," choice ",[128,1640,570],{"class":134},[128,1642,1643],{"class":176}," \"1\"",[128,1645,241],{"class":138},[128,1647,1649],{"class":130,"line":1648},149,[128,1650,1651],{"class":138},"            add_student(students)\n",[128,1653,1655,1658,1660,1662,1665],{"class":130,"line":1654},150,[128,1656,1657],{"class":134},"        elif",[128,1659,1638],{"class":138},[128,1661,570],{"class":134},[128,1663,1664],{"class":176}," \"2\"",[128,1666,241],{"class":138},[128,1668,1670],{"class":130,"line":1669},151,[128,1671,1672],{"class":138},"            delete_student(students)\n",[128,1674,1676,1678,1680,1682,1685],{"class":130,"line":1675},152,[128,1677,1657],{"class":134},[128,1679,1638],{"class":138},[128,1681,570],{"class":134},[128,1683,1684],{"class":176}," \"3\"",[128,1686,241],{"class":138},[128,1688,1690],{"class":130,"line":1689},153,[128,1691,1692],{"class":138},"            update_student(students)\n",[128,1694,1696,1698,1700,1702,1705],{"class":130,"line":1695},154,[128,1697,1657],{"class":134},[128,1699,1638],{"class":138},[128,1701,570],{"class":134},[128,1703,1704],{"class":176}," \"4\"",[128,1706,241],{"class":138},[128,1708,1710],{"class":130,"line":1709},155,[128,1711,1712],{"class":138},"            query_student(students)\n",[128,1714,1716,1718,1720,1722,1725],{"class":130,"line":1715},156,[128,1717,1657],{"class":134},[128,1719,1638],{"class":138},[128,1721,570],{"class":134},[128,1723,1724],{"class":176}," \"5\"",[128,1726,241],{"class":138},[128,1728,1730],{"class":130,"line":1729},157,[128,1731,1732],{"class":138},"            show_all_students(students)\n",[128,1734,1736,1738,1740,1742,1745],{"class":130,"line":1735},158,[128,1737,1657],{"class":134},[128,1739,1638],{"class":138},[128,1741,570],{"class":134},[128,1743,1744],{"class":176}," \"0\"",[128,1746,241],{"class":138},[128,1748,1750,1752,1754,1757],{"class":130,"line":1749},159,[128,1751,663],{"class":166},[128,1753,253],{"class":138},[128,1755,1756],{"class":176},"\"退出系统\"",[128,1758,180],{"class":138},[128,1760,1762],{"class":130,"line":1761},160,[128,1763,1764],{"class":134},"            break\n",[128,1766,1768,1771],{"class":130,"line":1767},161,[128,1769,1770],{"class":134},"        else",[128,1772,241],{"class":138},[128,1774,1776,1778,1780,1783],{"class":130,"line":1775},162,[128,1777,663],{"class":166},[128,1779,253],{"class":138},[128,1781,1782],{"class":176},"\"输入错误\"",[128,1784,180],{"class":138},[128,1786,1788],{"class":130,"line":1787},163,[128,1789,160],{"emptyLinePlaceholder":159},[128,1791,1793],{"class":130,"line":1792},164,[128,1794,160],{"emptyLinePlaceholder":159},[128,1796,1798,1801,1804,1807,1810],{"class":130,"line":1797},165,[128,1799,1800],{"class":134},"if",[128,1802,1803],{"class":166}," __name__",[128,1805,1806],{"class":134}," ==",[128,1808,1809],{"class":176}," \"__main__\"",[128,1811,241],{"class":138},[128,1813,1815],{"class":130,"line":1814},166,[128,1816,1817],{"class":138},"    main()\n",[19,1819,1820],{},"这个项目串联了：",[26,1822,1823,1826,1829,1832,1835,1837],{},[29,1824,1825],{},"菜单循环。",[29,1827,1828],{},"函数封装。",[29,1830,1831],{},"列表字典。",[29,1833,1834],{},"JSON 读写。",[29,1836,46],{},[29,1838,1839,1842],{},[114,1840,1841],{},"if __name__ == \"__main__\"","。",[14,1844,1846],{"id":1845},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,1848,1849],{},"可以进一步拆成两个类：",[26,1851,1852,1858],{},[29,1853,1854,1857],{},[114,1855,1856],{},"Student","：表示单个学生。",[29,1859,1860,1863],{},[114,1861,1862],{},"StudentManager","：负责学生增删改查和文件保存。",[19,1865,1866],{},"示意代码：",[106,1868,1870],{"className":122,"code":1869,"language":124,"meta":112,"style":112},"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",[114,1871,1872,1884,1888,1892,1897,1907,1915,1922,1930,1938,1942,1953,1960,1974,1986,1998,2010,2015,2019,2027,2037,2046,2056,2064,2072,2080],{"__ignoreMap":112},[128,1873,1874,1876,1879,1881],{"class":130,"line":131},[128,1875,145],{"class":134},[128,1877,1878],{"class":138}," dataclasses ",[128,1880,135],{"class":134},[128,1882,1883],{"class":138}," dataclass\n",[128,1885,1886],{"class":130,"line":142},[128,1887,160],{"emptyLinePlaceholder":159},[128,1889,1890],{"class":130,"line":156},[128,1891,160],{"emptyLinePlaceholder":159},[128,1893,1894],{"class":130,"line":163},[128,1895,1896],{"class":199},"@dataclass\n",[128,1898,1899,1902,1905],{"class":130,"line":183},[128,1900,1901],{"class":134},"class",[128,1903,1904],{"class":199}," Student",[128,1906,241],{"class":138},[128,1908,1909,1912],{"class":130,"line":188},[128,1910,1911],{"class":138},"    student_id: ",[128,1913,1914],{"class":166},"str\n",[128,1916,1917,1920],{"class":130,"line":193},[128,1918,1919],{"class":138},"    name: ",[128,1921,1914],{"class":166},[128,1923,1924,1927],{"class":130,"line":206},[128,1925,1926],{"class":138},"    age: ",[128,1928,1929],{"class":166},"int\n",[128,1931,1932,1935],{"class":130,"line":221},[128,1933,1934],{"class":138},"    score: ",[128,1936,1937],{"class":166},"float\n",[128,1939,1940],{"class":130,"line":230},[128,1941,160],{"emptyLinePlaceholder":159},[128,1943,1944,1947,1950],{"class":130,"line":235},[128,1945,1946],{"class":134},"    def",[128,1948,1949],{"class":199}," to_dict",[128,1951,1952],{"class":138},"(self):\n",[128,1954,1955,1957],{"class":130,"line":244},[128,1956,224],{"class":134},[128,1958,1959],{"class":138}," {\n",[128,1961,1962,1965,1968,1971],{"class":130,"line":287},[128,1963,1964],{"class":176},"            \"student_id\"",[128,1966,1967],{"class":138},": ",[128,1969,1970],{"class":166},"self",[128,1972,1973],{"class":138},".student_id,\n",[128,1975,1976,1979,1981,1983],{"class":130,"line":301},[128,1977,1978],{"class":176},"            \"name\"",[128,1980,1967],{"class":138},[128,1982,1970],{"class":166},[128,1984,1985],{"class":138},".name,\n",[128,1987,1988,1991,1993,1995],{"class":130,"line":310},[128,1989,1990],{"class":176},"            \"age\"",[128,1992,1967],{"class":138},[128,1994,1970],{"class":166},[128,1996,1997],{"class":138},".age,\n",[128,1999,2000,2003,2005,2007],{"class":130,"line":323},[128,2001,2002],{"class":176},"            \"score\"",[128,2004,1967],{"class":138},[128,2006,1970],{"class":166},[128,2008,2009],{"class":138},".score,\n",[128,2011,2012],{"class":130,"line":330},[128,2013,2014],{"class":138},"        }\n",[128,2016,2017],{"class":130,"line":335},[128,2018,160],{"emptyLinePlaceholder":159},[128,2020,2021,2024],{"class":130,"line":340},[128,2022,2023],{"class":199},"    @",[128,2025,2026],{"class":166},"classmethod\n",[128,2028,2029,2031,2034],{"class":130,"line":351},[128,2030,1946],{"class":134},[128,2032,2033],{"class":199}," from_dict",[128,2035,2036],{"class":138},"(cls, data):\n",[128,2038,2039,2041,2044],{"class":130,"line":384},[128,2040,224],{"class":134},[128,2042,2043],{"class":166}," cls",[128,2045,1367],{"class":138},[128,2047,2048,2051,2053],{"class":130,"line":414},[128,2049,2050],{"class":138},"            data[",[128,2052,564],{"class":176},[128,2054,2055],{"class":138},"],\n",[128,2057,2058,2060,2062],{"class":130,"line":419},[128,2059,2050],{"class":138},[128,2061,1189],{"class":176},[128,2063,2055],{"class":138},[128,2065,2066,2068,2070],{"class":130,"line":424},[128,2067,2050],{"class":138},[128,2069,1204],{"class":176},[128,2071,2055],{"class":138},[128,2073,2074,2076,2078],{"class":130,"line":434},[128,2075,2050],{"class":138},[128,2077,1219],{"class":176},[128,2079,2055],{"class":138},[128,2081,2082],{"class":130,"line":447},[128,2083,2084],{"class":138},"        )\n",[19,2086,2087],{},"管理器示意：",[106,2089,2091],{"className":122,"code":2090,"language":124,"meta":112,"style":112},"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",[114,2092,2093,2102,2111,2123,2127,2137,2152,2164,2171,2177,2181,2191,2200,2207,2214],{"__ignoreMap":112},[128,2094,2095,2097,2100],{"class":130,"line":131},[128,2096,1901],{"class":134},[128,2098,2099],{"class":199}," StudentManager",[128,2101,241],{"class":138},[128,2103,2104,2106,2109],{"class":130,"line":142},[128,2105,1946],{"class":134},[128,2107,2108],{"class":166}," __init__",[128,2110,1952],{"class":138},[128,2112,2113,2116,2119,2121],{"class":130,"line":156},[128,2114,2115],{"class":166},"        self",[128,2117,2118],{"class":138},".students ",[128,2120,270],{"class":134},[128,2122,227],{"class":138},[128,2124,2125],{"class":130,"line":163},[128,2126,160],{"emptyLinePlaceholder":159},[128,2128,2129,2131,2134],{"class":130,"line":183},[128,2130,1946],{"class":134},[128,2132,2133],{"class":199}," find_by_id",[128,2135,2136],{"class":138},"(self, student_id):\n",[128,2138,2139,2142,2144,2146,2149],{"class":130,"line":188},[128,2140,2141],{"class":134},"        for",[128,2143,546],{"class":138},[128,2145,549],{"class":134},[128,2147,2148],{"class":166}," self",[128,2150,2151],{"class":138},".students:\n",[128,2153,2154,2157,2160,2162],{"class":130,"line":193},[128,2155,2156],{"class":134},"            if",[128,2158,2159],{"class":138}," student.student_id ",[128,2161,570],{"class":134},[128,2163,573],{"class":138},[128,2165,2166,2169],{"class":130,"line":206},[128,2167,2168],{"class":134},"                return",[128,2170,581],{"class":138},[128,2172,2173,2175],{"class":130,"line":221},[128,2174,224],{"class":134},[128,2176,590],{"class":166},[128,2178,2179],{"class":130,"line":230},[128,2180,160],{"emptyLinePlaceholder":159},[128,2182,2183,2185,2188],{"class":130,"line":235},[128,2184,1946],{"class":134},[128,2186,2187],{"class":199}," add",[128,2189,2190],{"class":138},"(self, student):\n",[128,2192,2193,2195,2197],{"class":130,"line":244},[128,2194,558],{"class":134},[128,2196,2148],{"class":166},[128,2198,2199],{"class":138},".find_by_id(student.student_id):\n",[128,2201,2202,2204],{"class":130,"line":287},[128,2203,290],{"class":134},[128,2205,2206],{"class":166}," False\n",[128,2208,2209,2211],{"class":130,"line":301},[128,2210,2115],{"class":166},[128,2212,2213],{"class":138},".students.append(student)\n",[128,2215,2216,2218],{"class":130,"line":310},[128,2217,224],{"class":134},[128,2219,2220],{"class":166}," True\n",[19,2222,2223],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,2225,2227],{"id":2226},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[72,2229,2231],{"id":2230},"_1251-数据结构","12.5.1 数据结构",[106,2233,2235],{"className":122,"code":2234,"language":124,"meta":112,"style":112},"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",[114,2236,2237,2247,2283,2313,2343,2372],{"__ignoreMap":112},[128,2238,2239,2242,2244],{"class":130,"line":131},[128,2240,2241],{"class":138},"sales ",[128,2243,270],{"class":134},[128,2245,2246],{"class":138}," [\n",[128,2248,2249,2252,2255,2257,2260,2262,2265,2267,2270,2272,2275,2277,2280],{"class":130,"line":142},[128,2250,2251],{"class":138},"    {",[128,2253,2254],{"class":176},"\"date\"",[128,2256,1967],{"class":138},[128,2258,2259],{"class":176},"\"2024-10-01\"",[128,2261,258],{"class":138},[128,2263,2264],{"class":176},"\"category\"",[128,2266,1967],{"class":138},[128,2268,2269],{"class":176},"\"手机\"",[128,2271,258],{"class":138},[128,2273,2274],{"class":176},"\"amount\"",[128,2276,1967],{"class":138},[128,2278,2279],{"class":166},"12000",[128,2281,2282],{"class":138},"},\n",[128,2284,2285,2287,2289,2291,2293,2295,2297,2299,2302,2304,2306,2308,2311],{"class":130,"line":156},[128,2286,2251],{"class":138},[128,2288,2254],{"class":176},[128,2290,1967],{"class":138},[128,2292,2259],{"class":176},[128,2294,258],{"class":138},[128,2296,2264],{"class":176},[128,2298,1967],{"class":138},[128,2300,2301],{"class":176},"\"电脑\"",[128,2303,258],{"class":138},[128,2305,2274],{"class":176},[128,2307,1967],{"class":138},[128,2309,2310],{"class":166},"18000",[128,2312,2282],{"class":138},[128,2314,2315,2317,2319,2321,2324,2326,2328,2330,2332,2334,2336,2338,2341],{"class":130,"line":163},[128,2316,2251],{"class":138},[128,2318,2254],{"class":176},[128,2320,1967],{"class":138},[128,2322,2323],{"class":176},"\"2024-10-02\"",[128,2325,258],{"class":138},[128,2327,2264],{"class":176},[128,2329,1967],{"class":138},[128,2331,2269],{"class":176},[128,2333,258],{"class":138},[128,2335,2274],{"class":176},[128,2337,1967],{"class":138},[128,2339,2340],{"class":166},"15000",[128,2342,2282],{"class":138},[128,2344,2345,2347,2349,2351,2353,2355,2357,2359,2361,2363,2365,2367,2370],{"class":130,"line":183},[128,2346,2251],{"class":138},[128,2348,2254],{"class":176},[128,2350,1967],{"class":138},[128,2352,2323],{"class":176},[128,2354,258],{"class":138},[128,2356,2264],{"class":176},[128,2358,1967],{"class":138},[128,2360,2301],{"class":176},[128,2362,258],{"class":138},[128,2364,2274],{"class":176},[128,2366,1967],{"class":138},[128,2368,2369],{"class":166},"16000",[128,2371,2282],{"class":138},[128,2373,2374],{"class":130,"line":188},[128,2375,2376],{"class":138},"]\n",[72,2378,2380],{"id":2379},"_1252-按日期统计","12.5.2 按日期统计",[106,2382,2384],{"className":122,"code":2383,"language":124,"meta":112,"style":112},"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",[114,2385,2386,2396,2400,2413,2427,2440,2461,2465],{"__ignoreMap":112},[128,2387,2388,2391,2393],{"class":130,"line":131},[128,2389,2390],{"class":138},"daily_total ",[128,2392,270],{"class":134},[128,2394,2395],{"class":138}," {}\n",[128,2397,2398],{"class":130,"line":142},[128,2399,160],{"emptyLinePlaceholder":159},[128,2401,2402,2405,2408,2410],{"class":130,"line":156},[128,2403,2404],{"class":134},"for",[128,2406,2407],{"class":138}," item ",[128,2409,549],{"class":134},[128,2411,2412],{"class":138}," sales:\n",[128,2414,2415,2418,2420,2423,2425],{"class":130,"line":163},[128,2416,2417],{"class":138},"    date ",[128,2419,270],{"class":134},[128,2421,2422],{"class":138}," item[",[128,2424,2254],{"class":176},[128,2426,2376],{"class":138},[128,2428,2429,2432,2434,2436,2438],{"class":130,"line":183},[128,2430,2431],{"class":138},"    amount ",[128,2433,270],{"class":134},[128,2435,2422],{"class":138},[128,2437,2274],{"class":176},[128,2439,2376],{"class":138},[128,2441,2442,2445,2447,2450,2453,2455,2458],{"class":130,"line":188},[128,2443,2444],{"class":138},"    daily_total[date] ",[128,2446,270],{"class":134},[128,2448,2449],{"class":138}," daily_total.get(date, ",[128,2451,2452],{"class":166},"0",[128,2454,276],{"class":138},[128,2456,2457],{"class":134},"+",[128,2459,2460],{"class":138}," amount\n",[128,2462,2463],{"class":130,"line":193},[128,2464,160],{"emptyLinePlaceholder":159},[128,2466,2467,2470],{"class":130,"line":206},[128,2468,2469],{"class":166},"print",[128,2471,2472],{"class":138},"(daily_total)\n",[72,2474,2476],{"id":2475},"_1253-按类别统计","12.5.3 按类别统计",[106,2478,2480],{"className":122,"code":2479,"language":124,"meta":112,"style":112},"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",[114,2481,2482,2491,2495,2505,2518,2530,2548,2552],{"__ignoreMap":112},[128,2483,2484,2487,2489],{"class":130,"line":131},[128,2485,2486],{"class":138},"category_total ",[128,2488,270],{"class":134},[128,2490,2395],{"class":138},[128,2492,2493],{"class":130,"line":142},[128,2494,160],{"emptyLinePlaceholder":159},[128,2496,2497,2499,2501,2503],{"class":130,"line":156},[128,2498,2404],{"class":134},[128,2500,2407],{"class":138},[128,2502,549],{"class":134},[128,2504,2412],{"class":138},[128,2506,2507,2510,2512,2514,2516],{"class":130,"line":163},[128,2508,2509],{"class":138},"    category ",[128,2511,270],{"class":134},[128,2513,2422],{"class":138},[128,2515,2264],{"class":176},[128,2517,2376],{"class":138},[128,2519,2520,2522,2524,2526,2528],{"class":130,"line":183},[128,2521,2431],{"class":138},[128,2523,270],{"class":134},[128,2525,2422],{"class":138},[128,2527,2274],{"class":176},[128,2529,2376],{"class":138},[128,2531,2532,2535,2537,2540,2542,2544,2546],{"class":130,"line":188},[128,2533,2534],{"class":138},"    category_total[category] ",[128,2536,270],{"class":134},[128,2538,2539],{"class":138}," category_total.get(category, ",[128,2541,2452],{"class":166},[128,2543,276],{"class":138},[128,2545,2457],{"class":134},[128,2547,2460],{"class":138},[128,2549,2550],{"class":130,"line":193},[128,2551,160],{"emptyLinePlaceholder":159},[128,2553,2554,2556],{"class":130,"line":206},[128,2555,2469],{"class":166},[128,2557,2558],{"class":138},"(category_total)\n",[72,2560,2562],{"id":2561},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[106,2564,2566],{"className":122,"code":2565,"language":124,"meta":112,"style":112},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[114,2567,2568,2596],{"__ignoreMap":112},[128,2569,2570,2573,2575,2578,2581,2584,2587,2590,2593],{"class":130,"line":131},[128,2571,2572],{"class":138},"top_date, top_amount ",[128,2574,270],{"class":134},[128,2576,2577],{"class":166}," max",[128,2579,2580],{"class":138},"(daily_total.items(), ",[128,2582,2583],{"class":266},"key",[128,2585,2586],{"class":134},"=lambda",[128,2588,2589],{"class":138}," item: item[",[128,2591,2592],{"class":166},"1",[128,2594,2595],{"class":138},"])\n",[128,2597,2598,2600],{"class":130,"line":142},[128,2599,2469],{"class":166},[128,2601,2602],{"class":138},"(top_date, top_amount)\n",[14,2604,2606],{"id":2605},"_126-绘制柱状图","12.6 绘制柱状图",[106,2608,2610],{"className":122,"code":2609,"language":124,"meta":112,"style":112},"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",[114,2611,2612,2629,2641,2645,2653,2666,2678,2690,2695,2699,2709,2720,2735,2740,2761,2781,2798,2802],{"__ignoreMap":112},[128,2613,2614,2616,2619,2621,2624,2626],{"class":130,"line":131},[128,2615,145],{"class":134},[128,2617,2618],{"class":138}," pyecharts ",[128,2620,135],{"class":134},[128,2622,2623],{"class":138}," options ",[128,2625,279],{"class":134},[128,2627,2628],{"class":138}," opts\n",[128,2630,2631,2633,2636,2638],{"class":130,"line":142},[128,2632,145],{"class":134},[128,2634,2635],{"class":138}," pyecharts.charts ",[128,2637,135],{"class":134},[128,2639,2640],{"class":138}," Bar\n",[128,2642,2643],{"class":130,"line":156},[128,2644,160],{"emptyLinePlaceholder":159},[128,2646,2647,2649,2651],{"class":130,"line":163},[128,2648,2486],{"class":138},[128,2650,270],{"class":134},[128,2652,1959],{"class":138},[128,2654,2655,2658,2660,2663],{"class":130,"line":183},[128,2656,2657],{"class":176},"    \"手机\"",[128,2659,1967],{"class":138},[128,2661,2662],{"class":166},"27000",[128,2664,2665],{"class":138},",\n",[128,2667,2668,2671,2673,2676],{"class":130,"line":188},[128,2669,2670],{"class":176},"    \"电脑\"",[128,2672,1967],{"class":138},[128,2674,2675],{"class":166},"34000",[128,2677,2665],{"class":138},[128,2679,2680,2683,2685,2688],{"class":130,"line":193},[128,2681,2682],{"class":176},"    \"耳机\"",[128,2684,1967],{"class":138},[128,2686,2687],{"class":166},"8000",[128,2689,2665],{"class":138},[128,2691,2692],{"class":130,"line":206},[128,2693,2694],{"class":138},"}\n",[128,2696,2697],{"class":130,"line":221},[128,2698,160],{"emptyLinePlaceholder":159},[128,2700,2701,2704,2706],{"class":130,"line":230},[128,2702,2703],{"class":138},"bar ",[128,2705,270],{"class":134},[128,2707,2708],{"class":138}," Bar()\n",[128,2710,2711,2714,2717],{"class":130,"line":235},[128,2712,2713],{"class":138},"bar.add_xaxis(",[128,2715,2716],{"class":166},"list",[128,2718,2719],{"class":138},"(category_total.keys()))\n",[128,2721,2722,2725,2728,2730,2732],{"class":130,"line":244},[128,2723,2724],{"class":138},"bar.add_yaxis(",[128,2726,2727],{"class":176},"\"销售额\"",[128,2729,258],{"class":138},[128,2731,2716],{"class":166},[128,2733,2734],{"class":138},"(category_total.values()))\n",[128,2736,2737],{"class":130,"line":287},[128,2738,2739],{"class":138},"bar.set_global_opts(\n",[128,2741,2742,2745,2747,2750,2753,2755,2758],{"class":130,"line":301},[128,2743,2744],{"class":266},"    title_opts",[128,2746,270],{"class":134},[128,2748,2749],{"class":138},"opts.TitleOpts(",[128,2751,2752],{"class":266},"title",[128,2754,270],{"class":134},[128,2756,2757],{"class":176},"\"品类销售额\"",[128,2759,2760],{"class":138},"),\n",[128,2762,2763,2766,2768,2771,2774,2776,2779],{"class":130,"line":310},[128,2764,2765],{"class":266},"    xaxis_opts",[128,2767,270],{"class":134},[128,2769,2770],{"class":138},"opts.AxisOpts(",[128,2772,2773],{"class":266},"name",[128,2775,270],{"class":134},[128,2777,2778],{"class":176},"\"品类\"",[128,2780,2760],{"class":138},[128,2782,2783,2786,2788,2790,2792,2794,2796],{"class":130,"line":323},[128,2784,2785],{"class":266},"    yaxis_opts",[128,2787,270],{"class":134},[128,2789,2770],{"class":138},[128,2791,2773],{"class":266},[128,2793,270],{"class":134},[128,2795,2727],{"class":176},[128,2797,2760],{"class":138},[128,2799,2800],{"class":130,"line":330},[128,2801,180],{"class":138},[128,2803,2804,2807,2810],{"class":130,"line":335},[128,2805,2806],{"class":138},"bar.render(",[128,2808,2809],{"class":176},"\"category_sales.html\"",[128,2811,180],{"class":138},[14,2813,2815],{"id":2814},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,2817,2818],{},"时间线适合展示不同日期、月份、年份的数据变化。",[106,2820,2822],{"className":122,"code":2821,"language":124,"meta":112,"style":112},"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",[114,2823,2824,2838,2849,2853,2862,2886,2909,2934,2938,2942,2952,2956,2968,2977,2987,3001,3035,3040,3044],{"__ignoreMap":112},[128,2825,2826,2828,2830,2832,2834,2836],{"class":130,"line":131},[128,2827,145],{"class":134},[128,2829,2618],{"class":138},[128,2831,135],{"class":134},[128,2833,2623],{"class":138},[128,2835,279],{"class":134},[128,2837,2628],{"class":138},[128,2839,2840,2842,2844,2846],{"class":130,"line":142},[128,2841,145],{"class":134},[128,2843,2635],{"class":138},[128,2845,135],{"class":134},[128,2847,2848],{"class":138}," Bar, Timeline\n",[128,2850,2851],{"class":130,"line":156},[128,2852,160],{"emptyLinePlaceholder":159},[128,2854,2855,2858,2860],{"class":130,"line":163},[128,2856,2857],{"class":138},"data ",[128,2859,270],{"class":134},[128,2861,1959],{"class":138},[128,2863,2864,2867,2870,2872,2874,2876,2878,2880,2882,2884],{"class":130,"line":183},[128,2865,2866],{"class":176},"    \"2024-10-01\"",[128,2868,2869],{"class":138},": {",[128,2871,2269],{"class":176},[128,2873,1967],{"class":138},[128,2875,2279],{"class":166},[128,2877,258],{"class":138},[128,2879,2301],{"class":176},[128,2881,1967],{"class":138},[128,2883,2310],{"class":166},[128,2885,2282],{"class":138},[128,2887,2888,2891,2893,2895,2897,2899,2901,2903,2905,2907],{"class":130,"line":188},[128,2889,2890],{"class":176},"    \"2024-10-02\"",[128,2892,2869],{"class":138},[128,2894,2269],{"class":176},[128,2896,1967],{"class":138},[128,2898,2340],{"class":166},[128,2900,258],{"class":138},[128,2902,2301],{"class":176},[128,2904,1967],{"class":138},[128,2906,2369],{"class":166},[128,2908,2282],{"class":138},[128,2910,2911,2914,2916,2918,2920,2923,2925,2927,2929,2932],{"class":130,"line":193},[128,2912,2913],{"class":176},"    \"2024-10-03\"",[128,2915,2869],{"class":138},[128,2917,2269],{"class":176},[128,2919,1967],{"class":138},[128,2921,2922],{"class":166},"17000",[128,2924,258],{"class":138},[128,2926,2301],{"class":176},[128,2928,1967],{"class":138},[128,2930,2931],{"class":166},"19000",[128,2933,2282],{"class":138},[128,2935,2936],{"class":130,"line":206},[128,2937,2694],{"class":138},[128,2939,2940],{"class":130,"line":221},[128,2941,160],{"emptyLinePlaceholder":159},[128,2943,2944,2947,2949],{"class":130,"line":230},[128,2945,2946],{"class":138},"timeline ",[128,2948,270],{"class":134},[128,2950,2951],{"class":138}," Timeline()\n",[128,2953,2954],{"class":130,"line":235},[128,2955,160],{"emptyLinePlaceholder":159},[128,2957,2958,2960,2963,2965],{"class":130,"line":244},[128,2959,2404],{"class":134},[128,2961,2962],{"class":138}," date, category_data ",[128,2964,549],{"class":134},[128,2966,2967],{"class":138}," data.items():\n",[128,2969,2970,2973,2975],{"class":130,"line":287},[128,2971,2972],{"class":138},"    bar ",[128,2974,270],{"class":134},[128,2976,2708],{"class":138},[128,2978,2979,2982,2984],{"class":130,"line":301},[128,2980,2981],{"class":138},"    bar.add_xaxis(",[128,2983,2716],{"class":166},[128,2985,2986],{"class":138},"(category_data.keys()))\n",[128,2988,2989,2992,2994,2996,2998],{"class":130,"line":310},[128,2990,2991],{"class":138},"    bar.add_yaxis(",[128,2993,2727],{"class":176},[128,2995,258],{"class":138},[128,2997,2716],{"class":166},[128,2999,3000],{"class":138},"(category_data.values()))\n",[128,3002,3003,3006,3009,3011,3013,3015,3017,3020,3022,3024,3027,3029,3032],{"class":130,"line":323},[128,3004,3005],{"class":138},"    bar.set_global_opts(",[128,3007,3008],{"class":266},"title_opts",[128,3010,270],{"class":134},[128,3012,2749],{"class":138},[128,3014,2752],{"class":266},[128,3016,270],{"class":134},[128,3018,3019],{"class":134},"f",[128,3021,1376],{"class":176},[128,3023,1379],{"class":166},[128,3025,3026],{"class":138},"date",[128,3028,1453],{"class":166},[128,3030,3031],{"class":176},"销售额\"",[128,3033,3034],{"class":138},"))\n",[128,3036,3037],{"class":130,"line":330},[128,3038,3039],{"class":138},"    timeline.add(bar, date)\n",[128,3041,3042],{"class":130,"line":335},[128,3043,160],{"emptyLinePlaceholder":159},[128,3045,3046,3049,3052],{"class":130,"line":340},[128,3047,3048],{"class":138},"timeline.render(",[128,3050,3051],{"class":176},"\"timeline_sales.html\"",[128,3053,180],{"class":138},[14,3055,3057],{"id":3056},"_128-绘制地图","12.8 绘制地图",[19,3059,3060],{},"地图适合展示地区数据。",[106,3062,3064],{"className":122,"code":3063,"language":124,"meta":112,"style":112},"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",[114,3065,3066,3080,3091,3095,3103,3118,3132,3146,3160,3164,3168,3178,3193,3198,3215,3234,3238],{"__ignoreMap":112},[128,3067,3068,3070,3072,3074,3076,3078],{"class":130,"line":131},[128,3069,145],{"class":134},[128,3071,2618],{"class":138},[128,3073,135],{"class":134},[128,3075,2623],{"class":138},[128,3077,279],{"class":134},[128,3079,2628],{"class":138},[128,3081,3082,3084,3086,3088],{"class":130,"line":142},[128,3083,145],{"class":134},[128,3085,2635],{"class":138},[128,3087,135],{"class":134},[128,3089,3090],{"class":138}," Map\n",[128,3092,3093],{"class":130,"line":156},[128,3094,160],{"emptyLinePlaceholder":159},[128,3096,3097,3099,3101],{"class":130,"line":163},[128,3098,2857],{"class":138},[128,3100,270],{"class":134},[128,3102,2246],{"class":138},[128,3104,3105,3108,3111,3113,3116],{"class":130,"line":183},[128,3106,3107],{"class":138},"    (",[128,3109,3110],{"class":176},"\"北京\"",[128,3112,258],{"class":138},[128,3114,3115],{"class":166},"120",[128,3117,2760],{"class":138},[128,3119,3120,3122,3125,3127,3130],{"class":130,"line":188},[128,3121,3107],{"class":138},[128,3123,3124],{"class":176},"\"上海\"",[128,3126,258],{"class":138},[128,3128,3129],{"class":166},"150",[128,3131,2760],{"class":138},[128,3133,3134,3136,3139,3141,3144],{"class":130,"line":193},[128,3135,3107],{"class":138},[128,3137,3138],{"class":176},"\"广东\"",[128,3140,258],{"class":138},[128,3142,3143],{"class":166},"200",[128,3145,2760],{"class":138},[128,3147,3148,3150,3153,3155,3158],{"class":130,"line":206},[128,3149,3107],{"class":138},[128,3151,3152],{"class":176},"\"浙江\"",[128,3154,258],{"class":138},[128,3156,3157],{"class":166},"180",[128,3159,2760],{"class":138},[128,3161,3162],{"class":130,"line":221},[128,3163,2376],{"class":138},[128,3165,3166],{"class":130,"line":230},[128,3167,160],{"emptyLinePlaceholder":159},[128,3169,3170,3173,3175],{"class":130,"line":235},[128,3171,3172],{"class":138},"map_chart ",[128,3174,270],{"class":134},[128,3176,3177],{"class":138}," Map()\n",[128,3179,3180,3183,3185,3188,3191],{"class":130,"line":244},[128,3181,3182],{"class":138},"map_chart.add(",[128,3184,2727],{"class":176},[128,3186,3187],{"class":138},", data, ",[128,3189,3190],{"class":176},"\"china\"",[128,3192,180],{"class":138},[128,3194,3195],{"class":130,"line":287},[128,3196,3197],{"class":138},"map_chart.set_global_opts(\n",[128,3199,3200,3202,3204,3206,3208,3210,3213],{"class":130,"line":301},[128,3201,2744],{"class":266},[128,3203,270],{"class":134},[128,3205,2749],{"class":138},[128,3207,2752],{"class":266},[128,3209,270],{"class":134},[128,3211,3212],{"class":176},"\"地区销售额\"",[128,3214,2760],{"class":138},[128,3216,3217,3220,3222,3225,3228,3230,3232],{"class":130,"line":310},[128,3218,3219],{"class":266},"    visualmap_opts",[128,3221,270],{"class":134},[128,3223,3224],{"class":138},"opts.VisualMapOpts(",[128,3226,3227],{"class":266},"max_",[128,3229,270],{"class":134},[128,3231,3143],{"class":166},[128,3233,2760],{"class":138},[128,3235,3236],{"class":130,"line":323},[128,3237,180],{"class":138},[128,3239,3240,3243,3246],{"class":130,"line":330},[128,3241,3242],{"class":138},"map_chart.render(",[128,3244,3245],{"class":176},"\"map_sales.html\"",[128,3247,180],{"class":138},[19,3249,3250],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,3252,3254],{"id":3253},"_129-项目拆分建议","12.9 项目拆分建议",[19,3256,3257],{},"当代码超过一个文件时，可以这样组织：",[106,3259,3262],{"className":3260,"code":3261,"language":111,"meta":112},[109],"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",[114,3263,3261],{"__ignoreMap":112},[19,3265,3266],{},"职责：",[26,3268,3269,3275,3281,3287],{},[29,3270,3271,3274],{},[114,3272,3273],{},"main.py","：程序入口。",[29,3276,3277,3280],{},[114,3278,3279],{},"file_utils.py","：读写 JSON。",[29,3282,3283,3286],{},[114,3284,3285],{},"sales_service.py","：统计销售数据。",[29,3288,3289,3292],{},[114,3290,3291],{},"chart_builder.py","：生成图表。",[14,3294,3296],{"id":3295},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,3298,3299],{},"语法基础：",[26,3301,3302,3305,3308,3311],{},[29,3303,3304],{},"会写变量、注释、输入输出。",[29,3306,3307],{},"会使用 int、float、str、bool。",[29,3309,3310],{},"会做类型转换。",[29,3312,3313],{},"会使用 f-string 格式化输出。",[19,3315,3316],{},"流程控制：",[26,3318,3319,3325,3333,3342],{},[29,3320,3321,3322,1842],{},"会写 ",[114,3323,3324],{},"if elif else",[29,3326,3321,3327,3330,3331,1842],{},[114,3328,3329],{},"while"," 和 ",[114,3332,2404],{},[29,3334,3335,3336,3330,3339,1842],{},"理解 ",[114,3337,3338],{},"break",[114,3340,3341],{},"continue",[29,3343,3344],{},"能写嵌套循环。",[19,3346,3347],{},"函数：",[26,3349,3350,3353,3356,3359],{},[29,3351,3352],{},"会定义和调用函数。",[29,3354,3355],{},"理解参数和返回值。",[29,3357,3358],{},"知道局部变量和全局变量。",[29,3360,3361],{},"会使用默认参数、关键字参数、不定长参数。",[19,3363,3364],{},"容器：",[26,3366,3367,3370,3373,3376,3379],{},[29,3368,3369],{},"会使用列表增删改查。",[29,3371,3372],{},"会遍历列表、字典。",[29,3374,3375],{},"会使用切片。",[29,3377,3378],{},"会用集合去重。",[29,3380,3381],{},"会处理列表嵌套字典。",[19,3383,3384],{},"文件和模块：",[26,3386,3387,3390,3393,3396,3399],{},[29,3388,3389],{},"会读写文本文件。",[29,3391,3392],{},"会读写 JSON。",[29,3394,3395],{},"会捕获常见异常。",[29,3397,3398],{},"会导入模块和第三方包。",[29,3400,3401],{},"会创建简单包结构。",[19,3403,3404],{},"项目能力：",[26,3406,3407,3410,3413,3416,3419],{},[29,3408,3409],{},"能把代码拆成函数。",[29,3411,3412],{},"能把数据保存到文件。",[29,3414,3415],{},"能处理用户输入错误。",[29,3417,3418],{},"能写一个完整菜单程序。",[29,3420,3421],{},"能用 pyecharts 生成图表。",[14,3423,3425],{"id":3424},"_1211-推荐练习顺序","12.11 推荐练习顺序",[26,3427,3428,3431,3434,3437,3440,3443,3446,3449],{},[29,3429,3430],{},"猜数字游戏。",[29,3432,3433],{},"ATM 菜单程序。",[29,3435,3436],{},"学生成绩统计。",[29,3438,3439],{},"学生管理系统函数版。",[29,3441,3442],{},"学生管理系统文件持久化版。",[29,3444,3445],{},"学生管理系统面向对象版。",[29,3447,3448],{},"销售数据统计。",[29,3450,3451],{},"销售数据可视化。",[14,3453,3455],{"id":3454},"_1212-常见学习误区","12.12 常见学习误区",[26,3457,3458,3461,3464,3467,3470,3473,3476],{},[29,3459,3460],{},"只看视频不敲代码。",[29,3462,3463],{},"一报错就复制错误去搜，不先读报错位置。",[29,3465,3466],{},"变量名随便写，后续自己看不懂。",[29,3468,3469],{},"所有代码都写在一个文件一个函数里。",[29,3471,3472],{},"不保存练习代码，复习时没有材料。",[29,3474,3475],{},"还没掌握列表字典就急着学框架。",[29,3477,3478],{},"不会读官方文档，只依赖教程。",[14,3480,3482],{"id":3481},"_1213-如何读报错","12.13 如何读报错",[19,3484,3485],{},"报错通常从下往上看最后几行。",[19,3487,3488],{},"示例：",[106,3490,3493],{"className":3491,"code":3492,"language":111,"meta":112},[109],"ValueError: invalid literal for int() with base 10: 'abc'\n",[114,3494,3492],{"__ignoreMap":112},[19,3496,3497],{},"说明：",[26,3499,3500,3506,3517],{},[29,3501,3502,3503,1842],{},"异常类型是 ",[114,3504,3505],{},"ValueError",[29,3507,3508,3509,3512,3513,3516],{},"原因是 ",[114,3510,3511],{},"int()"," 无法把 ",[114,3514,3515],{},"'abc'"," 转成整数。",[29,3518,3519],{},"应该检查输入内容或增加异常处理。",[19,3521,3522],{},"再看文件名和行号：",[106,3524,3527],{"className":3525,"code":3526,"language":111,"meta":112},[109],"File \"main.py\", line 10, in \u003Cmodule>\n",[114,3528,3526],{"__ignoreMap":112},[19,3530,3531,3532,3534],{},"表示错误发生在 ",[114,3533,3273],{}," 第 10 行。",[14,3536,3538],{"id":3537},"_1214-后续学习方向","12.14 后续学习方向",[19,3540,3541],{},"Python 基础完成后，可以按兴趣选择方向：",[26,3543,3544,3557,3569,3581,3593,3603,3613],{},[29,3545,3546,3547,3550,3551,3550,3554,1842],{},"自动化办公：",[114,3548,3549],{},"openpyxl","、",[114,3552,3553],{},"python-docx",[114,3555,3556],{},"pdfplumber",[29,3558,3559,3560,3550,3563,3550,3566,1842],{},"数据分析：",[114,3561,3562],{},"numpy",[114,3564,3565],{},"pandas",[114,3567,3568],{},"matplotlib",[29,3570,3571,3572,3550,3575,3550,3578,1842],{},"Web 后端：",[114,3573,3574],{},"Flask",[114,3576,3577],{},"FastAPI",[114,3579,3580],{},"Django",[29,3582,3583,3584,3550,3587,3550,3590,1842],{},"爬虫：",[114,3585,3586],{},"requests",[114,3588,3589],{},"BeautifulSoup",[114,3591,3592],{},"Scrapy",[29,3594,3595,3596,3550,3599,3602],{},"测试开发：",[114,3597,3598],{},"pytest",[114,3600,3601],{},"selenium","、接口测试。",[29,3604,3605,3606,3550,3608,3550,3610,1842],{},"人工智能：",[114,3607,3562],{},[114,3609,3565],{},[114,3611,3612],{},"pytorch",[29,3614,3615,3616,3550,3619,3550,3622,1842],{},"运维脚本：",[114,3617,3618],{},"os",[114,3620,3621],{},"subprocess",[114,3623,3624],{},"paramiko",[19,3626,3627],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,3629,3631],{"id":3630},"_1215-结课练习","12.15 结课练习",[26,3633,3634,3637,3640,3643,3646,3649,3652,3655],{},[29,3635,3636],{},"完成函数版学生管理系统。",[29,3638,3639],{},"给学生管理系统增加 JSON 持久化。",[29,3641,3642],{},"给学生管理系统增加异常处理。",[29,3644,3645],{},"把学生管理系统改成面向对象版。",[29,3647,3648],{},"使用 pyecharts 绘制学生成绩柱状图。",[29,3650,3651],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[29,3653,3654],{},"按品类统计销售额并绘制柱状图。",[29,3656,3657],{},"写一份自己的 Python 学习路线图。",[3659,3660,3661],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html 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":112,"searchDepth":142,"depth":142,"links":3663},[3664,3665,3668,3669,3670,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685],{"id":16,"depth":142,"text":17},{"id":69,"depth":142,"text":70,"children":3666},[3667],{"id":74,"depth":156,"text":75},{"id":118,"depth":142,"text":119},{"id":1845,"depth":142,"text":1846},{"id":2226,"depth":142,"text":2227,"children":3671},[3672,3673,3674,3675],{"id":2230,"depth":156,"text":2231},{"id":2379,"depth":156,"text":2380},{"id":2475,"depth":156,"text":2476},{"id":2561,"depth":156,"text":2562},{"id":2605,"depth":142,"text":2606},{"id":2814,"depth":142,"text":2815},{"id":3056,"depth":142,"text":3057},{"id":3253,"depth":142,"text":3254},{"id":3295,"depth":142,"text":3296},{"id":3424,"depth":142,"text":3425},{"id":3454,"depth":142,"text":3455},{"id":3481,"depth":142,"text":3482},{"id":3537,"depth":142,"text":3538},{"id":3630,"depth":142,"text":3631},null,"md",{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":5,"description":3686},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",[3694,8724,9827,11247,14206,15557,17045,18132,26858,26870,27469,27495,27619,27860,27925,27943,27956,28003,28126,28295,28494,28673,28878,29014,29109,29146,29159,29469,30209,30917,30938,31957,33588,33739,33752,33764,34060,53778,53793,53810,53843,56712,80052,96193,96214,96327,96448,97218,97881,98242,98280,98386,98486,98529,98555,98616,100269,100370,100395,100886,101386,102466,102749,103491,103993,104004,106015,107679,109182,110879,112792,114710,116732,120201,120633,121096,121845,124789,125137,125159,125515,128821,128833,129233,129256,129403,129570,129775,130076,130633,131290,133221,134819,135468,136962,138393,139628,141322,143074,145484,145600,146535,146746,147631,148866,149094,149107,150253,152642,154979,157890,160367,162011,163788,165801,168853,171033,173560,175754],{"id":3695,"title":3696,"body":3697,"description":112,"extension":3687,"meta":8719,"navigation":159,"path":8720,"seo":8721,"stem":8722,"__hash__":8723},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":3698,"toc":8691},[3699,3702,3706,3709,3713,3724,3728,3732,3735,3738,3741,3744,3747,3773,3777,3780,3783,3786,3789,3838,3842,3860,3862,3876,3879,3887,3890,4744,4751,4768,4772,4857,4861,4867,4953,4957,4995,4999,5063,5067,5071,5078,5089,5093,5098,5102,5107,5111,5116,5120,5124,5129,5376,5381,5519,5524,5778,5781,5789,5793,5798,5900,5903,6197,6206,6307,6310,6313,6316,6319,6578,6583,6721,6724,6902,6905,7032,7035,7187,7191,7196,7199,7210,7218,7221,7327,7331,7335,7340,7390,7395,7400,7424,7429,7482,7485,7490,7666,7671,7956,7961,8355,8359,8364,8421,8426,8434,8437,8576,8579,8688],[10,3700,3696],{"id":3701},"_1基础入门",[14,3703,3705],{"id":3704},"_11注释","1.1注释",[19,3707,3708],{},"\u002F\u002F或者\u002F* *\u002F",[14,3710,3712],{"id":3711},"_12命名","1.2命名",[26,3714,3715,3718,3721],{},[29,3716,3717],{},"字母数字下划线",[29,3719,3720],{},"开头必须是字母或_",[29,3722,3723],{},"不能使用关键词",[14,3725,3727],{"id":3726},"_13数据类型","1.3数据类型",[72,3729,3731],{"id":3730},"_131整形","1.3.1整形",[19,3733,3734],{},"short 短整形 2",[19,3736,3737],{},"int 整形 4",[19,3739,3740],{},"long 长整形 win4 linux32位4 linux64位8",[19,3742,3743],{},"long long 长长整形 8",[19,3745,3746],{},"利用sizeof可以求数据类型占用的内存空间大小",[106,3748,3752],{"className":3749,"code":3750,"language":3751,"meta":112,"style":112},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[114,3753,3754,3766],{"__ignoreMap":112},[128,3755,3756,3759,3761,3764],{"class":130,"line":131},[128,3757,3758],{"class":134},"sizeof",[128,3760,253],{"class":138},[128,3762,3763],{"class":134},"int",[128,3765,180],{"class":138},[128,3767,3768,3770],{"class":130,"line":142},[128,3769,3758],{"class":134},[128,3771,3772],{"class":138},"(num)\n",[72,3774,3776],{"id":3775},"_132浮点型","1.3.2浮点型",[19,3778,3779],{},"float 单精度 4节 7位有效数字",[19,3781,3782],{},"double 双精度 8节 15-16有效数字",[19,3784,3785],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,3787,3788],{},"注意点：",[106,3790,3792],{"className":3749,"code":3791,"language":3751,"meta":112,"style":112},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[114,3793,3794,3816],{"__ignoreMap":112},[128,3795,3796,3799,3802,3804,3807,3809,3812],{"class":130,"line":131},[128,3797,3798],{"class":134},"float",[128,3800,3801],{"class":138}," f1",[128,3803,270],{"class":134},[128,3805,3806],{"class":166},"3.14",[128,3808,3019],{"class":134},[128,3810,3811],{"class":138},";",[128,3813,3815],{"class":3814},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[128,3817,3818,3820,3823,3825,3828,3831,3833,3835],{"class":130,"line":142},[128,3819,3798],{"class":134},[128,3821,3822],{"class":138}," f2",[128,3824,270],{"class":134},[128,3826,3827],{"class":166},"3",[128,3829,3830],{"class":134},"e",[128,3832,409],{"class":166},[128,3834,3811],{"class":138},[128,3836,3837],{"class":3814}," \u002F\u002F科学记数法\n",[72,3839,3841],{"id":3840},"_133字符型","1.3.3字符型",[106,3843,3845],{"className":3749,"code":3844,"language":3751,"meta":112,"style":112},"char ch='a'\n",[114,3846,3847],{"__ignoreMap":112},[128,3848,3849,3852,3855,3857],{"class":130,"line":131},[128,3850,3851],{"class":134},"char",[128,3853,3854],{"class":138}," ch",[128,3856,270],{"class":134},[128,3858,3859],{"class":176},"'a'\n",[19,3861,3788],{},[26,3863,3864,3867,3870,3873],{},[29,3865,3866],{},"在显示字符型变量时，只能单引号，双引号x",[29,3868,3869],{},"单引号内只能一个字符，不能字符串",[29,3871,3872],{},"c和c++字符型变量只占用一个字符",[29,3874,3875],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,3877,3878],{},"ASCII码大致由以下两部分组成：",[26,3880,3881,3884],{},[29,3882,3883],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[29,3885,3886],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,3888,3889],{},"ASCII码表格：",[3891,3892,3893,3937],"table",{},[3894,3895,3896],"thead",{},[3897,3898,3899,3907,3912,3916,3921,3925,3929,3933],"tr",{},[3900,3901,3902,3906],"th",{},[3903,3904,3905],"strong",{},"ASCII","值",[3900,3908,3909],{},[3903,3910,3911],{},"控制字符",[3900,3913,3914,3906],{},[3903,3915,3905],{},[3900,3917,3918],{},[3903,3919,3920],{},"字符",[3900,3922,3923,3906],{},[3903,3924,3905],{},[3900,3926,3927],{},[3903,3928,3920],{},[3900,3930,3931,3906],{},[3903,3932,3905],{},[3900,3934,3935],{},[3903,3936,3920],{},[3938,3939,3940,3965,3990,4014,4039,4065,4090,4115,4141,4166,4192,4218,4243,4268,4294,4320,4346,4370,4395,4420,4445,4470,4495,4520,4545,4569,4594,4620,4644,4669,4692,4718],"tbody",{},[3897,3941,3942,3945,3948,3951,3954,3957,3960,3963],{},[3943,3944,2452],"td",{},[3943,3946,3947],{},"NUT",[3943,3949,3950],{},"32",[3943,3952,3953],{},"(space)",[3943,3955,3956],{},"64",[3943,3958,3959],{},"@",[3943,3961,3962],{},"96",[3943,3964,3550],{},[3897,3966,3967,3969,3972,3975,3978,3981,3984,3987],{},[3943,3968,2592],{},[3943,3970,3971],{},"SOH",[3943,3973,3974],{},"33",[3943,3976,3977],{},"!",[3943,3979,3980],{},"65",[3943,3982,3983],{},"A",[3943,3985,3986],{},"97",[3943,3988,3989],{},"a",[3897,3991,3992,3994,3997,4000,4002,4005,4008,4011],{},[3943,3993,409],{},[3943,3995,3996],{},"STX",[3943,3998,3999],{},"34",[3943,4001,1376],{},[3943,4003,4004],{},"66",[3943,4006,4007],{},"B",[3943,4009,4010],{},"98",[3943,4012,4013],{},"b",[3897,4015,4016,4018,4021,4024,4027,4030,4033,4036],{},[3943,4017,3827],{},[3943,4019,4020],{},"ETX",[3943,4022,4023],{},"35",[3943,4025,4026],{},"#",[3943,4028,4029],{},"67",[3943,4031,4032],{},"C",[3943,4034,4035],{},"99",[3943,4037,4038],{},"c",[3897,4040,4041,4044,4047,4050,4053,4056,4059,4062],{},[3943,4042,4043],{},"4",[3943,4045,4046],{},"EOT",[3943,4048,4049],{},"36",[3943,4051,4052],{},"$",[3943,4054,4055],{},"68",[3943,4057,4058],{},"D",[3943,4060,4061],{},"100",[3943,4063,4064],{},"d",[3897,4066,4067,4070,4073,4076,4079,4082,4085,4088],{},[3943,4068,4069],{},"5",[3943,4071,4072],{},"ENQ",[3943,4074,4075],{},"37",[3943,4077,4078],{},"%",[3943,4080,4081],{},"69",[3943,4083,4084],{},"E",[3943,4086,4087],{},"101",[3943,4089,3830],{},[3897,4091,4092,4095,4098,4101,4104,4107,4110,4113],{},[3943,4093,4094],{},"6",[3943,4096,4097],{},"ACK",[3943,4099,4100],{},"38",[3943,4102,4103],{},"&",[3943,4105,4106],{},"70",[3943,4108,4109],{},"F",[3943,4111,4112],{},"102",[3943,4114,3019],{},[3897,4116,4117,4120,4123,4126,4129,4132,4135,4138],{},[3943,4118,4119],{},"7",[3943,4121,4122],{},"BEL",[3943,4124,4125],{},"39",[3943,4127,4128],{},",",[3943,4130,4131],{},"71",[3943,4133,4134],{},"G",[3943,4136,4137],{},"103",[3943,4139,4140],{},"g",[3897,4142,4143,4146,4149,4152,4154,4157,4160,4163],{},[3943,4144,4145],{},"8",[3943,4147,4148],{},"BS",[3943,4150,4151],{},"40",[3943,4153,253],{},[3943,4155,4156],{},"72",[3943,4158,4159],{},"H",[3943,4161,4162],{},"104",[3943,4164,4165],{},"h",[3897,4167,4168,4171,4174,4177,4180,4183,4186,4189],{},[3943,4169,4170],{},"9",[3943,4172,4173],{},"HT",[3943,4175,4176],{},"41",[3943,4178,4179],{},")",[3943,4181,4182],{},"73",[3943,4184,4185],{},"I",[3943,4187,4188],{},"105",[3943,4190,4191],{},"i",[3897,4193,4194,4197,4200,4203,4206,4209,4212,4215],{},[3943,4195,4196],{},"10",[3943,4198,4199],{},"LF",[3943,4201,4202],{},"42",[3943,4204,4205],{},"*",[3943,4207,4208],{},"74",[3943,4210,4211],{},"J",[3943,4213,4214],{},"106",[3943,4216,4217],{},"j",[3897,4219,4220,4223,4226,4229,4231,4234,4237,4240],{},[3943,4221,4222],{},"11",[3943,4224,4225],{},"VT",[3943,4227,4228],{},"43",[3943,4230,2457],{},[3943,4232,4233],{},"75",[3943,4235,4236],{},"K",[3943,4238,4239],{},"107",[3943,4241,4242],{},"k",[3897,4244,4245,4248,4251,4254,4256,4259,4262,4265],{},[3943,4246,4247],{},"12",[3943,4249,4250],{},"FF",[3943,4252,4253],{},"44",[3943,4255,4128],{},[3943,4257,4258],{},"76",[3943,4260,4261],{},"L",[3943,4263,4264],{},"108",[3943,4266,4267],{},"l",[3897,4269,4270,4273,4276,4279,4282,4285,4288,4291],{},[3943,4271,4272],{},"13",[3943,4274,4275],{},"CR",[3943,4277,4278],{},"45",[3943,4280,4281],{},"-",[3943,4283,4284],{},"77",[3943,4286,4287],{},"M",[3943,4289,4290],{},"109",[3943,4292,4293],{},"m",[3897,4295,4296,4299,4302,4305,4308,4311,4314,4317],{},[3943,4297,4298],{},"14",[3943,4300,4301],{},"SO",[3943,4303,4304],{},"46",[3943,4306,4307],{},".",[3943,4309,4310],{},"78",[3943,4312,4313],{},"N",[3943,4315,4316],{},"110",[3943,4318,4319],{},"n",[3897,4321,4322,4325,4328,4331,4334,4337,4340,4343],{},[3943,4323,4324],{},"15",[3943,4326,4327],{},"SI",[3943,4329,4330],{},"47",[3943,4332,4333],{},"\u002F",[3943,4335,4336],{},"79",[3943,4338,4339],{},"O",[3943,4341,4342],{},"111",[3943,4344,4345],{},"o",[3897,4347,4348,4351,4354,4357,4359,4362,4365,4368],{},[3943,4349,4350],{},"16",[3943,4352,4353],{},"DLE",[3943,4355,4356],{},"48",[3943,4358,2452],{},[3943,4360,4361],{},"80",[3943,4363,4364],{},"P",[3943,4366,4367],{},"112",[3943,4369,19],{},[3897,4371,4372,4375,4378,4381,4383,4386,4389,4392],{},[3943,4373,4374],{},"17",[3943,4376,4377],{},"DCI",[3943,4379,4380],{},"49",[3943,4382,2592],{},[3943,4384,4385],{},"81",[3943,4387,4388],{},"Q",[3943,4390,4391],{},"113",[3943,4393,4394],{},"q",[3897,4396,4397,4400,4403,4406,4408,4411,4414,4417],{},[3943,4398,4399],{},"18",[3943,4401,4402],{},"DC2",[3943,4404,4405],{},"50",[3943,4407,409],{},[3943,4409,4410],{},"82",[3943,4412,4413],{},"R",[3943,4415,4416],{},"114",[3943,4418,4419],{},"r",[3897,4421,4422,4425,4428,4431,4433,4436,4439,4442],{},[3943,4423,4424],{},"19",[3943,4426,4427],{},"DC3",[3943,4429,4430],{},"51",[3943,4432,3827],{},[3943,4434,4435],{},"83",[3943,4437,4438],{},"S",[3943,4440,4441],{},"115",[3943,4443,4444],{},"s",[3897,4446,4447,4450,4453,4456,4458,4461,4464,4467],{},[3943,4448,4449],{},"20",[3943,4451,4452],{},"DC4",[3943,4454,4455],{},"52",[3943,4457,4043],{},[3943,4459,4460],{},"84",[3943,4462,4463],{},"T",[3943,4465,4466],{},"116",[3943,4468,4469],{},"t",[3897,4471,4472,4475,4478,4481,4483,4486,4489,4492],{},[3943,4473,4474],{},"21",[3943,4476,4477],{},"NAK",[3943,4479,4480],{},"53",[3943,4482,4069],{},[3943,4484,4485],{},"85",[3943,4487,4488],{},"U",[3943,4490,4491],{},"117",[3943,4493,4494],{},"u",[3897,4496,4497,4500,4503,4506,4508,4511,4514,4517],{},[3943,4498,4499],{},"22",[3943,4501,4502],{},"SYN",[3943,4504,4505],{},"54",[3943,4507,4094],{},[3943,4509,4510],{},"86",[3943,4512,4513],{},"V",[3943,4515,4516],{},"118",[3943,4518,4519],{},"v",[3897,4521,4522,4525,4528,4531,4533,4536,4539,4542],{},[3943,4523,4524],{},"23",[3943,4526,4527],{},"TB",[3943,4529,4530],{},"55",[3943,4532,4119],{},[3943,4534,4535],{},"87",[3943,4537,4538],{},"W",[3943,4540,4541],{},"119",[3943,4543,4544],{},"w",[3897,4546,4547,4550,4553,4556,4558,4561,4564,4566],{},[3943,4548,4549],{},"24",[3943,4551,4552],{},"CAN",[3943,4554,4555],{},"56",[3943,4557,4145],{},[3943,4559,4560],{},"88",[3943,4562,4563],{},"X",[3943,4565,3115],{},[3943,4567,4568],{},"x",[3897,4570,4571,4574,4577,4580,4582,4585,4588,4591],{},[3943,4572,4573],{},"25",[3943,4575,4576],{},"EM",[3943,4578,4579],{},"57",[3943,4581,4170],{},[3943,4583,4584],{},"89",[3943,4586,4587],{},"Y",[3943,4589,4590],{},"121",[3943,4592,4593],{},"y",[3897,4595,4596,4599,4602,4605,4608,4611,4614,4617],{},[3943,4597,4598],{},"26",[3943,4600,4601],{},"SUB",[3943,4603,4604],{},"58",[3943,4606,4607],{},":",[3943,4609,4610],{},"90",[3943,4612,4613],{},"Z",[3943,4615,4616],{},"122",[3943,4618,4619],{},"z",[3897,4621,4622,4625,4628,4631,4633,4636,4639,4642],{},[3943,4623,4624],{},"27",[3943,4626,4627],{},"ESC",[3943,4629,4630],{},"59",[3943,4632,3811],{},[3943,4634,4635],{},"91",[3943,4637,4638],{},"[",[3943,4640,4641],{},"123",[3943,4643,1379],{},[3897,4645,4646,4649,4652,4655,4658,4661,4663,4666],{},[3943,4647,4648],{},"28",[3943,4650,4651],{},"FS",[3943,4653,4654],{},"60",[3943,4656,4657],{},"\u003C",[3943,4659,4660],{},"92",[3943,4662,4333],{},[3943,4664,4665],{},"124",[3943,4667,4668],{},"|",[3897,4670,4671,4674,4677,4680,4682,4685,4687,4690],{},[3943,4672,4673],{},"29",[3943,4675,4676],{},"GS",[3943,4678,4679],{},"61",[3943,4681,270],{},[3943,4683,4684],{},"93",[3943,4686,1388],{},[3943,4688,4689],{},"125",[3943,4691,1453],{},[3897,4693,4694,4697,4700,4703,4706,4709,4712,4715],{},[3943,4695,4696],{},"30",[3943,4698,4699],{},"RS",[3943,4701,4702],{},"62",[3943,4704,4705],{},">",[3943,4707,4708],{},"94",[3943,4710,4711],{},"^",[3943,4713,4714],{},"126",[3943,4716,4717],{},"`",[3897,4719,4720,4723,4726,4729,4732,4735,4738,4741],{},[3943,4721,4722],{},"31",[3943,4724,4725],{},"US",[3943,4727,4728],{},"63",[3943,4730,4731],{},"?",[3943,4733,4734],{},"95",[3943,4736,4737],{},"_",[3943,4739,4740],{},"127",[3943,4742,4743],{},"DEL",[19,4745,4746,4747,4750],{},"ASCII 码大致由以下",[3903,4748,4749],{},"两部分组","成：",[4752,4753,4754,4761],"ul",{},[29,4755,4756,4757,4760],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[3903,4758,4759],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[29,4762,4763,4764,4767],{},"ASCII 打印字符：数字 ",[3903,4765,4766],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[72,4769,4771],{"id":4770},"_134转义字符","1.3.4转义字符",[106,4773,4775],{"className":3749,"code":4774,"language":3751,"meta":112,"style":112},"\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",[114,4776,4777,4782,4798,4812,4817,4830,4835],{"__ignoreMap":112},[128,4778,4779],{"class":130,"line":131},[128,4780,4781],{"class":3814},"\u002F\u002F换行符\n",[128,4783,4784,4787,4790,4793,4795],{"class":130,"line":142},[128,4785,4786],{"class":138},"cout ",[128,4788,4789],{"class":134},"\u003C\u003C",[128,4791,4792],{"class":176},"\"hello world\u002Fn\"",[128,4794,3811],{"class":138},[128,4796,4797],{"class":3814}," \u002F\u002F就等同于如下：\n",[128,4799,4800,4802,4804,4807,4809],{"class":130,"line":156},[128,4801,4786],{"class":138},[128,4803,4789],{"class":134},[128,4805,4806],{"class":176},"\"hello world\"",[128,4808,4789],{"class":134},[128,4810,4811],{"class":138},"endl;\n",[128,4813,4814],{"class":130,"line":163},[128,4815,4816],{"class":3814},"\u002F\u002F反斜杠\n",[128,4818,4819,4821,4823,4826,4828],{"class":130,"line":183},[128,4820,4786],{"class":138},[128,4822,4789],{"class":134},[128,4824,4825],{"class":176},"\"\u002F\u002F\"",[128,4827,4789],{"class":134},[128,4829,4811],{"class":138},[128,4831,4832],{"class":130,"line":188},[128,4833,4834],{"class":3814},"\u002F\u002F水平制表符\n",[128,4836,4837,4839,4841,4844,4846,4849,4851,4854],{"class":130,"line":193},[128,4838,4786],{"class":138},[128,4840,4789],{"class":134},[128,4842,4843],{"class":176},"\"aaaa",[128,4845,1525],{"class":166},[128,4847,4848],{"class":176},"helloworld\"",[128,4850,4789],{"class":134},[128,4852,4853],{"class":138},"endl;",[128,4855,4856],{"class":3814}," \u002F\u002F输出窗口时有对齐效果\n",[72,4858,4860],{"id":4859},"_135字符串型","1.3.5字符串型",[19,4862,4863,4864,4866],{},"char 变量名",[128,4865],{},"=\"字符串值\"",[106,4868,4870],{"className":3749,"code":4869,"language":3751,"meta":112,"style":112},"\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",[114,4871,4872,4877,4882,4887,4892,4906,4919,4924,4929,4940],{"__ignoreMap":112},[128,4873,4874],{"class":130,"line":131},[128,4875,4876],{"class":3814},"\u002F\u002Fc风格字符串\n",[128,4878,4879],{"class":130,"line":142},[128,4880,4881],{"class":3814},"\u002F\u002F注意事项：\n",[128,4883,4884],{"class":130,"line":156},[128,4885,4886],{"class":3814},"\u002F\u002F1.char字符串名[]\n",[128,4888,4889],{"class":130,"line":163},[128,4890,4891],{"class":3814},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[128,4893,4894,4896,4899,4901,4903],{"class":130,"line":183},[128,4895,3851],{"class":134},[128,4897,4898],{"class":138}," str[]",[128,4900,270],{"class":134},[128,4902,4806],{"class":176},[128,4904,4905],{"class":138},";\n",[128,4907,4908,4910,4912,4915,4917],{"class":130,"line":188},[128,4909,4786],{"class":138},[128,4911,4789],{"class":134},[128,4913,4914],{"class":138},"str",[128,4916,4789],{"class":134},[128,4918,4811],{"class":138},[128,4920,4921],{"class":130,"line":193},[128,4922,4923],{"class":3814},"\u002F\u002Fc++风格字符串\n",[128,4925,4926],{"class":130,"line":206},[128,4927,4928],{"class":3814},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[128,4930,4931,4934,4936,4938],{"class":130,"line":221},[128,4932,4933],{"class":138},"string str2",[128,4935,270],{"class":134},[128,4937,4806],{"class":176},[128,4939,4905],{"class":138},[128,4941,4942,4944,4946,4949,4951],{"class":130,"line":230},[128,4943,4786],{"class":138},[128,4945,4789],{"class":134},[128,4947,4948],{"class":138},"str2",[128,4950,4789],{"class":134},[128,4952,4811],{"class":138},[72,4954,4956],{"id":4955},"_136布尔类型bool","1.3.6布尔类型bool",[106,4958,4960],{"className":3749,"code":4959,"language":3751,"meta":112,"style":112},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[114,4961,4962,4977],{"__ignoreMap":112},[128,4963,4964,4967,4970,4972,4975],{"class":130,"line":131},[128,4965,4966],{"class":134},"bool",[128,4968,4969],{"class":138}," flag",[128,4971,270],{"class":134},[128,4973,4974],{"class":166},"true",[128,4976,4905],{"class":138},[128,4978,4979,4982,4985,4988,4990,4992],{"class":130,"line":142},[128,4980,4981],{"class":138},"cout",[128,4983,4984],{"class":134},"\u003C\u003Csizeof",[128,4986,4987],{"class":138},"(flag)",[128,4989,4789],{"class":134},[128,4991,4853],{"class":138},[128,4993,4994],{"class":3814}," \u002F\u002F查看布尔占内存空间\n",[14,4996,4998],{"id":4997},"_14键盘输入cin","1.4键盘输入cin",[106,5000,5002],{"className":3749,"code":5001,"language":3751,"meta":112,"style":112},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[114,5003,5004,5017,5034,5045],{"__ignoreMap":112},[128,5005,5006,5008,5011,5013,5015],{"class":130,"line":131},[128,5007,3763],{"class":134},[128,5009,5010],{"class":138}," a",[128,5012,270],{"class":134},[128,5014,2452],{"class":166},[128,5016,4905],{"class":138},[128,5018,5019,5021,5023,5026,5028,5030,5032],{"class":130,"line":142},[128,5020,4981],{"class":138},[128,5022,4789],{"class":134},[128,5024,5025],{"class":176},"\"请给整型变量a赋值\"",[128,5027,4789],{"class":134},[128,5029,3989],{"class":138},[128,5031,4789],{"class":134},[128,5033,4811],{"class":138},[128,5035,5036,5039,5042],{"class":130,"line":156},[128,5037,5038],{"class":138},"cin ",[128,5040,5041],{"class":134},">>",[128,5043,5044],{"class":138}," a;\n",[128,5046,5047,5049,5051,5054,5057,5059,5061],{"class":130,"line":163},[128,5048,4786],{"class":138},[128,5050,4789],{"class":134},[128,5052,5053],{"class":176}," \"整型变量a=\"",[128,5055,5056],{"class":134}," \u003C\u003C",[128,5058,3989],{"class":138},[128,5060,4789],{"class":134},[128,5062,4811],{"class":138},[14,5064,5066],{"id":5065},"_15运算符","1.5运算符",[72,5068,5070],{"id":5069},"_151算术运算符","1.5.1算术运算符",[19,5072,5073,5077],{},[5074,5075],"img",{"alt":112,"src":5076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[26,5079,5080,5083,5086],{},[29,5081,5082],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[29,5084,5085],{},"两个小数不可以做取模运算",[29,5087,5088],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[72,5090,5092],{"id":5091},"_152赋值运算符","1.5.2赋值运算符",[19,5094,5095],{},[5074,5096],{"alt":112,"src":5097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[72,5099,5101],{"id":5100},"_153比较运算符","1.5.3比较运算符",[19,5103,5104],{},[5074,5105],{"alt":112,"src":5106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[72,5108,5110],{"id":5109},"_154逻辑运算符","1.5.4逻辑运算符",[19,5112,5113],{},[5074,5114],{"alt":112,"src":5115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,5117,5119],{"id":5118},"_16程序流程结构","1.6程序流程结构",[72,5121,5123],{"id":5122},"_161选择结构","1.6.1选择结构",[26,5125,5126],{},[29,5127,5128],{},"if语句\n单行、多行、多条件if语句",[106,5130,5132],{"className":3749,"code":5131,"language":3751,"meta":112,"style":112},"\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",[114,5133,5134,5139,5153,5158,5172,5176,5181,5189,5202,5206,5219,5223,5228,5232,5245,5249,5254,5274,5278,5291,5295,5322,5326,5342,5346,5350,5354,5367,5371],{"__ignoreMap":112},[128,5135,5136],{"class":130,"line":131},[128,5137,5138],{"class":3814},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[128,5140,5141,5143,5146,5148,5151],{"class":130,"line":142},[128,5142,1800],{"class":134},[128,5144,5145],{"class":138},"(score",[128,5147,4705],{"class":134},[128,5149,5150],{"class":166},"600",[128,5152,180],{"class":138},[128,5154,5155],{"class":130,"line":156},[128,5156,5157],{"class":138},"{\n",[128,5159,5160,5163,5165,5168,5170],{"class":130,"line":163},[128,5161,5162],{"class":138},"    cout",[128,5164,4789],{"class":134},[128,5166,5167],{"class":176},"'这是单行if语句'",[128,5169,4789],{"class":134},[128,5171,4811],{"class":138},[128,5173,5174],{"class":130,"line":183},[128,5175,2694],{"class":138},[128,5177,5178],{"class":130,"line":188},[128,5179,5180],{"class":3814},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[128,5182,5183,5185,5187],{"class":130,"line":193},[128,5184,5038],{"class":138},[128,5186,5041],{"class":134},[128,5188,1226],{"class":138},[128,5190,5191,5193,5195,5198,5200],{"class":130,"line":206},[128,5192,1800],{"class":134},[128,5194,5145],{"class":138},[128,5196,5197],{"class":134},"\u003C=",[128,5199,5150],{"class":166},[128,5201,180],{"class":138},[128,5203,5204],{"class":130,"line":221},[128,5205,5157],{"class":138},[128,5207,5208,5210,5212,5215,5217],{"class":130,"line":230},[128,5209,5162],{"class":138},[128,5211,5041],{"class":134},[128,5213,5214],{"class":176},"\"小于等于600\"",[128,5216,4789],{"class":134},[128,5218,4811],{"class":138},[128,5220,5221],{"class":130,"line":235},[128,5222,2694],{"class":138},[128,5224,5225],{"class":130,"line":244},[128,5226,5227],{"class":134},"else\n",[128,5229,5230],{"class":130,"line":287},[128,5231,5157],{"class":138},[128,5233,5234,5236,5238,5241,5243],{"class":130,"line":301},[128,5235,5162],{"class":138},[128,5237,5041],{"class":134},[128,5239,5240],{"class":176},"\"大于600\"",[128,5242,5041],{"class":134},[128,5244,4811],{"class":138},[128,5246,5247],{"class":130,"line":310},[128,5248,2694],{"class":138},[128,5250,5251],{"class":130,"line":323},[128,5252,5253],{"class":3814},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[128,5255,5256,5258,5261,5263,5265,5268,5270,5272],{"class":130,"line":330},[128,5257,1800],{"class":134},[128,5259,5260],{"class":138}," (",[128,5262,2452],{"class":166},[128,5264,4657],{"class":134},[128,5266,5267],{"class":138},"num",[128,5269,4657],{"class":134},[128,5271,4061],{"class":166},[128,5273,180],{"class":138},[128,5275,5276],{"class":130,"line":335},[128,5277,5157],{"class":138},[128,5279,5280,5282,5284,5287,5289],{"class":130,"line":340},[128,5281,5162],{"class":138},[128,5283,4789],{"class":134},[128,5285,5286],{"class":176},"\"小于100\"",[128,5288,4789],{"class":134},[128,5290,4811],{"class":138},[128,5292,5293],{"class":130,"line":351},[128,5294,2694],{"class":138},[128,5296,5297,5300,5303,5306,5309,5311,5314,5316,5318,5320],{"class":130,"line":384},[128,5298,5299],{"class":134},"else",[128,5301,5302],{"class":134}," if",[128,5304,5305],{"class":138}," (nmu",[128,5307,5308],{"class":134},">=",[128,5310,4061],{"class":166},[128,5312,5313],{"class":134},"&&",[128,5315,5267],{"class":138},[128,5317,4657],{"class":134},[128,5319,3143],{"class":166},[128,5321,180],{"class":138},[128,5323,5324],{"class":130,"line":414},[128,5325,5157],{"class":138},[128,5327,5328,5330,5332,5335,5337,5339],{"class":130,"line":419},[128,5329,5162],{"class":138},[128,5331,4789],{"class":134},[128,5333,5334],{"class":176},"\"不小于100且小于200\"",[128,5336,4789],{"class":134},[128,5338,4853],{"class":138},[128,5340,5341],{"class":3814}," \u002F\u002F可以无限else if,python中是elif：\n",[128,5343,5344],{"class":130,"line":424},[128,5345,2694],{"class":138},[128,5347,5348],{"class":130,"line":434},[128,5349,5227],{"class":134},[128,5351,5352],{"class":130,"line":447},[128,5353,5157],{"class":138},[128,5355,5356,5358,5360,5363,5365],{"class":130,"line":459},[128,5357,5162],{"class":138},[128,5359,4789],{"class":134},[128,5361,5362],{"class":176},"\"不小于200\"",[128,5364,4789],{"class":134},[128,5366,4811],{"class":138},[128,5368,5369],{"class":130,"line":471},[128,5370,2694],{"class":138},[128,5372,5373],{"class":130,"line":483},[128,5374,5375],{"class":3814},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[26,5377,5378],{"start":142},[29,5379,5380],{},"三目运算符",[106,5382,5384],{"className":3749,"code":5383,"language":3751,"meta":112,"style":112},"\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",[114,5385,5386,5391,5396,5422,5444,5461,5466,5489,5504],{"__ignoreMap":112},[128,5387,5388],{"class":130,"line":131},[128,5389,5390],{"class":3814},"\u002F\u002F创建三个变量a,b,c\n",[128,5392,5393],{"class":130,"line":142},[128,5394,5395],{"class":3814},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[128,5397,5398,5400,5402,5404,5406,5409,5411,5413,5416,5418,5420],{"class":130,"line":156},[128,5399,3763],{"class":134},[128,5401,5010],{"class":138},[128,5403,270],{"class":134},[128,5405,4449],{"class":166},[128,5407,5408],{"class":138},",b",[128,5410,270],{"class":134},[128,5412,4196],{"class":166},[128,5414,5415],{"class":138},",c",[128,5417,270],{"class":134},[128,5419,2452],{"class":166},[128,5421,4905],{"class":138},[128,5423,5424,5426,5428,5431,5433,5435,5437,5439,5441],{"class":130,"line":163},[128,5425,4038],{"class":138},[128,5427,270],{"class":134},[128,5429,5430],{"class":138},"(a",[128,5432,4705],{"class":134},[128,5434,4013],{"class":138},[128,5436,4731],{"class":134},[128,5438,3989],{"class":138},[128,5440,4607],{"class":134},[128,5442,5443],{"class":138},"b)\n",[128,5445,5446,5448,5450,5453,5455,5457,5459],{"class":130,"line":183},[128,5447,4981],{"class":138},[128,5449,4789],{"class":134},[128,5451,5452],{"class":176},"\"c=\"",[128,5454,4789],{"class":134},[128,5456,4038],{"class":138},[128,5458,4789],{"class":134},[128,5460,4811],{"class":138},[128,5462,5463],{"class":130,"line":188},[128,5464,5465],{"class":3814},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[128,5467,5468,5470,5472,5474,5476,5478,5480,5483,5485,5487],{"class":130,"line":193},[128,5469,5430],{"class":138},[128,5471,4705],{"class":134},[128,5473,4013],{"class":138},[128,5475,4731],{"class":134},[128,5477,3989],{"class":138},[128,5479,4607],{"class":134},[128,5481,5482],{"class":138},"b)",[128,5484,270],{"class":134},[128,5486,4061],{"class":166},[128,5488,4905],{"class":138},[128,5490,5491,5493,5495,5497,5499,5501],{"class":130,"line":206},[128,5492,4981],{"class":138},[128,5494,4789],{"class":134},[128,5496,3989],{"class":138},[128,5498,4789],{"class":134},[128,5500,4853],{"class":138},[128,5502,5503],{"class":3814}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[128,5505,5506,5508,5510,5512,5514,5516],{"class":130,"line":221},[128,5507,4981],{"class":138},[128,5509,4789],{"class":134},[128,5511,4013],{"class":138},[128,5513,4789],{"class":134},[128,5515,4853],{"class":138},[128,5517,5518],{"class":3814}," \u002F\u002F10   a>b,b还是原值\n",[26,5520,5521],{"start":156},[29,5522,5523],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[106,5525,5527],{"className":3749,"code":5526,"language":3751,"meta":112,"style":112},"\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",[114,5528,5529,5534,5542,5555,5564,5568,5582,5595,5605,5613,5618,5642,5663,5685,5706,5728,5749,5769,5774],{"__ignoreMap":112},[128,5530,5531],{"class":130,"line":131},[128,5532,5533],{"class":3814},"\u002F\u002F案例-电影打分\n",[128,5535,5536,5539],{"class":130,"line":142},[128,5537,5538],{"class":134},"#include",[128,5540,5541],{"class":176},"\u003Ciostream>\n",[128,5543,5544,5547,5550,5553],{"class":130,"line":156},[128,5545,5546],{"class":134},"using",[128,5548,5549],{"class":134}," namespace",[128,5551,5552],{"class":199}," std",[128,5554,4905],{"class":138},[128,5556,5557,5559,5561],{"class":130,"line":163},[128,5558,3763],{"class":134},[128,5560,1575],{"class":199},[128,5562,5563],{"class":138},"()\n",[128,5565,5566],{"class":130,"line":183},[128,5567,5157],{"class":138},[128,5569,5570,5573,5576,5578,5580],{"class":130,"line":188},[128,5571,5572],{"class":134},"    int",[128,5574,5575],{"class":138}," score",[128,5577,270],{"class":134},[128,5579,2452],{"class":166},[128,5581,4905],{"class":138},[128,5583,5584,5586,5588,5591,5593],{"class":130,"line":193},[128,5585,5162],{"class":138},[128,5587,4789],{"class":134},[128,5589,5590],{"class":176},"\"电影打分：\"",[128,5592,4789],{"class":134},[128,5594,4811],{"class":138},[128,5596,5597,5600,5602],{"class":130,"line":206},[128,5598,5599],{"class":138},"    cin",[128,5601,5041],{"class":134},[128,5603,5604],{"class":138},"score;\n",[128,5606,5607,5610],{"class":130,"line":221},[128,5608,5609],{"class":134},"    switch",[128,5611,5612],{"class":138},"(score)\n",[128,5614,5615],{"class":130,"line":230},[128,5616,5617],{"class":138},"    {\n",[128,5619,5620,5623,5626,5629,5631,5634,5636,5638,5640],{"class":130,"line":235},[128,5621,5622],{"class":134},"        case",[128,5624,5625],{"class":166}," 10",[128,5627,5628],{"class":138},":cout",[128,5630,4789],{"class":134},[128,5632,5633],{"class":176},"\"经典\"",[128,5635,4789],{"class":134},[128,5637,4853],{"class":138},[128,5639,3338],{"class":134},[128,5641,4905],{"class":138},[128,5643,5644,5646,5649,5651,5653,5655,5657,5659,5661],{"class":130,"line":244},[128,5645,5622],{"class":134},[128,5647,5648],{"class":166}," 9",[128,5650,5628],{"class":138},[128,5652,4789],{"class":134},[128,5654,5633],{"class":176},[128,5656,4789],{"class":134},[128,5658,4853],{"class":138},[128,5660,3338],{"class":134},[128,5662,4905],{"class":138},[128,5664,5665,5667,5670,5672,5674,5677,5679,5681,5683],{"class":130,"line":287},[128,5666,5622],{"class":134},[128,5668,5669],{"class":166}," 8",[128,5671,5628],{"class":138},[128,5673,4789],{"class":134},[128,5675,5676],{"class":176},"\"非常好\"",[128,5678,4789],{"class":134},[128,5680,4853],{"class":138},[128,5682,3338],{"class":134},[128,5684,4905],{"class":138},[128,5686,5687,5689,5692,5694,5696,5698,5700,5702,5704],{"class":130,"line":301},[128,5688,5622],{"class":134},[128,5690,5691],{"class":166}," 7",[128,5693,5628],{"class":138},[128,5695,4789],{"class":134},[128,5697,5676],{"class":176},[128,5699,4789],{"class":134},[128,5701,4853],{"class":138},[128,5703,3338],{"class":134},[128,5705,4905],{"class":138},[128,5707,5708,5710,5713,5715,5717,5720,5722,5724,5726],{"class":130,"line":310},[128,5709,5622],{"class":134},[128,5711,5712],{"class":166}," 6",[128,5714,5628],{"class":138},[128,5716,4789],{"class":134},[128,5718,5719],{"class":176},"\"一般\"",[128,5721,4789],{"class":134},[128,5723,4853],{"class":138},[128,5725,3338],{"class":134},[128,5727,4905],{"class":138},[128,5729,5730,5732,5735,5737,5739,5741,5743,5745,5747],{"class":130,"line":323},[128,5731,5622],{"class":134},[128,5733,5734],{"class":166}," 5",[128,5736,5628],{"class":138},[128,5738,4789],{"class":134},[128,5740,5719],{"class":176},[128,5742,4789],{"class":134},[128,5744,4853],{"class":138},[128,5746,3338],{"class":134},[128,5748,4905],{"class":138},[128,5750,5751,5754,5756,5758,5761,5763,5765,5767],{"class":130,"line":330},[128,5752,5753],{"class":134},"        default",[128,5755,5628],{"class":138},[128,5757,4789],{"class":134},[128,5759,5760],{"class":176},"\"烂片\"",[128,5762,4789],{"class":134},[128,5764,4853],{"class":138},[128,5766,3338],{"class":134},[128,5768,4905],{"class":138},[128,5770,5771],{"class":130,"line":335},[128,5772,5773],{"class":138},"    }\n",[128,5775,5776],{"class":130,"line":340},[128,5777,2694],{"class":138},[19,5779,5780],{},"if和switch区别：",[4752,5782,5783,5786],{},[29,5784,5785],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[29,5787,5788],{},"switch优点：结构清晰，执行效率高",[72,5790,5792],{"id":5791},"_162循环结构","1.6.2循环结构",[26,5794,5795],{},[29,5796,5797],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[106,5799,5801],{"className":3749,"code":5800,"language":3751,"meta":112,"style":112},"\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",[114,5802,5803,5808,5816,5820,5833,5846,5850,5870,5880,5884,5896],{"__ignoreMap":112},[128,5804,5805],{"class":130,"line":131},[128,5806,5807],{"class":3814},"\u002F\u002F打印0-9数字\n",[128,5809,5810,5812,5814],{"class":130,"line":142},[128,5811,3763],{"class":134},[128,5813,1575],{"class":199},[128,5815,5563],{"class":138},[128,5817,5818],{"class":130,"line":156},[128,5819,5157],{"class":138},[128,5821,5822,5824,5827,5829,5831],{"class":130,"line":163},[128,5823,5572],{"class":134},[128,5825,5826],{"class":138}," num",[128,5828,270],{"class":134},[128,5830,2452],{"class":166},[128,5832,4905],{"class":138},[128,5834,5835,5837,5840,5842,5844],{"class":130,"line":183},[128,5836,617],{"class":134},[128,5838,5839],{"class":138},"(num",[128,5841,4657],{"class":134},[128,5843,4196],{"class":166},[128,5845,180],{"class":138},[128,5847,5848],{"class":130,"line":188},[128,5849,5617],{"class":138},[128,5851,5852,5855,5858,5860,5862,5864,5867],{"class":130,"line":193},[128,5853,5854],{"class":199},"       std",[128,5856,5857],{"class":138},"::cout",[128,5859,4789],{"class":134},[128,5861,5267],{"class":138},[128,5863,4789],{"class":134},[128,5865,5866],{"class":199},"std",[128,5868,5869],{"class":138},"::endl;\n",[128,5871,5872,5875,5878],{"class":130,"line":206},[128,5873,5874],{"class":138},"        num",[128,5876,5877],{"class":134},"++",[128,5879,4905],{"class":138},[128,5881,5882],{"class":130,"line":221},[128,5883,5773],{"class":138},[128,5885,5886,5889,5891,5894],{"class":130,"line":230},[128,5887,5888],{"class":199},"    system",[128,5890,253],{"class":138},[128,5892,5893],{"class":176},"\"pause\"",[128,5895,180],{"class":138},[128,5897,5898],{"class":130,"line":235},[128,5899,2694],{"class":138},[19,5901,5902],{},"注意：写好循环条件，避免死循环情况",[106,5904,5906],{"className":3749,"code":5905,"language":3751,"meta":112,"style":112},"\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",[114,5907,5908,5913,5920,5927,5937,5945,5949,5954,5980,5984,5989,5997,6024,6029,6034,6047,6057,6061,6071,6076,6088,6093,6107,6111,6125,6129,6142,6146,6151,6155,6168,6175,6179,6184,6189,6193],{"__ignoreMap":112},[128,5909,5910],{"class":130,"line":131},[128,5911,5912],{"class":3814},"\u002F\u002F循环结构-猜数字\n",[128,5914,5915,5917],{"class":130,"line":142},[128,5916,5538],{"class":134},[128,5918,5919],{"class":176}," \u003Ciostream>\n",[128,5921,5922,5924],{"class":130,"line":156},[128,5923,5538],{"class":134},[128,5925,5926],{"class":176}," \u003Cctime>\n",[128,5928,5929,5931,5933,5935],{"class":130,"line":163},[128,5930,5546],{"class":134},[128,5932,5549],{"class":134},[128,5934,5552],{"class":199},[128,5936,4905],{"class":138},[128,5938,5939,5941,5943],{"class":130,"line":183},[128,5940,3763],{"class":134},[128,5942,1575],{"class":199},[128,5944,5563],{"class":138},[128,5946,5947],{"class":130,"line":188},[128,5948,5157],{"class":138},[128,5950,5951],{"class":130,"line":193},[128,5952,5953],{"class":3814},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[128,5955,5956,5959,5962,5965,5967,5969,5972,5974,5977],{"class":130,"line":206},[128,5957,5958],{"class":199},"    srand",[128,5960,5961],{"class":138},"((",[128,5963,5964],{"class":134},"unsigned",[128,5966,638],{"class":134},[128,5968,4179],{"class":138},[128,5970,5971],{"class":199},"time",[128,5973,253],{"class":138},[128,5975,5976],{"class":166},"NULL",[128,5978,5979],{"class":138},"));\n",[128,5981,5982],{"class":130,"line":221},[128,5983,160],{"emptyLinePlaceholder":159},[128,5985,5986],{"class":130,"line":230},[128,5987,5988],{"class":3814},"    \u002F\u002F1.系统生成随机数\n",[128,5990,5991,5994],{"class":130,"line":235},[128,5992,5993],{"class":3814},"    \u002F\u002Frand()%100",[128,5995,5996],{"class":3814}," \u002F\u002F生成0-99的随机数\n",[128,5998,5999,6001,6003,6005,6008,6011,6013,6015,6017,6019,6021],{"class":130,"line":244},[128,6000,5572],{"class":134},[128,6002,5826],{"class":138},[128,6004,270],{"class":134},[128,6006,6007],{"class":199},"rand",[128,6009,6010],{"class":138},"()",[128,6012,4078],{"class":134},[128,6014,4061],{"class":166},[128,6016,2457],{"class":134},[128,6018,2592],{"class":166},[128,6020,3811],{"class":138},[128,6022,6023],{"class":3814}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[128,6025,6026],{"class":130,"line":287},[128,6027,6028],{"class":3814},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[128,6030,6031],{"class":130,"line":301},[128,6032,6033],{"class":3814},"    \u002F\u002F2.玩家猜测\n",[128,6035,6036,6038,6041,6043,6045],{"class":130,"line":310},[128,6037,5572],{"class":134},[128,6039,6040],{"class":138}," val",[128,6042,270],{"class":134},[128,6044,2452],{"class":166},[128,6046,4905],{"class":138},[128,6048,6049,6051,6053,6055],{"class":130,"line":323},[128,6050,617],{"class":134},[128,6052,5260],{"class":138},[128,6054,2592],{"class":166},[128,6056,180],{"class":138},[128,6058,6059],{"class":130,"line":330},[128,6060,5617],{"class":138},[128,6062,6063,6066,6068],{"class":130,"line":335},[128,6064,6065],{"class":138},"        cin",[128,6067,5041],{"class":134},[128,6069,6070],{"class":138},"val;\n",[128,6072,6073],{"class":130,"line":340},[128,6074,6075],{"class":3814},"        \u002F\u002F3.判断玩家猜测\n",[128,6077,6078,6080,6083,6085],{"class":130,"line":351},[128,6079,558],{"class":134},[128,6081,6082],{"class":138},"(val",[128,6084,4657],{"class":134},[128,6086,6087],{"class":138},"num) \n",[128,6089,6090],{"class":130,"line":384},[128,6091,6092],{"class":138},"        {\n",[128,6094,6095,6098,6100,6103,6105],{"class":130,"line":414},[128,6096,6097],{"class":138},"            cout",[128,6099,4789],{"class":134},[128,6101,6102],{"class":176},"\"猜小了！\"",[128,6104,4789],{"class":134},[128,6106,4811],{"class":138},[128,6108,6109],{"class":130,"line":419},[128,6110,2014],{"class":138},[128,6112,6113,6115,6117,6120,6122],{"class":130,"line":424},[128,6114,1770],{"class":134},[128,6116,5302],{"class":134},[128,6118,6119],{"class":138}," (val",[128,6121,4705],{"class":134},[128,6123,6124],{"class":138},"num)\n",[128,6126,6127],{"class":130,"line":434},[128,6128,6092],{"class":138},[128,6130,6131,6133,6135,6138,6140],{"class":130,"line":447},[128,6132,6097],{"class":138},[128,6134,4789],{"class":134},[128,6136,6137],{"class":176},"\"猜大了！\"",[128,6139,4789],{"class":134},[128,6141,4811],{"class":138},[128,6143,6144],{"class":130,"line":459},[128,6145,2014],{"class":138},[128,6147,6148],{"class":130,"line":471},[128,6149,6150],{"class":134},"        else\n",[128,6152,6153],{"class":130,"line":483},[128,6154,6092],{"class":138},[128,6156,6157,6159,6161,6164,6166],{"class":130,"line":495},[128,6158,6097],{"class":138},[128,6160,4789],{"class":134},[128,6162,6163],{"class":176},"\"猜对了！\"",[128,6165,4789],{"class":134},[128,6167,4811],{"class":138},[128,6169,6170,6173],{"class":130,"line":507},[128,6171,6172],{"class":134},"            break",[128,6174,4905],{"class":138},[128,6176,6177],{"class":130,"line":519},[128,6178,2014],{"class":138},[128,6180,6181],{"class":130,"line":524},[128,6182,6183],{"class":3814},"        \u002F\u002F猜对 退出游戏\n",[128,6185,6186],{"class":130,"line":529},[128,6187,6188],{"class":3814},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[128,6190,6191],{"class":130,"line":540},[128,6192,5773],{"class":138},[128,6194,6195],{"class":130,"line":555},[128,6196,2694],{"class":138},[26,6198,6199],{"start":142},[29,6200,6201,6202,6205],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[3903,6203,6204],{},"do...while会先执行一次循环语句","，在判断循环语句",[106,6207,6209],{"className":3749,"code":6208,"language":3751,"meta":112,"style":112},"\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",[114,6210,6211,6216,6224,6228,6240,6248,6252,6269,6276,6280,6293,6303],{"__ignoreMap":112},[128,6212,6213],{"class":130,"line":131},[128,6214,6215],{"class":3814},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[128,6217,6218,6220,6222],{"class":130,"line":142},[128,6219,3763],{"class":134},[128,6221,1575],{"class":199},[128,6223,5563],{"class":138},[128,6225,6226],{"class":130,"line":156},[128,6227,5157],{"class":138},[128,6229,6230,6232,6234,6236,6238],{"class":130,"line":163},[128,6231,5572],{"class":134},[128,6233,5826],{"class":138},[128,6235,270],{"class":134},[128,6237,2452],{"class":166},[128,6239,4905],{"class":138},[128,6241,6242,6245],{"class":130,"line":183},[128,6243,6244],{"class":134},"    do",[128,6246,6247],{"class":138}," \n",[128,6249,6250],{"class":130,"line":188},[128,6251,5617],{"class":138},[128,6253,6254,6257,6259,6261,6263,6265,6267],{"class":130,"line":193},[128,6255,6256],{"class":199},"        std",[128,6258,5857],{"class":138},[128,6260,4789],{"class":134},[128,6262,5267],{"class":138},[128,6264,4789],{"class":134},[128,6266,5866],{"class":199},[128,6268,5869],{"class":138},[128,6270,6271,6273],{"class":130,"line":206},[128,6272,5874],{"class":138},[128,6274,6275],{"class":134},"++\n",[128,6277,6278],{"class":130,"line":221},[128,6279,5773],{"class":138},[128,6281,6282,6284,6286,6288,6290],{"class":130,"line":230},[128,6283,617],{"class":134},[128,6285,5839],{"class":138},[128,6287,4657],{"class":134},[128,6289,4196],{"class":166},[128,6291,6292],{"class":138},");\n",[128,6294,6295,6297,6299,6301],{"class":130,"line":235},[128,6296,5888],{"class":199},[128,6298,253],{"class":138},[128,6300,5893],{"class":176},[128,6302,6292],{"class":138},[128,6304,6305],{"class":130,"line":244},[128,6306,2694],{"class":138},[19,6308,6309],{},"案例-水仙花数",[19,6311,6312],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,6314,6315],{},"例如：1^3+5^3+3^3=153",[19,6317,6318],{},"请用do...while语句，求出所有3位数的水仙花数",[106,6320,6322],{"className":3749,"code":6321,"language":3751,"meta":112,"style":112},"#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",[114,6323,6324,6330,6340,6348,6352,6357,6369,6375,6379,6384,6400,6416,6432,6447,6466,6481,6528,6532,6544,6548,6556,6560,6574],{"__ignoreMap":112},[128,6325,6326,6328],{"class":130,"line":131},[128,6327,5538],{"class":134},[128,6329,5919],{"class":176},[128,6331,6332,6334,6336,6338],{"class":130,"line":142},[128,6333,5546],{"class":134},[128,6335,5549],{"class":134},[128,6337,5552],{"class":199},[128,6339,4905],{"class":138},[128,6341,6342,6344,6346],{"class":130,"line":156},[128,6343,3763],{"class":134},[128,6345,1575],{"class":199},[128,6347,5563],{"class":138},[128,6349,6350],{"class":130,"line":163},[128,6351,5157],{"class":138},[128,6353,6354],{"class":130,"line":183},[128,6355,6356],{"class":3814},"    \u002F\u002F1.先打印所有三位数字\n",[128,6358,6359,6361,6363,6365,6367],{"class":130,"line":188},[128,6360,5572],{"class":134},[128,6362,5826],{"class":138},[128,6364,270],{"class":134},[128,6366,4061],{"class":166},[128,6368,4905],{"class":138},[128,6370,6371,6373],{"class":130,"line":193},[128,6372,6244],{"class":134},[128,6374,6247],{"class":138},[128,6376,6377],{"class":130,"line":206},[128,6378,5617],{"class":138},[128,6380,6381],{"class":130,"line":221},[128,6382,6383],{"class":3814},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[128,6385,6386,6389,6391,6393,6395,6397],{"class":130,"line":230},[128,6387,6388],{"class":134},"        int",[128,6390,5010],{"class":138},[128,6392,270],{"class":134},[128,6394,2452],{"class":166},[128,6396,3811],{"class":138},[128,6398,6399],{"class":3814}," \u002F\u002F个位\n",[128,6401,6402,6404,6407,6409,6411,6413],{"class":130,"line":235},[128,6403,6388],{"class":134},[128,6405,6406],{"class":138}," b",[128,6408,270],{"class":134},[128,6410,2452],{"class":166},[128,6412,3811],{"class":138},[128,6414,6415],{"class":3814}," \u002F\u002F十位\n",[128,6417,6418,6420,6423,6425,6427,6429],{"class":130,"line":244},[128,6419,6388],{"class":134},[128,6421,6422],{"class":138}," c",[128,6424,270],{"class":134},[128,6426,2452],{"class":166},[128,6428,3811],{"class":138},[128,6430,6431],{"class":3814}," \u002F\u002F百位\n",[128,6433,6434,6437,6439,6441,6443,6445],{"class":130,"line":287},[128,6435,6436],{"class":138},"        a",[128,6438,270],{"class":134},[128,6440,5267],{"class":138},[128,6442,4078],{"class":134},[128,6444,4196],{"class":166},[128,6446,4905],{"class":138},[128,6448,6449,6452,6454,6456,6458,6460,6462,6464],{"class":130,"line":301},[128,6450,6451],{"class":138},"        b",[128,6453,270],{"class":134},[128,6455,5267],{"class":138},[128,6457,4333],{"class":134},[128,6459,4196],{"class":166},[128,6461,4078],{"class":134},[128,6463,4196],{"class":166},[128,6465,4905],{"class":138},[128,6467,6468,6471,6473,6475,6477,6479],{"class":130,"line":310},[128,6469,6470],{"class":138},"        c",[128,6472,270],{"class":134},[128,6474,5267],{"class":138},[128,6476,4333],{"class":134},[128,6478,4061],{"class":166},[128,6480,4905],{"class":138},[128,6482,6483,6485,6487,6489,6491,6493,6495,6497,6499,6501,6503,6505,6507,6509,6511,6513,6515,6517,6520,6522,6525],{"class":130,"line":323},[128,6484,558],{"class":134},[128,6486,5430],{"class":138},[128,6488,4205],{"class":134},[128,6490,3989],{"class":138},[128,6492,4205],{"class":134},[128,6494,3989],{"class":138},[128,6496,2457],{"class":134},[128,6498,4013],{"class":138},[128,6500,4205],{"class":134},[128,6502,4013],{"class":138},[128,6504,4205],{"class":134},[128,6506,4013],{"class":138},[128,6508,2457],{"class":134},[128,6510,4038],{"class":138},[128,6512,4205],{"class":134},[128,6514,4038],{"class":138},[128,6516,4205],{"class":134},[128,6518,6519],{"class":138},"c ",[128,6521,570],{"class":134},[128,6523,6524],{"class":138}," num)",[128,6526,6527],{"class":3814}," \u002F\u002F如果是水仙花数，才打印\n",[128,6529,6530],{"class":130,"line":330},[128,6531,6092],{"class":138},[128,6533,6534,6536,6538,6540,6542],{"class":130,"line":335},[128,6535,6097],{"class":138},[128,6537,4789],{"class":134},[128,6539,5267],{"class":138},[128,6541,4789],{"class":134},[128,6543,4811],{"class":138},[128,6545,6546],{"class":130,"line":340},[128,6547,2014],{"class":138},[128,6549,6550,6552,6554],{"class":130,"line":351},[128,6551,5874],{"class":138},[128,6553,5877],{"class":134},[128,6555,4905],{"class":138},[128,6557,6558],{"class":130,"line":384},[128,6559,5773],{"class":138},[128,6561,6562,6564,6567,6569,6572],{"class":130,"line":414},[128,6563,617],{"class":134},[128,6565,6566],{"class":138}," (num ",[128,6568,4657],{"class":134},[128,6570,6571],{"class":166}," 1000",[128,6573,6292],{"class":138},[128,6575,6576],{"class":130,"line":419},[128,6577,2694],{"class":138},[26,6579,6580],{"start":156},[29,6581,6582],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[106,6584,6586],{"className":3749,"code":6585,"language":3751,"meta":112,"style":112},"\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",[114,6587,6588,6593,6621,6625,6637,6641,6646,6657,6664,6668,6681,6685,6692,6696,6708,6717],{"__ignoreMap":112},[128,6589,6590],{"class":130,"line":131},[128,6591,6592],{"class":3814},"\u002F\u002F从数字0-9打印\n",[128,6594,6595,6597,6599,6601,6604,6606,6608,6611,6613,6615,6617,6619],{"class":130,"line":142},[128,6596,2404],{"class":134},[128,6598,253],{"class":138},[128,6600,3763],{"class":134},[128,6602,6603],{"class":138}," i",[128,6605,270],{"class":134},[128,6607,2452],{"class":166},[128,6609,6610],{"class":138},";i",[128,6612,4657],{"class":134},[128,6614,4196],{"class":166},[128,6616,6610],{"class":138},[128,6618,5877],{"class":134},[128,6620,180],{"class":138},[128,6622,6623],{"class":130,"line":156},[128,6624,5157],{"class":138},[128,6626,6627,6629,6631,6633,6635],{"class":130,"line":163},[128,6628,5162],{"class":138},[128,6630,4789],{"class":134},[128,6632,4191],{"class":138},[128,6634,4789],{"class":134},[128,6636,4811],{"class":138},[128,6638,6639],{"class":130,"line":183},[128,6640,2694],{"class":138},[128,6642,6643],{"class":130,"line":188},[128,6644,6645],{"class":3814},"\u002F\u002F上式可以进行拆分\n",[128,6647,6648,6650,6652,6654],{"class":130,"line":193},[128,6649,3763],{"class":134},[128,6651,6603],{"class":138},[128,6653,270],{"class":134},[128,6655,6656],{"class":166},"0\n",[128,6658,6659,6661],{"class":130,"line":206},[128,6660,2404],{"class":134},[128,6662,6663],{"class":138},"(;;;)\n",[128,6665,6666],{"class":130,"line":221},[128,6667,5157],{"class":138},[128,6669,6670,6672,6675,6677,6679],{"class":130,"line":230},[128,6671,209],{"class":134},[128,6673,6674],{"class":138},"(i",[128,6676,5308],{"class":134},[128,6678,4196],{"class":166},[128,6680,180],{"class":138},[128,6682,6683],{"class":130,"line":235},[128,6684,5617],{"class":138},[128,6686,6687,6690],{"class":130,"line":244},[128,6688,6689],{"class":134},"        break",[128,6691,4905],{"class":138},[128,6693,6694],{"class":130,"line":287},[128,6695,5773],{"class":138},[128,6697,6698,6700,6702,6704,6706],{"class":130,"line":301},[128,6699,5162],{"class":138},[128,6701,4789],{"class":134},[128,6703,4191],{"class":138},[128,6705,4789],{"class":134},[128,6707,4811],{"class":138},[128,6709,6710,6713,6715],{"class":130,"line":310},[128,6711,6712],{"class":138},"    i",[128,6714,5877],{"class":134},[128,6716,4905],{"class":138},[128,6718,6719],{"class":130,"line":323},[128,6720,2694],{"class":138},[19,6722,6723],{},"小练习",[106,6725,6727],{"className":3749,"code":6726,"language":3751,"meta":112,"style":112},"#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",[114,6728,6729,6735,6745,6753,6757,6762,6767,6794,6798,6803,6808,6849,6853,6866,6870,6874,6878,6890,6894,6898],{"__ignoreMap":112},[128,6730,6731,6733],{"class":130,"line":131},[128,6732,5538],{"class":134},[128,6734,5541],{"class":176},[128,6736,6737,6739,6741,6743],{"class":130,"line":142},[128,6738,5546],{"class":134},[128,6740,5549],{"class":134},[128,6742,5552],{"class":199},[128,6744,4905],{"class":138},[128,6746,6747,6749,6751],{"class":130,"line":156},[128,6748,3763],{"class":134},[128,6750,1575],{"class":199},[128,6752,5563],{"class":138},[128,6754,6755],{"class":130,"line":163},[128,6756,5157],{"class":138},[128,6758,6759],{"class":130,"line":183},[128,6760,6761],{"class":3814},"    \u002F\u002F敲桌子案例\n",[128,6763,6764],{"class":130,"line":188},[128,6765,6766],{"class":3814},"    \u002F\u002F1.先输出1-100的数字\n",[128,6768,6769,6771,6773,6775,6777,6779,6781,6784,6786,6788,6790,6792],{"class":130,"line":193},[128,6770,543],{"class":134},[128,6772,253],{"class":138},[128,6774,3763],{"class":134},[128,6776,6603],{"class":138},[128,6778,270],{"class":134},[128,6780,2592],{"class":166},[128,6782,6783],{"class":138},"; i",[128,6785,5197],{"class":134},[128,6787,4061],{"class":166},[128,6789,6783],{"class":138},[128,6791,5877],{"class":134},[128,6793,180],{"class":138},[128,6795,6796],{"class":130,"line":206},[128,6797,5617],{"class":138},[128,6799,6800],{"class":130,"line":221},[128,6801,6802],{"class":3814},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[128,6804,6805],{"class":130,"line":230},[128,6806,6807],{"class":3814},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[128,6809,6810,6812,6814,6816,6818,6820,6822,6825,6827,6829,6831,6833,6835,6837,6839,6841,6843,6845,6847],{"class":130,"line":235},[128,6811,558],{"class":134},[128,6813,6674],{"class":138},[128,6815,4078],{"class":134},[128,6817,4119],{"class":166},[128,6819,570],{"class":134},[128,6821,2452],{"class":166},[128,6823,6824],{"class":134}," ||",[128,6826,6603],{"class":138},[128,6828,4078],{"class":134},[128,6830,4196],{"class":166},[128,6832,570],{"class":134},[128,6834,4119],{"class":166},[128,6836,6824],{"class":134},[128,6838,6603],{"class":138},[128,6840,4333],{"class":134},[128,6842,4196],{"class":166},[128,6844,570],{"class":134},[128,6846,4119],{"class":166},[128,6848,180],{"class":138},[128,6850,6851],{"class":130,"line":244},[128,6852,6092],{"class":138},[128,6854,6855,6857,6859,6862,6864],{"class":130,"line":287},[128,6856,6097],{"class":138},[128,6858,4789],{"class":134},[128,6860,6861],{"class":176},"\"敲桌子\"",[128,6863,4789],{"class":134},[128,6865,4811],{"class":138},[128,6867,6868],{"class":130,"line":301},[128,6869,2014],{"class":138},[128,6871,6872],{"class":130,"line":310},[128,6873,6150],{"class":134},[128,6875,6876],{"class":130,"line":323},[128,6877,6092],{"class":138},[128,6879,6880,6882,6884,6886,6888],{"class":130,"line":330},[128,6881,6097],{"class":138},[128,6883,4789],{"class":134},[128,6885,4191],{"class":138},[128,6887,4789],{"class":134},[128,6889,4811],{"class":138},[128,6891,6892],{"class":130,"line":335},[128,6893,2014],{"class":138},[128,6895,6896],{"class":130,"line":340},[128,6897,5773],{"class":138},[128,6899,6900],{"class":130,"line":351},[128,6901,2694],{"class":138},[19,6903,6904],{},"嵌套实现星图",[106,6906,6908],{"className":3749,"code":6907,"language":3751,"meta":112,"style":112},"#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",[114,6909,6910,6916,6926,6934,6938,6964,6968,6996,7000,7011,7015,7024,7028],{"__ignoreMap":112},[128,6911,6912,6914],{"class":130,"line":131},[128,6913,5538],{"class":134},[128,6915,5541],{"class":176},[128,6917,6918,6920,6922,6924],{"class":130,"line":142},[128,6919,5546],{"class":134},[128,6921,5549],{"class":134},[128,6923,5552],{"class":199},[128,6925,4905],{"class":138},[128,6927,6928,6930,6932],{"class":130,"line":156},[128,6929,3763],{"class":134},[128,6931,1575],{"class":199},[128,6933,5563],{"class":138},[128,6935,6936],{"class":130,"line":163},[128,6937,5157],{"class":138},[128,6939,6940,6942,6944,6946,6948,6950,6952,6954,6956,6958,6960,6962],{"class":130,"line":183},[128,6941,543],{"class":134},[128,6943,5260],{"class":138},[128,6945,3763],{"class":134},[128,6947,6603],{"class":138},[128,6949,270],{"class":134},[128,6951,2452],{"class":166},[128,6953,6610],{"class":138},[128,6955,4657],{"class":134},[128,6957,4196],{"class":166},[128,6959,6610],{"class":138},[128,6961,5877],{"class":134},[128,6963,180],{"class":138},[128,6965,6966],{"class":130,"line":188},[128,6967,5617],{"class":138},[128,6969,6970,6972,6974,6976,6979,6981,6983,6986,6988,6990,6992,6994],{"class":130,"line":193},[128,6971,2141],{"class":134},[128,6973,5260],{"class":138},[128,6975,3763],{"class":134},[128,6977,6978],{"class":138}," j",[128,6980,270],{"class":134},[128,6982,2452],{"class":166},[128,6984,6985],{"class":138},";j",[128,6987,4657],{"class":134},[128,6989,4196],{"class":166},[128,6991,6985],{"class":138},[128,6993,5877],{"class":134},[128,6995,180],{"class":138},[128,6997,6998],{"class":130,"line":206},[128,6999,6092],{"class":138},[128,7001,7002,7004,7006,7009],{"class":130,"line":221},[128,7003,6097],{"class":138},[128,7005,4789],{"class":134},[128,7007,7008],{"class":176},"\"*\"",[128,7010,4905],{"class":138},[128,7012,7013],{"class":130,"line":230},[128,7014,2014],{"class":138},[128,7016,7017,7020,7022],{"class":130,"line":235},[128,7018,7019],{"class":138},"        cout",[128,7021,4789],{"class":134},[128,7023,4811],{"class":138},[128,7025,7026],{"class":130,"line":244},[128,7027,5773],{"class":138},[128,7029,7030],{"class":130,"line":287},[128,7031,2694],{"class":138},[19,7033,7034],{},"乘法口诀表",[106,7036,7038],{"className":3749,"code":7037,"language":3751,"meta":112,"style":112},"#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",[114,7039,7040,7046,7056,7064,7068,7094,7098,7123,7127,7167,7171,7179,7183],{"__ignoreMap":112},[128,7041,7042,7044],{"class":130,"line":131},[128,7043,5538],{"class":134},[128,7045,5919],{"class":176},[128,7047,7048,7050,7052,7054],{"class":130,"line":142},[128,7049,5546],{"class":134},[128,7051,5549],{"class":134},[128,7053,5552],{"class":199},[128,7055,4905],{"class":138},[128,7057,7058,7060,7062],{"class":130,"line":156},[128,7059,3763],{"class":134},[128,7061,1575],{"class":199},[128,7063,5563],{"class":138},[128,7065,7066],{"class":130,"line":163},[128,7067,5157],{"class":138},[128,7069,7070,7072,7074,7076,7078,7080,7082,7084,7086,7088,7090,7092],{"class":130,"line":183},[128,7071,543],{"class":134},[128,7073,253],{"class":138},[128,7075,3763],{"class":134},[128,7077,6603],{"class":138},[128,7079,270],{"class":134},[128,7081,2592],{"class":166},[128,7083,6610],{"class":138},[128,7085,4657],{"class":134},[128,7087,4196],{"class":166},[128,7089,6610],{"class":138},[128,7091,5877],{"class":134},[128,7093,180],{"class":138},[128,7095,7096],{"class":130,"line":188},[128,7097,5617],{"class":138},[128,7099,7100,7102,7104,7106,7108,7110,7112,7114,7116,7119,7121],{"class":130,"line":193},[128,7101,2141],{"class":134},[128,7103,253],{"class":138},[128,7105,3763],{"class":134},[128,7107,6978],{"class":138},[128,7109,270],{"class":134},[128,7111,2592],{"class":166},[128,7113,6985],{"class":138},[128,7115,5197],{"class":134},[128,7117,7118],{"class":138},"i;j",[128,7120,5877],{"class":134},[128,7122,180],{"class":138},[128,7124,7125],{"class":130,"line":206},[128,7126,6092],{"class":138},[128,7128,7129,7131,7133,7135,7137,7139,7141,7143,7145,7148,7150,7152,7154,7156,7158,7161,7163,7165],{"class":130,"line":221},[128,7130,6097],{"class":138},[128,7132,4789],{"class":134},[128,7134,4217],{"class":138},[128,7136,4789],{"class":134},[128,7138,7008],{"class":176},[128,7140,4789],{"class":134},[128,7142,4191],{"class":138},[128,7144,4789],{"class":134},[128,7146,7147],{"class":176},"\"=\"",[128,7149,4789],{"class":134},[128,7151,4191],{"class":138},[128,7153,4205],{"class":134},[128,7155,4217],{"class":138},[128,7157,4789],{"class":134},[128,7159,7160],{"class":176},"'",[128,7162,1525],{"class":166},[128,7164,7160],{"class":176},[128,7166,4905],{"class":138},[128,7168,7169],{"class":130,"line":230},[128,7170,2014],{"class":138},[128,7172,7173,7175,7177],{"class":130,"line":235},[128,7174,7019],{"class":138},[128,7176,4789],{"class":134},[128,7178,4811],{"class":138},[128,7180,7181],{"class":130,"line":244},[128,7182,5773],{"class":138},[128,7184,7185],{"class":130,"line":287},[128,7186,2694],{"class":138},[72,7188,7190],{"id":7189},"_163跳出语句","1.6.3跳出语句",[26,7192,7193],{},[29,7194,7195],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,7197,7198],{},"break使用时机：",[4752,7200,7201,7204,7207],{},[29,7202,7203],{},"出现在switch条件语句中，作用是终止case并跳出switch",[29,7205,7206],{},"出现在循环结构中，作用是跳出当前的循环结构",[29,7208,7209],{},"出现在嵌套循环中，跳出最近的内层循环语句",[26,7211,7212,7215],{"start":142},[29,7213,7214],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[29,7216,7217],{},"goto语句\n语法：goto 标记;",[19,7219,7220],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[106,7222,7224],{"className":3749,"code":7223,"language":3751,"meta":112,"style":112},"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",[114,7225,7226,7234,7238,7251,7261,7274,7287,7300,7307,7323],{"__ignoreMap":112},[128,7227,7228,7230,7232],{"class":130,"line":131},[128,7229,3763],{"class":134},[128,7231,1575],{"class":199},[128,7233,5563],{"class":138},[128,7235,7236],{"class":130,"line":142},[128,7237,5157],{"class":138},[128,7239,7240,7242,7244,7247,7249],{"class":130,"line":156},[128,7241,5162],{"class":138},[128,7243,4789],{"class":134},[128,7245,7246],{"class":176},"\"1\"",[128,7248,4789],{"class":134},[128,7250,4811],{"class":138},[128,7252,7253,7256,7259],{"class":130,"line":163},[128,7254,7255],{"class":134},"    goto",[128,7257,7258],{"class":199}," FLAG",[128,7260,4905],{"class":138},[128,7262,7263,7265,7267,7270,7272],{"class":130,"line":183},[128,7264,5162],{"class":138},[128,7266,4789],{"class":134},[128,7268,7269],{"class":176},"\"2\"",[128,7271,4789],{"class":134},[128,7273,4811],{"class":138},[128,7275,7276,7278,7280,7283,7285],{"class":130,"line":188},[128,7277,5162],{"class":138},[128,7279,4789],{"class":134},[128,7281,7282],{"class":176},"\"3\"",[128,7284,4789],{"class":134},[128,7286,4811],{"class":138},[128,7288,7289,7291,7293,7296,7298],{"class":130,"line":193},[128,7290,5162],{"class":138},[128,7292,4789],{"class":134},[128,7294,7295],{"class":176},"\"4\"",[128,7297,4789],{"class":134},[128,7299,4811],{"class":138},[128,7301,7302,7305],{"class":130,"line":206},[128,7303,7304],{"class":199},"    FLAG",[128,7306,241],{"class":138},[128,7308,7309,7311,7313,7316,7318,7320],{"class":130,"line":221},[128,7310,5162],{"class":138},[128,7312,4789],{"class":134},[128,7314,7315],{"class":176},"\"5\"",[128,7317,4789],{"class":134},[128,7319,4853],{"class":138},[128,7321,7322],{"class":3814},"\u002F\u002F跳过了2,3,4,直接到5\n",[128,7324,7325],{"class":130,"line":230},[128,7326,2694],{"class":138},[14,7328,7330],{"id":7329},"_17数组","1.7数组",[72,7332,7334],{"id":7333},"_171一维数组","1.7.1一维数组",[26,7336,7337],{},[29,7338,7339],{},"一维数组定义方式",[3891,7341,7342,7352],{},[3894,7343,7344],{},[3897,7345,7346,7349],{},[3900,7347,7348],{},"方式",[3900,7350,7351],{},"注意事项",[3938,7353,7354,7368,7378],{},[3897,7355,7356,7362],{},[3943,7357,7358,7359,3811],{},"数据类型 数组名",[128,7360,7361],{},"数组长度",[3943,7363,7364,7365,7367],{},"这种方式是先定义再arr",[128,7366,4191],{},"赋值",[3897,7369,7370,7375],{},[3943,7371,7358,7372,7374],{},[128,7373,7361],{},"={值1,值2....};",[3943,7376,7377],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[3897,7379,7380,7384],{},[3943,7381,7358,7382,7374],{},[128,7383],{},[3943,7385,7386,7387,7389],{},"int arr",[128,7388],{},";这是不正确的，按照这样的方式定义必须有初始长度",[26,7391,7392],{"start":142},[29,7393,7394],{},"一维数组数组名\n用途：",[4752,7396,7397],{},[29,7398,7399],{},"1.可以统计整个数组在内存中的长度：",[106,7401,7403],{"className":3749,"code":7402,"language":3751,"meta":112,"style":112},"sizeof(arr);\nsizeof(arr[0]);\n",[114,7404,7405,7412],{"__ignoreMap":112},[128,7406,7407,7409],{"class":130,"line":131},[128,7408,3758],{"class":134},[128,7410,7411],{"class":138},"(arr);\n",[128,7413,7414,7416,7419,7421],{"class":130,"line":142},[128,7415,3758],{"class":134},[128,7417,7418],{"class":138},"(arr[",[128,7420,2452],{"class":166},[128,7422,7423],{"class":138},"]);\n",[4752,7425,7426],{},[29,7427,7428],{},"2.可以获取数组在内存中的首地址:",[106,7430,7432],{"className":3749,"code":7431,"language":3751,"meta":112,"style":112},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[114,7433,7434,7439,7452,7457],{"__ignoreMap":112},[128,7435,7436],{"class":130,"line":131},[128,7437,7438],{"class":3814},"\u002F\u002F查看16进制的首地址\n",[128,7440,7441,7443,7445,7448,7450],{"class":130,"line":142},[128,7442,4981],{"class":138},[128,7444,4789],{"class":134},[128,7446,7447],{"class":138},"arr",[128,7449,4789],{"class":134},[128,7451,4811],{"class":138},[128,7453,7454],{"class":130,"line":156},[128,7455,7456],{"class":3814},"\u002F\u002F看10进制数\n",[128,7458,7459,7461,7463,7465,7467,7469,7471,7474,7476,7478,7480],{"class":130,"line":163},[128,7460,4981],{"class":138},[128,7462,4789],{"class":134},[128,7464,253],{"class":138},[128,7466,3763],{"class":134},[128,7468,4179],{"class":138},[128,7470,4103],{"class":134},[128,7472,7473],{"class":138},"arr[",[128,7475,2452],{"class":166},[128,7477,1388],{"class":138},[128,7479,4789],{"class":134},[128,7481,4811],{"class":138},[19,7483,7484],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[4752,7486,7487],{},[29,7488,7489],{},"1️⃣五只小猪称体重",[106,7491,7493],{"className":3749,"code":7492,"language":3751,"meta":112,"style":112},"#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",[114,7494,7495,7501,7511,7519,7523,7563,7576,7602,7606,7618,7622,7632,7636,7640,7653,7662],{"__ignoreMap":112},[128,7496,7497,7499],{"class":130,"line":131},[128,7498,5538],{"class":134},[128,7500,5541],{"class":176},[128,7502,7503,7505,7507,7509],{"class":130,"line":142},[128,7504,5546],{"class":134},[128,7506,5549],{"class":134},[128,7508,5552],{"class":199},[128,7510,4905],{"class":138},[128,7512,7513,7515,7517],{"class":130,"line":156},[128,7514,3763],{"class":134},[128,7516,1575],{"class":199},[128,7518,5563],{"class":138},[128,7520,7521],{"class":130,"line":163},[128,7522,5157],{"class":138},[128,7524,7525,7527,7530,7532,7534,7536,7538,7541,7543,7546,7548,7550,7552,7555,7557,7560],{"class":130,"line":183},[128,7526,5572],{"class":134},[128,7528,7529],{"class":138}," arr[",[128,7531,4069],{"class":166},[128,7533,1388],{"class":138},[128,7535,270],{"class":134},[128,7537,1379],{"class":138},[128,7539,7540],{"class":166},"300",[128,7542,4128],{"class":138},[128,7544,7545],{"class":166},"350",[128,7547,4128],{"class":138},[128,7549,3143],{"class":166},[128,7551,4128],{"class":138},[128,7553,7554],{"class":166},"400",[128,7556,4128],{"class":138},[128,7558,7559],{"class":166},"250",[128,7561,7562],{"class":138},"};\n",[128,7564,7565,7567,7570,7572,7574],{"class":130,"line":188},[128,7566,5572],{"class":134},[128,7568,7569],{"class":138}," tmp",[128,7571,270],{"class":134},[128,7573,2452],{"class":166},[128,7575,4905],{"class":138},[128,7577,7578,7580,7582,7584,7586,7588,7590,7592,7594,7596,7598,7600],{"class":130,"line":193},[128,7579,543],{"class":134},[128,7581,5260],{"class":138},[128,7583,3763],{"class":134},[128,7585,6603],{"class":138},[128,7587,270],{"class":134},[128,7589,2452],{"class":166},[128,7591,6610],{"class":138},[128,7593,4657],{"class":134},[128,7595,4069],{"class":166},[128,7597,6610],{"class":138},[128,7599,5877],{"class":134},[128,7601,180],{"class":138},[128,7603,7604],{"class":130,"line":206},[128,7605,5617],{"class":138},[128,7607,7608,7610,7613,7615],{"class":130,"line":221},[128,7609,558],{"class":134},[128,7611,7612],{"class":138},"(tmp",[128,7614,4657],{"class":134},[128,7616,7617],{"class":138},"arr[i])\n",[128,7619,7620],{"class":130,"line":230},[128,7621,6092],{"class":138},[128,7623,7624,7627,7629],{"class":130,"line":235},[128,7625,7626],{"class":138},"            tmp",[128,7628,270],{"class":134},[128,7630,7631],{"class":138},"arr[i];\n",[128,7633,7634],{"class":130,"line":244},[128,7635,2014],{"class":138},[128,7637,7638],{"class":130,"line":287},[128,7639,5773],{"class":138},[128,7641,7642,7644,7646,7649,7651],{"class":130,"line":301},[128,7643,5162],{"class":138},[128,7645,4789],{"class":134},[128,7647,7648],{"class":138},"tmp",[128,7650,4789],{"class":134},[128,7652,4811],{"class":138},[128,7654,7655,7657,7660],{"class":130,"line":310},[128,7656,587],{"class":134},[128,7658,7659],{"class":166}," 0",[128,7661,4905],{"class":138},[128,7663,7664],{"class":130,"line":323},[128,7665,2694],{"class":138},[4752,7667,7668],{},[29,7669,7670],{},"2️⃣数组元素逆置",[106,7672,7674],{"className":3749,"code":7673,"language":3751,"meta":112,"style":112},"\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",[114,7675,7676,7681,7687,7697,7705,7709,7744,7760,7792,7805,7810,7815,7827,7837,7847,7852,7861,7871,7876,7881,7908,7912,7928,7932,7943,7952],{"__ignoreMap":112},[128,7677,7678],{"class":130,"line":131},[128,7679,7680],{"class":3814},"\u002F\u002F元素逆置\n",[128,7682,7683,7685],{"class":130,"line":142},[128,7684,5538],{"class":134},[128,7686,5541],{"class":176},[128,7688,7689,7691,7693,7695],{"class":130,"line":156},[128,7690,5546],{"class":134},[128,7692,5549],{"class":134},[128,7694,5552],{"class":199},[128,7696,4905],{"class":138},[128,7698,7699,7701,7703],{"class":130,"line":163},[128,7700,3763],{"class":134},[128,7702,1575],{"class":199},[128,7704,5563],{"class":138},[128,7706,7707],{"class":130,"line":183},[128,7708,5157],{"class":138},[128,7710,7711,7714,7716,7718,7720,7722,7724,7726,7728,7730,7732,7734,7736,7738,7740,7742],{"class":130,"line":188},[128,7712,7713],{"class":134},"   int",[128,7715,7529],{"class":138},[128,7717,4069],{"class":166},[128,7719,1388],{"class":138},[128,7721,270],{"class":134},[128,7723,1379],{"class":138},[128,7725,2592],{"class":166},[128,7727,4128],{"class":138},[128,7729,409],{"class":166},[128,7731,4128],{"class":138},[128,7733,3827],{"class":166},[128,7735,4128],{"class":138},[128,7737,4043],{"class":166},[128,7739,4128],{"class":138},[128,7741,4069],{"class":166},[128,7743,7562],{"class":138},[128,7745,7746,7748,7751,7753,7755,7757],{"class":130,"line":193},[128,7747,7713],{"class":134},[128,7749,7750],{"class":138}," start",[128,7752,270],{"class":134},[128,7754,2452],{"class":166},[128,7756,3811],{"class":138},[128,7758,7759],{"class":3814},"\u002F\u002F起始下标\n",[128,7761,7762,7764,7767,7770,7773,7776,7778,7780,7783,7785,7787,7789],{"class":130,"line":206},[128,7763,7713],{"class":134},[128,7765,7766],{"class":138}," end",[128,7768,7769],{"class":134},"=sizeof",[128,7771,7772],{"class":138},"(arr)",[128,7774,7775],{"class":134},"\u002Fsizeof",[128,7777,7418],{"class":138},[128,7779,2452],{"class":166},[128,7781,7782],{"class":138},"])",[128,7784,4281],{"class":134},[128,7786,2592],{"class":166},[128,7788,3811],{"class":138},[128,7790,7791],{"class":3814},"\u002F\u002F结束下标\n",[128,7793,7794,7797,7800,7802],{"class":130,"line":221},[128,7795,7796],{"class":134},"   while",[128,7798,7799],{"class":138}," (start",[128,7801,4657],{"class":134},[128,7803,7804],{"class":138},"end)\n",[128,7806,7807],{"class":130,"line":230},[128,7808,7809],{"class":138},"   {\n",[128,7811,7812],{"class":130,"line":235},[128,7813,7814],{"class":3814},"    \u002F\u002F实现元素互换代码\n",[128,7816,7817,7819,7822,7824],{"class":130,"line":244},[128,7818,5572],{"class":134},[128,7820,7821],{"class":138}," temp",[128,7823,270],{"class":134},[128,7825,7826],{"class":138},"arr[start];\n",[128,7828,7829,7832,7834],{"class":130,"line":287},[128,7830,7831],{"class":138},"    arr[start]",[128,7833,270],{"class":134},[128,7835,7836],{"class":138},"arr[end];\n",[128,7838,7839,7842,7844],{"class":130,"line":301},[128,7840,7841],{"class":138},"    arr[end]",[128,7843,270],{"class":134},[128,7845,7846],{"class":138},"temp;\n",[128,7848,7849],{"class":130,"line":310},[128,7850,7851],{"class":3814},"    \u002F\u002F下标更新\n",[128,7853,7854,7857,7859],{"class":130,"line":323},[128,7855,7856],{"class":138},"    start",[128,7858,5877],{"class":134},[128,7860,4905],{"class":138},[128,7862,7863,7866,7869],{"class":130,"line":330},[128,7864,7865],{"class":138},"    end",[128,7867,7868],{"class":134},"--",[128,7870,4905],{"class":138},[128,7872,7873],{"class":130,"line":335},[128,7874,7875],{"class":138},"   }\n",[128,7877,7878],{"class":130,"line":340},[128,7879,7880],{"class":3814},"   \u002F\u002F输出逆置后的数组\n",[128,7882,7883,7886,7888,7890,7892,7894,7896,7898,7900,7902,7904,7906],{"class":130,"line":351},[128,7884,7885],{"class":134},"   for",[128,7887,5260],{"class":138},[128,7889,3763],{"class":134},[128,7891,6603],{"class":138},[128,7893,270],{"class":134},[128,7895,2452],{"class":166},[128,7897,6610],{"class":138},[128,7899,4657],{"class":134},[128,7901,4069],{"class":166},[128,7903,6610],{"class":138},[128,7905,5877],{"class":134},[128,7907,180],{"class":138},[128,7909,7910],{"class":130,"line":384},[128,7911,7809],{"class":138},[128,7913,7914,7916,7918,7921,7923,7926],{"class":130,"line":414},[128,7915,5162],{"class":138},[128,7917,4789],{"class":134},[128,7919,7920],{"class":138},"arr[i]",[128,7922,4789],{"class":134},[128,7924,7925],{"class":176},"\" \"",[128,7927,4905],{"class":138},[128,7929,7930],{"class":130,"line":419},[128,7931,7875],{"class":138},[128,7933,7934,7937,7939,7941],{"class":130,"line":424},[128,7935,7936],{"class":199},"   system",[128,7938,253],{"class":138},[128,7940,5893],{"class":176},[128,7942,6292],{"class":138},[128,7944,7945,7948,7950],{"class":130,"line":434},[128,7946,7947],{"class":134},"   return",[128,7949,7659],{"class":166},[128,7951,4905],{"class":138},[128,7953,7954],{"class":130,"line":447},[128,7955,2694],{"class":138},[4752,7957,7958],{},[29,7959,7960],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[106,7962,7964],{"className":3749,"code":7963,"language":3751,"meta":112,"style":112},"\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",[114,7965,7966,7971,7977,7987,7995,7999,8050,8063,8089,8093,8107,8111,8116,8121,8151,8155,8160,8194,8198,8203,8221,8226,8238,8254,8269,8274,8278,8282,8295,8321,8325,8339,8343,8351],{"__ignoreMap":112},[128,7967,7968],{"class":130,"line":131},[128,7969,7970],{"class":3814},"\u002F\u002F冒泡排序,升序\n",[128,7972,7973,7975],{"class":130,"line":142},[128,7974,5538],{"class":134},[128,7976,5541],{"class":176},[128,7978,7979,7981,7983,7985],{"class":130,"line":156},[128,7980,5546],{"class":134},[128,7982,5549],{"class":134},[128,7984,5552],{"class":199},[128,7986,4905],{"class":138},[128,7988,7989,7991,7993],{"class":130,"line":163},[128,7990,3763],{"class":134},[128,7992,1575],{"class":199},[128,7994,5563],{"class":138},[128,7996,7997],{"class":130,"line":183},[128,7998,5157],{"class":138},[128,8000,8001,8003,8005,8007,8009,8011,8014,8016,8018,8020,8022,8024,8026,8028,8030,8032,8034,8036,8038,8040,8042,8044,8046,8048],{"class":130,"line":188},[128,8002,5572],{"class":134},[128,8004,7529],{"class":138},[128,8006,4170],{"class":166},[128,8008,567],{"class":138},[128,8010,270],{"class":134},[128,8012,8013],{"class":138}," {",[128,8015,4043],{"class":166},[128,8017,4128],{"class":138},[128,8019,409],{"class":166},[128,8021,4128],{"class":138},[128,8023,4145],{"class":166},[128,8025,4128],{"class":138},[128,8027,2452],{"class":166},[128,8029,4128],{"class":138},[128,8031,4069],{"class":166},[128,8033,4128],{"class":138},[128,8035,4119],{"class":166},[128,8037,4128],{"class":138},[128,8039,2592],{"class":166},[128,8041,4128],{"class":138},[128,8043,3827],{"class":166},[128,8045,4128],{"class":138},[128,8047,4170],{"class":166},[128,8049,7562],{"class":138},[128,8051,8052,8054,8056,8059,8061],{"class":130,"line":193},[128,8053,5162],{"class":138},[128,8055,4789],{"class":134},[128,8057,8058],{"class":176},"\"排序前：\"",[128,8060,4789],{"class":134},[128,8062,4811],{"class":138},[128,8064,8065,8067,8069,8071,8073,8075,8077,8079,8081,8083,8085,8087],{"class":130,"line":206},[128,8066,543],{"class":134},[128,8068,5260],{"class":138},[128,8070,3763],{"class":134},[128,8072,6603],{"class":138},[128,8074,270],{"class":134},[128,8076,2452],{"class":166},[128,8078,6610],{"class":138},[128,8080,4657],{"class":134},[128,8082,4170],{"class":166},[128,8084,6610],{"class":138},[128,8086,5877],{"class":134},[128,8088,180],{"class":138},[128,8090,8091],{"class":130,"line":221},[128,8092,5617],{"class":138},[128,8094,8095,8097,8099,8101,8103,8105],{"class":130,"line":230},[128,8096,7019],{"class":138},[128,8098,4789],{"class":134},[128,8100,7920],{"class":138},[128,8102,4789],{"class":134},[128,8104,7925],{"class":176},[128,8106,4905],{"class":138},[128,8108,8109],{"class":130,"line":235},[128,8110,5773],{"class":138},[128,8112,8113],{"class":130,"line":244},[128,8114,8115],{"class":3814},"    \u002F\u002F开始冒泡排序\n",[128,8117,8118],{"class":130,"line":287},[128,8119,8120],{"class":3814},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[128,8122,8123,8125,8127,8129,8131,8133,8135,8137,8139,8141,8143,8145,8147,8149],{"class":130,"line":301},[128,8124,543],{"class":134},[128,8126,5260],{"class":138},[128,8128,3763],{"class":134},[128,8130,6603],{"class":138},[128,8132,270],{"class":134},[128,8134,2452],{"class":166},[128,8136,6610],{"class":138},[128,8138,4657],{"class":134},[128,8140,4170],{"class":166},[128,8142,4281],{"class":134},[128,8144,2592],{"class":166},[128,8146,6610],{"class":138},[128,8148,5877],{"class":134},[128,8150,180],{"class":138},[128,8152,8153],{"class":130,"line":310},[128,8154,5617],{"class":138},[128,8156,8157],{"class":130,"line":323},[128,8158,8159],{"class":3814},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[128,8161,8162,8164,8166,8168,8170,8172,8174,8176,8178,8180,8182,8184,8186,8188,8190,8192],{"class":130,"line":330},[128,8163,2141],{"class":134},[128,8165,5260],{"class":138},[128,8167,3763],{"class":134},[128,8169,6978],{"class":138},[128,8171,270],{"class":134},[128,8173,2452],{"class":166},[128,8175,6985],{"class":138},[128,8177,4657],{"class":134},[128,8179,4170],{"class":166},[128,8181,4281],{"class":134},[128,8183,4191],{"class":138},[128,8185,4281],{"class":134},[128,8187,2592],{"class":166},[128,8189,6985],{"class":138},[128,8191,5877],{"class":134},[128,8193,180],{"class":138},[128,8195,8196],{"class":130,"line":335},[128,8197,6092],{"class":138},[128,8199,8200],{"class":130,"line":340},[128,8201,8202],{"class":3814},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[128,8204,8205,8207,8210,8212,8215,8217,8219],{"class":130,"line":351},[128,8206,2156],{"class":134},[128,8208,8209],{"class":138},"(arr[j]",[128,8211,4705],{"class":134},[128,8213,8214],{"class":138},"arr[j",[128,8216,2457],{"class":134},[128,8218,2592],{"class":166},[128,8220,2595],{"class":138},[128,8222,8223],{"class":130,"line":384},[128,8224,8225],{"class":138},"            {\n",[128,8227,8228,8231,8233,8235],{"class":130,"line":414},[128,8229,8230],{"class":134},"                int",[128,8232,7821],{"class":138},[128,8234,270],{"class":134},[128,8236,8237],{"class":138},"arr[j];\n",[128,8239,8240,8243,8245,8247,8249,8251],{"class":130,"line":419},[128,8241,8242],{"class":138},"                arr[j]",[128,8244,270],{"class":134},[128,8246,8214],{"class":138},[128,8248,2457],{"class":134},[128,8250,2592],{"class":166},[128,8252,8253],{"class":138},"];\n",[128,8255,8256,8259,8261,8263,8265,8267],{"class":130,"line":424},[128,8257,8258],{"class":138},"                arr[j",[128,8260,2457],{"class":134},[128,8262,2592],{"class":166},[128,8264,1388],{"class":138},[128,8266,270],{"class":134},[128,8268,7846],{"class":138},[128,8270,8271],{"class":130,"line":434},[128,8272,8273],{"class":138},"            }\n",[128,8275,8276],{"class":130,"line":447},[128,8277,2014],{"class":138},[128,8279,8280],{"class":130,"line":459},[128,8281,5773],{"class":138},[128,8283,8284,8286,8288,8291,8293],{"class":130,"line":471},[128,8285,5162],{"class":138},[128,8287,4789],{"class":134},[128,8289,8290],{"class":176},"\"排序后：\"",[128,8292,4789],{"class":134},[128,8294,4811],{"class":138},[128,8296,8297,8299,8301,8303,8305,8307,8309,8311,8313,8315,8317,8319],{"class":130,"line":483},[128,8298,543],{"class":134},[128,8300,5260],{"class":138},[128,8302,3763],{"class":134},[128,8304,6603],{"class":138},[128,8306,270],{"class":134},[128,8308,2452],{"class":166},[128,8310,6610],{"class":138},[128,8312,4657],{"class":134},[128,8314,4170],{"class":166},[128,8316,6610],{"class":138},[128,8318,5877],{"class":134},[128,8320,180],{"class":138},[128,8322,8323],{"class":130,"line":495},[128,8324,5617],{"class":138},[128,8326,8327,8329,8331,8333,8335,8337],{"class":130,"line":507},[128,8328,7019],{"class":138},[128,8330,4789],{"class":134},[128,8332,7920],{"class":138},[128,8334,4789],{"class":134},[128,8336,7925],{"class":176},[128,8338,4905],{"class":138},[128,8340,8341],{"class":130,"line":519},[128,8342,5773],{"class":138},[128,8344,8345,8347,8349],{"class":130,"line":524},[128,8346,587],{"class":134},[128,8348,7659],{"class":166},[128,8350,4905],{"class":138},[128,8352,8353],{"class":130,"line":529},[128,8354,2694],{"class":138},[72,8356,8358],{"id":8357},"_172二维数组","1.7.2二维数组",[26,8360,8361],{},[29,8362,8363],{},"二维数组的四种定义方式",[3891,8365,8366,8375],{},[3894,8367,8368],{},[3897,8369,8370,8373],{},[3900,8371,8372],{},"序号",[3900,8374,7348],{},[3938,8376,8377,8387,8396,8405,8414],{},[3897,8378,8379,8381],{},[3943,8380,2592],{},[3943,8382,8383,8384,3811],{},"数据类型 数组名[行数]",[128,8385,8386],{},"列数",[3897,8388,8389,8391],{},[3943,8390,409],{},[3943,8392,8383,8393,8395],{},[128,8394,8386],{},"={ {数据1,数据2}，{数据3，数据4}... }",[3897,8397,8398,8400],{},[3943,8399,3827],{},[3943,8401,8383,8402,8404],{},[128,8403,8386],{},"={数据1,数据2,数据3...}",[3897,8406,8407,8409],{},[3943,8408,4043],{},[3943,8410,8411,8412,8404],{},"数据类型 数组名[]",[128,8413,8386],{},[3897,8415,8416,8419],{},[3943,8417,8418],{},"注意：不能只省略列数",[3943,8420],{},[26,8422,8423],{"start":142},[29,8424,8425],{},"二维数组数组名",[4752,8427,8428,8431],{},[29,8429,8430],{},"1.查看二维数组所占内存空间",[29,8432,8433],{},"2.获取二维数组首地址",[19,8435,8436],{},"已知二维数组，求二维数组的行数与列数",[106,8438,8440],{"className":3749,"code":8439,"language":3751,"meta":112,"style":112},"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",[114,8441,8442,8450,8454,8472,8476,8493,8509,8514,8539,8572],{"__ignoreMap":112},[128,8443,8444,8446,8448],{"class":130,"line":131},[128,8445,3763],{"class":134},[128,8447,1575],{"class":199},[128,8449,5563],{"class":138},[128,8451,8452],{"class":130,"line":142},[128,8453,5157],{"class":138},[128,8455,8456,8458,8460,8462,8465,8467,8469],{"class":130,"line":156},[128,8457,5572],{"class":134},[128,8459,7529],{"class":138},[128,8461,409],{"class":166},[128,8463,8464],{"class":138},"][",[128,8466,3827],{"class":166},[128,8468,1388],{"class":138},[128,8470,8471],{"class":134},"=\n",[128,8473,8474],{"class":130,"line":163},[128,8475,5617],{"class":138},[128,8477,8478,8481,8483,8485,8487,8489,8491],{"class":130,"line":183},[128,8479,8480],{"class":138},"        {",[128,8482,2592],{"class":166},[128,8484,4128],{"class":138},[128,8486,409],{"class":166},[128,8488,4128],{"class":138},[128,8490,3827],{"class":166},[128,8492,2282],{"class":138},[128,8494,8495,8497,8499,8501,8503,8505,8507],{"class":130,"line":188},[128,8496,8480],{"class":138},[128,8498,4043],{"class":166},[128,8500,4128],{"class":138},[128,8502,4069],{"class":166},[128,8504,4128],{"class":138},[128,8506,4094],{"class":166},[128,8508,2694],{"class":138},[128,8510,8511],{"class":130,"line":193},[128,8512,8513],{"class":138},"    };\n",[128,8515,8516,8518,8520,8523,8525,8527,8529,8531,8533,8535,8537],{"class":130,"line":206},[128,8517,5162],{"class":138},[128,8519,4789],{"class":134},[128,8521,8522],{"class":176},"\"二维数组的行数\"",[128,8524,4984],{"class":134},[128,8526,7772],{"class":138},[128,8528,7775],{"class":134},[128,8530,7418],{"class":138},[128,8532,2452],{"class":166},[128,8534,7782],{"class":138},[128,8536,4789],{"class":134},[128,8538,4811],{"class":138},[128,8540,8541,8543,8545,8548,8550,8552,8554,8556,8558,8560,8562,8564,8566,8568,8570],{"class":130,"line":221},[128,8542,5162],{"class":138},[128,8544,4789],{"class":134},[128,8546,8547],{"class":176},"\"二维数组的列数\"",[128,8549,4984],{"class":134},[128,8551,7418],{"class":138},[128,8553,2452],{"class":166},[128,8555,7782],{"class":138},[128,8557,7775],{"class":134},[128,8559,7418],{"class":138},[128,8561,2452],{"class":166},[128,8563,8464],{"class":138},[128,8565,2452],{"class":166},[128,8567,7782],{"class":138},[128,8569,4789],{"class":134},[128,8571,4811],{"class":138},[128,8573,8574],{"class":130,"line":230},[128,8575,2694],{"class":138},[19,8577,8578],{},"查看二维数组首地址",[106,8580,8582],{"className":3749,"code":8581,"language":3751,"meta":112,"style":112},"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",[114,8583,8584,8601,8627,8652],{"__ignoreMap":112},[128,8585,8586,8588,8590,8593,8595,8597,8599],{"class":130,"line":131},[128,8587,4981],{"class":138},[128,8589,4789],{"class":134},[128,8591,8592],{"class":176},"\"二维数组首地址：\"",[128,8594,4789],{"class":134},[128,8596,7447],{"class":138},[128,8598,4789],{"class":134},[128,8600,4811],{"class":138},[128,8602,8603,8605,8607,8610,8612,8614,8616,8619,8621,8623,8625],{"class":130,"line":142},[128,8604,4981],{"class":138},[128,8606,4789],{"class":134},[128,8608,8609],{"class":176},"\"二维数组第一行的首地址：\"",[128,8611,4789],{"class":134},[128,8613,253],{"class":138},[128,8615,3763],{"class":134},[128,8617,8618],{"class":138},")arr[",[128,8620,2452],{"class":166},[128,8622,1388],{"class":138},[128,8624,4789],{"class":134},[128,8626,4811],{"class":138},[128,8628,8629,8631,8633,8636,8638,8640,8642,8644,8646,8648,8650],{"class":130,"line":156},[128,8630,4981],{"class":138},[128,8632,4789],{"class":134},[128,8634,8635],{"class":176},"\"二维数组第二行的首地址：\"",[128,8637,4789],{"class":134},[128,8639,253],{"class":138},[128,8641,3763],{"class":134},[128,8643,8618],{"class":138},[128,8645,2592],{"class":166},[128,8647,1388],{"class":138},[128,8649,4789],{"class":134},[128,8651,4811],{"class":138},[128,8653,8654,8656,8658,8661,8663,8665,8667,8669,8671,8673,8675,8677,8679,8681,8683,8685],{"class":130,"line":163},[128,8655,4981],{"class":138},[128,8657,4789],{"class":134},[128,8659,8660],{"class":176},"\"二维数组第一个元素的首地址:\"",[128,8662,4789],{"class":134},[128,8664,253],{"class":138},[128,8666,3763],{"class":134},[128,8668,4179],{"class":138},[128,8670,4103],{"class":134},[128,8672,7473],{"class":138},[128,8674,2452],{"class":166},[128,8676,8464],{"class":138},[128,8678,2452],{"class":166},[128,8680,1388],{"class":138},[128,8682,4789],{"class":134},[128,8684,4853],{"class":138},[128,8686,8687],{"class":3814},"\u002F\u002F对于数，要加取址符\n",[3659,8689,8690],{},"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":112,"searchDepth":142,"depth":142,"links":8692},[8693,8694,8695,8703,8704,8710,8715],{"id":3704,"depth":142,"text":3705},{"id":3711,"depth":142,"text":3712},{"id":3726,"depth":142,"text":3727,"children":8696},[8697,8698,8699,8700,8701,8702],{"id":3730,"depth":156,"text":3731},{"id":3775,"depth":156,"text":3776},{"id":3840,"depth":156,"text":3841},{"id":4770,"depth":156,"text":4771},{"id":4859,"depth":156,"text":4860},{"id":4955,"depth":156,"text":4956},{"id":4997,"depth":142,"text":4998},{"id":5065,"depth":142,"text":5066,"children":8705},[8706,8707,8708,8709],{"id":5069,"depth":156,"text":5070},{"id":5091,"depth":156,"text":5092},{"id":5100,"depth":156,"text":5101},{"id":5109,"depth":156,"text":5110},{"id":5118,"depth":142,"text":5119,"children":8711},[8712,8713,8714],{"id":5122,"depth":156,"text":5123},{"id":5791,"depth":156,"text":5792},{"id":7189,"depth":156,"text":7190},{"id":7329,"depth":142,"text":7330,"children":8716},[8717,8718],{"id":7333,"depth":156,"text":7334},{"id":8357,"depth":156,"text":8358},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":3696,"description":112},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":8725,"title":8726,"body":8727,"description":112,"extension":3687,"meta":9822,"navigation":159,"path":9823,"seo":9824,"stem":9825,"__hash__":9826},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":8728,"toc":9814},[8729,8732,8736,8744,8750,8753,8817,8821,8824,8900,8904,8907,8910,8913,9126,9130,9135,9199,9204,9271,9276,9367,9370,9475,9479,9482,9488,9631,9635,9638,9652,9655,9700,9703,9811],[10,8730,8726],{"id":8731},"_2函数",[14,8733,8735],{"id":8734},"_21函数概述","2.1函数概述",[26,8737,8738,8741],{},[29,8739,8740],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[29,8742,8743],{},"语法：",[106,8745,8748],{"className":8746,"code":8747,"language":111,"meta":112},[109],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[114,8749,8747],{"__ignoreMap":112},[19,8751,8752],{},"小案例",[106,8754,8756],{"className":3749,"code":8755,"language":3751,"meta":112,"style":112},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[114,8757,8758,8763,8785,8789,8806,8813],{"__ignoreMap":112},[128,8759,8760],{"class":130,"line":131},[128,8761,8762],{"class":3814},"\u002F\u002Fnum1,num2形参\n",[128,8764,8765,8767,8769,8771,8773,8776,8778,8780,8783],{"class":130,"line":142},[128,8766,3763],{"class":134},[128,8768,2187],{"class":199},[128,8770,253],{"class":138},[128,8772,3763],{"class":134},[128,8774,8775],{"class":266}," num1",[128,8777,4128],{"class":138},[128,8779,3763],{"class":134},[128,8781,8782],{"class":266}," num2",[128,8784,180],{"class":138},[128,8786,8787],{"class":130,"line":156},[128,8788,5157],{"class":138},[128,8790,8791,8793,8796,8798,8801,8803],{"class":130,"line":163},[128,8792,5572],{"class":134},[128,8794,8795],{"class":138}," sum",[128,8797,270],{"class":134},[128,8799,8800],{"class":138},"num1",[128,8802,2457],{"class":134},[128,8804,8805],{"class":138},"num2;\n",[128,8807,8808,8810],{"class":130,"line":183},[128,8809,587],{"class":134},[128,8811,8812],{"class":138}," sum;\n",[128,8814,8815],{"class":130,"line":188},[128,8816,2694],{"class":138},[14,8818,8820],{"id":8819},"_22函数调用","2.2函数调用",[19,8822,8823],{},"调用刚刚写的求和函数",[106,8825,8827],{"className":3749,"code":8826,"language":3751,"meta":112,"style":112},"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",[114,8828,8829,8837,8841,8846,8858,8870,8879,8884,8896],{"__ignoreMap":112},[128,8830,8831,8833,8835],{"class":130,"line":131},[128,8832,3763],{"class":134},[128,8834,1575],{"class":199},[128,8836,5563],{"class":138},[128,8838,8839],{"class":130,"line":142},[128,8840,5157],{"class":138},[128,8842,8843],{"class":130,"line":156},[128,8844,8845],{"class":3814},"    \u002F\u002Fa,b实参\n",[128,8847,8848,8850,8852,8854,8856],{"class":130,"line":163},[128,8849,5572],{"class":134},[128,8851,5010],{"class":138},[128,8853,270],{"class":134},[128,8855,2452],{"class":166},[128,8857,4905],{"class":138},[128,8859,8860,8862,8864,8866,8868],{"class":130,"line":183},[128,8861,5572],{"class":134},[128,8863,6406],{"class":138},[128,8865,270],{"class":134},[128,8867,2452],{"class":166},[128,8869,4905],{"class":138},[128,8871,8872,8874,8876],{"class":130,"line":188},[128,8873,5599],{"class":138},[128,8875,5041],{"class":134},[128,8877,8878],{"class":138},"a,b;\n",[128,8880,8881],{"class":130,"line":193},[128,8882,8883],{"class":3814},"    \u002F\u002F调用函数时，实参值传给了形参\n",[128,8885,8886,8888,8890,8893],{"class":130,"line":206},[128,8887,5162],{"class":138},[128,8889,4789],{"class":134},[128,8891,8892],{"class":199},"add",[128,8894,8895],{"class":138},"(a,b);\n",[128,8897,8898],{"class":130,"line":221},[128,8899,2694],{"class":138},[14,8901,8903],{"id":8902},"_23值传递","2.3值传递",[19,8905,8906],{},"值传递就是函数调用时实参将数值传给形参",[19,8908,8909],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,8911,8912],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[106,8914,8916],{"className":3749,"code":8915,"language":3751,"meta":112,"style":112},"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",[114,8917,8918,8940,8944,8957,8974,8992,9003,9012,9021,9034,9050,9066,9075,9079,9087,9091,9103,9115,9122],{"__ignoreMap":112},[128,8919,8920,8923,8926,8928,8930,8932,8934,8936,8938],{"class":130,"line":131},[128,8921,8922],{"class":134},"void",[128,8924,8925],{"class":199}," swap",[128,8927,253],{"class":138},[128,8929,3763],{"class":134},[128,8931,8775],{"class":266},[128,8933,4128],{"class":138},[128,8935,3763],{"class":134},[128,8937,8782],{"class":266},[128,8939,180],{"class":138},[128,8941,8942],{"class":130,"line":142},[128,8943,5157],{"class":138},[128,8945,8946,8948,8950,8953,8955],{"class":130,"line":156},[128,8947,5162],{"class":138},[128,8949,4789],{"class":134},[128,8951,8952],{"class":176},"\"交换前：\"",[128,8954,4789],{"class":134},[128,8956,4811],{"class":138},[128,8958,8959,8961,8963,8966,8968,8970,8972],{"class":130,"line":163},[128,8960,5162],{"class":138},[128,8962,4789],{"class":134},[128,8964,8965],{"class":176},"\"num1=\"",[128,8967,4789],{"class":134},[128,8969,8800],{"class":138},[128,8971,4789],{"class":134},[128,8973,4811],{"class":138},[128,8975,8976,8978,8980,8983,8985,8988,8990],{"class":130,"line":183},[128,8977,5162],{"class":138},[128,8979,4789],{"class":134},[128,8981,8982],{"class":176},"\"num2=\"",[128,8984,4789],{"class":134},[128,8986,8987],{"class":138},"num2",[128,8989,4789],{"class":134},[128,8991,4811],{"class":138},[128,8993,8994,8996,8998,9000],{"class":130,"line":188},[128,8995,5572],{"class":134},[128,8997,7821],{"class":138},[128,8999,270],{"class":134},[128,9001,9002],{"class":138},"num1;\n",[128,9004,9005,9008,9010],{"class":130,"line":193},[128,9006,9007],{"class":138},"    num1",[128,9009,270],{"class":134},[128,9011,8805],{"class":138},[128,9013,9014,9017,9019],{"class":130,"line":206},[128,9015,9016],{"class":138},"    num2",[128,9018,270],{"class":134},[128,9020,7846],{"class":138},[128,9022,9023,9025,9027,9030,9032],{"class":130,"line":221},[128,9024,5162],{"class":138},[128,9026,4789],{"class":134},[128,9028,9029],{"class":176},"\"交换后：\"",[128,9031,4789],{"class":134},[128,9033,4811],{"class":138},[128,9035,9036,9038,9040,9042,9044,9046,9048],{"class":130,"line":230},[128,9037,5162],{"class":138},[128,9039,4789],{"class":134},[128,9041,8965],{"class":176},[128,9043,4789],{"class":134},[128,9045,8800],{"class":138},[128,9047,4789],{"class":134},[128,9049,4811],{"class":138},[128,9051,9052,9054,9056,9058,9060,9062,9064],{"class":130,"line":235},[128,9053,5162],{"class":138},[128,9055,4789],{"class":134},[128,9057,8982],{"class":176},[128,9059,4789],{"class":134},[128,9061,8987],{"class":138},[128,9063,4789],{"class":134},[128,9065,4811],{"class":138},[128,9067,9068,9070,9072],{"class":130,"line":244},[128,9069,587],{"class":134},[128,9071,3811],{"class":138},[128,9073,9074],{"class":3814},"\u002F\u002F或者不写\n",[128,9076,9077],{"class":130,"line":287},[128,9078,2694],{"class":138},[128,9080,9081,9083,9085],{"class":130,"line":301},[128,9082,3763],{"class":134},[128,9084,1575],{"class":199},[128,9086,5563],{"class":138},[128,9088,9089],{"class":130,"line":310},[128,9090,5157],{"class":138},[128,9092,9093,9095,9097,9099,9101],{"class":130,"line":323},[128,9094,5572],{"class":134},[128,9096,5010],{"class":138},[128,9098,270],{"class":134},[128,9100,4196],{"class":166},[128,9102,4905],{"class":138},[128,9104,9105,9107,9109,9111,9113],{"class":130,"line":330},[128,9106,5572],{"class":134},[128,9108,6406],{"class":138},[128,9110,270],{"class":134},[128,9112,4449],{"class":166},[128,9114,4905],{"class":138},[128,9116,9117,9120],{"class":130,"line":335},[128,9118,9119],{"class":199},"    swap",[128,9121,8895],{"class":138},[128,9123,9124],{"class":130,"line":340},[128,9125,2694],{"class":138},[14,9127,9129],{"id":9128},"_24函数的常见形式","2.4函数的常见形式",[26,9131,9132],{},[29,9133,9134],{},"无参无返",[106,9136,9138],{"className":3749,"code":9137,"language":3751,"meta":112,"style":112},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[114,9139,9140,9149,9153,9166,9170,9178,9182,9187,9195],{"__ignoreMap":112},[128,9141,9142,9144,9147],{"class":130,"line":131},[128,9143,8922],{"class":134},[128,9145,9146],{"class":199}," test01",[128,9148,5563],{"class":138},[128,9150,9151],{"class":130,"line":142},[128,9152,5157],{"class":138},[128,9154,9155,9157,9159,9162,9164],{"class":130,"line":156},[128,9156,5162],{"class":138},[128,9158,4789],{"class":134},[128,9160,9161],{"class":176},"\"你好\"",[128,9163,4789],{"class":134},[128,9165,4811],{"class":138},[128,9167,9168],{"class":130,"line":163},[128,9169,2694],{"class":138},[128,9171,9172,9174,9176],{"class":130,"line":183},[128,9173,3763],{"class":134},[128,9175,1575],{"class":199},[128,9177,5563],{"class":138},[128,9179,9180],{"class":130,"line":188},[128,9181,5157],{"class":138},[128,9183,9184],{"class":130,"line":193},[128,9185,9186],{"class":3814},"    \u002F\u002F函数调用\n",[128,9188,9189,9192],{"class":130,"line":206},[128,9190,9191],{"class":199},"    test01",[128,9193,9194],{"class":138},"();\n",[128,9196,9197],{"class":130,"line":221},[128,9198,2694],{"class":138},[26,9200,9201],{"start":142},[29,9202,9203],{},"有参无返",[106,9205,9207],{"className":3749,"code":9206,"language":3751,"meta":112,"style":112},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[114,9208,9209,9224,9228,9240,9244,9252,9256,9267],{"__ignoreMap":112},[128,9210,9211,9213,9216,9218,9220,9222],{"class":130,"line":131},[128,9212,8922],{"class":134},[128,9214,9215],{"class":199}," test02",[128,9217,253],{"class":138},[128,9219,3763],{"class":134},[128,9221,5010],{"class":266},[128,9223,180],{"class":138},[128,9225,9226],{"class":130,"line":142},[128,9227,5157],{"class":138},[128,9229,9230,9232,9234,9236,9238],{"class":130,"line":156},[128,9231,5162],{"class":138},[128,9233,4789],{"class":134},[128,9235,9161],{"class":176},[128,9237,4789],{"class":134},[128,9239,4811],{"class":138},[128,9241,9242],{"class":130,"line":163},[128,9243,2694],{"class":138},[128,9245,9246,9248,9250],{"class":130,"line":183},[128,9247,3763],{"class":134},[128,9249,1575],{"class":199},[128,9251,5563],{"class":138},[128,9253,9254],{"class":130,"line":188},[128,9255,5157],{"class":138},[128,9257,9258,9261,9263,9265],{"class":130,"line":193},[128,9259,9260],{"class":199},"    test02",[128,9262,253],{"class":138},[128,9264,4061],{"class":166},[128,9266,6292],{"class":138},[128,9268,9269],{"class":130,"line":206},[128,9270,2694],{"class":138},[26,9272,9273],{"start":156},[29,9274,9275],{},"无参有返",[106,9277,9279],{"className":3749,"code":9278,"language":3751,"meta":112,"style":112},"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",[114,9280,9281,9290,9294,9306,9315,9319,9327,9331,9344,9363],{"__ignoreMap":112},[128,9282,9283,9285,9288],{"class":130,"line":131},[128,9284,3763],{"class":134},[128,9286,9287],{"class":199}," test03",[128,9289,5563],{"class":138},[128,9291,9292],{"class":130,"line":142},[128,9293,5157],{"class":138},[128,9295,9296,9298,9300,9302,9304],{"class":130,"line":156},[128,9297,5162],{"class":138},[128,9299,4789],{"class":134},[128,9301,9161],{"class":176},[128,9303,4789],{"class":134},[128,9305,4811],{"class":138},[128,9307,9308,9310,9313],{"class":130,"line":163},[128,9309,587],{"class":134},[128,9311,9312],{"class":166}," 100",[128,9314,4905],{"class":138},[128,9316,9317],{"class":130,"line":183},[128,9318,2694],{"class":138},[128,9320,9321,9323,9325],{"class":130,"line":188},[128,9322,3763],{"class":134},[128,9324,1575],{"class":199},[128,9326,5563],{"class":138},[128,9328,9329],{"class":130,"line":193},[128,9330,5157],{"class":138},[128,9332,9333,9335,9337,9339,9342],{"class":130,"line":206},[128,9334,5572],{"class":134},[128,9336,8775],{"class":138},[128,9338,270],{"class":134},[128,9340,9341],{"class":199},"test03",[128,9343,9194],{"class":138},[128,9345,9346,9348,9350,9352,9354,9356,9358,9360],{"class":130,"line":221},[128,9347,5162],{"class":138},[128,9349,4789],{"class":134},[128,9351,8965],{"class":176},[128,9353,4789],{"class":134},[128,9355,8800],{"class":138},[128,9357,4789],{"class":134},[128,9359,4853],{"class":138},[128,9361,9362],{"class":3814}," \u002F\u002F100\n",[128,9364,9365],{"class":130,"line":230},[128,9366,2694],{"class":138},[19,9368,9369],{},"4.有参有返",[106,9371,9373],{"className":3749,"code":9372,"language":3751,"meta":112,"style":112},"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",[114,9374,9375,9390,9394,9407,9413,9417,9426,9430,9442,9456,9471],{"__ignoreMap":112},[128,9376,9377,9379,9382,9384,9386,9388],{"class":130,"line":131},[128,9378,3763],{"class":134},[128,9380,9381],{"class":199}," test04",[128,9383,253],{"class":138},[128,9385,3763],{"class":134},[128,9387,5010],{"class":266},[128,9389,180],{"class":138},[128,9391,9392],{"class":130,"line":142},[128,9393,5157],{"class":138},[128,9395,9396,9398,9400,9403,9405],{"class":130,"line":156},[128,9397,5162],{"class":138},[128,9399,4789],{"class":134},[128,9401,9402],{"class":176},"\"hello\"",[128,9404,4789],{"class":134},[128,9406,4811],{"class":138},[128,9408,9409,9411],{"class":130,"line":163},[128,9410,587],{"class":134},[128,9412,5044],{"class":138},[128,9414,9415],{"class":130,"line":183},[128,9416,2694],{"class":138},[128,9418,9419,9421,9424],{"class":130,"line":188},[128,9420,3763],{"class":134},[128,9422,9423],{"class":199}," mian",[128,9425,5563],{"class":138},[128,9427,9428],{"class":130,"line":193},[128,9429,5157],{"class":138},[128,9431,9432,9434,9436,9438,9440],{"class":130,"line":206},[128,9433,5572],{"class":134},[128,9435,6406],{"class":138},[128,9437,270],{"class":134},[128,9439,2592],{"class":166},[128,9441,4905],{"class":138},[128,9443,9444,9446,9448,9450,9453],{"class":130,"line":221},[128,9445,5572],{"class":134},[128,9447,6422],{"class":138},[128,9449,270],{"class":134},[128,9451,9452],{"class":199},"test04",[128,9454,9455],{"class":138},"(b);\n",[128,9457,9458,9460,9462,9464,9466,9468],{"class":130,"line":230},[128,9459,5162],{"class":138},[128,9461,4789],{"class":134},[128,9463,4038],{"class":138},[128,9465,4789],{"class":134},[128,9467,4853],{"class":138},[128,9469,9470],{"class":3814}," \u002F\u002F1\n",[128,9472,9473],{"class":130,"line":235},[128,9474,2694],{"class":138},[14,9476,9478],{"id":9477},"_25函数的声明","2.5函数的声明",[19,9480,9481],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,9483,9484,9485],{},"函数的",[3903,9486,9487],{},"声明可以多次，但是函数的定义只能有一次",[106,9489,9491],{"className":3749,"code":9490,"language":3751,"meta":112,"style":112},"\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",[114,9492,9493,9498,9503,9527,9536,9540,9552,9564,9580,9584,9604,9608,9627],{"__ignoreMap":112},[128,9494,9495],{"class":130,"line":131},[128,9496,9497],{"class":3814},"\u002F\u002F函数声明\n",[128,9499,9500],{"class":130,"line":142},[128,9501,9502],{"class":3814},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[128,9504,9505,9507,9509,9511,9513,9515,9517,9519,9521,9524],{"class":130,"line":156},[128,9506,3763],{"class":134},[128,9508,2577],{"class":199},[128,9510,253],{"class":138},[128,9512,3763],{"class":134},[128,9514,5010],{"class":266},[128,9516,4128],{"class":138},[128,9518,3763],{"class":134},[128,9520,6406],{"class":266},[128,9522,9523],{"class":138},");",[128,9525,9526],{"class":3814},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[128,9528,9529,9531,9533],{"class":130,"line":163},[128,9530,3763],{"class":134},[128,9532,1575],{"class":199},[128,9534,9535],{"class":138},"() \n",[128,9537,9538],{"class":130,"line":183},[128,9539,5157],{"class":138},[128,9541,9542,9544,9546,9548,9550],{"class":130,"line":188},[128,9543,5572],{"class":134},[128,9545,5010],{"class":138},[128,9547,270],{"class":134},[128,9549,4196],{"class":166},[128,9551,4905],{"class":138},[128,9553,9554,9556,9558,9560,9562],{"class":130,"line":193},[128,9555,5572],{"class":134},[128,9557,6406],{"class":138},[128,9559,270],{"class":134},[128,9561,4449],{"class":166},[128,9563,4905],{"class":138},[128,9565,9566,9568,9570,9573,9576,9578],{"class":130,"line":206},[128,9567,5162],{"class":138},[128,9569,4789],{"class":134},[128,9571,9572],{"class":199},"max",[128,9574,9575],{"class":138},"(a,b)",[128,9577,4789],{"class":134},[128,9579,4811],{"class":138},[128,9581,9582],{"class":130,"line":221},[128,9583,2694],{"class":138},[128,9585,9586,9588,9590,9592,9594,9596,9598,9600,9602],{"class":130,"line":230},[128,9587,3763],{"class":134},[128,9589,2577],{"class":199},[128,9591,253],{"class":138},[128,9593,3763],{"class":134},[128,9595,5010],{"class":266},[128,9597,4128],{"class":138},[128,9599,3763],{"class":134},[128,9601,6406],{"class":266},[128,9603,180],{"class":138},[128,9605,9606],{"class":130,"line":235},[128,9607,5157],{"class":138},[128,9609,9610,9612,9614,9616,9618,9620,9622,9624],{"class":130,"line":244},[128,9611,587],{"class":134},[128,9613,5010],{"class":138},[128,9615,4705],{"class":134},[128,9617,4013],{"class":138},[128,9619,4731],{"class":134},[128,9621,3989],{"class":138},[128,9623,4607],{"class":134},[128,9625,9626],{"class":138},"b;\n",[128,9628,9629],{"class":130,"line":287},[128,9630,2694],{"class":138},[14,9632,9634],{"id":9633},"_26函数的分文件编写","2.6函数的分文件编写",[19,9636,9637],{},"4个步骤：",[4752,9639,9640,9643,9646,9649],{},[29,9641,9642],{},"1.创建后缀名为.h的头文件",[29,9644,9645],{},"2.创建后缀名为.cpp的源文件",[29,9647,9648],{},"3.在头文件中写函数的定义",[29,9650,9651],{},"4.在源文件中写函数的定义\n示例：",[19,9653,9654],{},"头文件：swap.h",[106,9656,9658],{"className":3749,"code":9657,"language":3751,"meta":112,"style":112},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[114,9659,9660,9666,9676,9680],{"__ignoreMap":112},[128,9661,9662,9664],{"class":130,"line":131},[128,9663,5538],{"class":134},[128,9665,5541],{"class":176},[128,9667,9668,9670,9672,9674],{"class":130,"line":142},[128,9669,5546],{"class":134},[128,9671,5549],{"class":134},[128,9673,5552],{"class":199},[128,9675,4905],{"class":138},[128,9677,9678],{"class":130,"line":156},[128,9679,9497],{"class":3814},[128,9681,9682,9684,9686,9688,9690,9692,9694,9696,9698],{"class":130,"line":163},[128,9683,8922],{"class":134},[128,9685,8925],{"class":199},[128,9687,253],{"class":138},[128,9689,3763],{"class":134},[128,9691,5010],{"class":266},[128,9693,4128],{"class":138},[128,9695,3763],{"class":134},[128,9697,6406],{"class":266},[128,9699,6292],{"class":138},[19,9701,9702],{},"源文件：swap.cpp",[106,9704,9706],{"className":3749,"code":9705,"language":3751,"meta":112,"style":112},"#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",[114,9707,9708,9715,9720,9740,9744,9755,9764,9773,9790,9807],{"__ignoreMap":112},[128,9709,9710,9712],{"class":130,"line":131},[128,9711,5538],{"class":134},[128,9713,9714],{"class":176}," \"swap.h\"\n",[128,9716,9717],{"class":130,"line":142},[128,9718,9719],{"class":3814},"\u002F\u002F函数的定义\n",[128,9721,9722,9724,9726,9728,9730,9732,9734,9736,9738],{"class":130,"line":156},[128,9723,8922],{"class":134},[128,9725,8925],{"class":199},[128,9727,253],{"class":138},[128,9729,3763],{"class":134},[128,9731,5010],{"class":266},[128,9733,4128],{"class":138},[128,9735,3763],{"class":134},[128,9737,6406],{"class":266},[128,9739,180],{"class":138},[128,9741,9742],{"class":130,"line":163},[128,9743,5157],{"class":138},[128,9745,9746,9748,9750,9752],{"class":130,"line":183},[128,9747,5572],{"class":134},[128,9749,7821],{"class":138},[128,9751,270],{"class":134},[128,9753,9754],{"class":138},"a;\n",[128,9756,9757,9760,9762],{"class":130,"line":188},[128,9758,9759],{"class":138},"    a",[128,9761,270],{"class":134},[128,9763,9626],{"class":138},[128,9765,9766,9769,9771],{"class":130,"line":193},[128,9767,9768],{"class":138},"    b",[128,9770,270],{"class":134},[128,9772,7846],{"class":138},[128,9774,9775,9777,9779,9782,9784,9786,9788],{"class":130,"line":206},[128,9776,5162],{"class":138},[128,9778,4789],{"class":134},[128,9780,9781],{"class":176},"\"a=\"",[128,9783,4789],{"class":134},[128,9785,3989],{"class":138},[128,9787,4789],{"class":134},[128,9789,4811],{"class":138},[128,9791,9792,9794,9796,9799,9801,9803,9805],{"class":130,"line":221},[128,9793,5162],{"class":138},[128,9795,4789],{"class":134},[128,9797,9798],{"class":176},"\"b=\"",[128,9800,4789],{"class":134},[128,9802,4013],{"class":138},[128,9804,4789],{"class":134},[128,9806,4811],{"class":138},[128,9808,9809],{"class":130,"line":230},[128,9810,2694],{"class":138},[3659,9812,9813],{},"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":112,"searchDepth":142,"depth":142,"links":9815},[9816,9817,9818,9819,9820,9821],{"id":8734,"depth":142,"text":8735},{"id":8819,"depth":142,"text":8820},{"id":8902,"depth":142,"text":8903},{"id":9128,"depth":142,"text":9129},{"id":9477,"depth":142,"text":9478},{"id":9633,"depth":142,"text":9634},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":8726,"description":112},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":9828,"title":9829,"body":9830,"description":9837,"extension":3687,"meta":11242,"navigation":159,"path":11243,"seo":11244,"stem":11245,"__hash__":11246},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":9831,"toc":11232},[9832,9835,9838,9842,10004,10008,10011,10014,10017,10020,10160,10164,10167,10170,10173,10238,10242,10247,10314,10317,10321,10324,10335,10340,10360,10363,10368,10387,10390,10394,10413,10416,10420,10655,10659,10662,10665,10668,10830,10833,10837,10840,10846,11229],[10,9833,9829],{"id":9834},"_3指针",[19,9836,9837],{},"通过指针保存一个地址，指针就是个地址",[14,9839,9841],{"id":9840},"_31定义指针","3.1定义指针",[106,9843,9845],{"className":3749,"code":9844,"language":3751,"meta":112,"style":112},"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",[114,9846,9847,9855,9859,9864,9876,9881,9889,9899,9917,9937,9941,9946,9951,9956,9970,9986,10000],{"__ignoreMap":112},[128,9848,9849,9851,9853],{"class":130,"line":131},[128,9850,3763],{"class":134},[128,9852,1575],{"class":199},[128,9854,5563],{"class":138},[128,9856,9857],{"class":130,"line":142},[128,9858,5157],{"class":138},[128,9860,9861],{"class":130,"line":156},[128,9862,9863],{"class":3814},"    \u002F\u002F1.定义指针\n",[128,9865,9866,9868,9870,9872,9874],{"class":130,"line":163},[128,9867,5572],{"class":134},[128,9869,5010],{"class":138},[128,9871,270],{"class":134},[128,9873,4196],{"class":166},[128,9875,4905],{"class":138},[128,9877,9878],{"class":130,"line":183},[128,9879,9880],{"class":3814},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[128,9882,9883,9886],{"class":130,"line":188},[128,9884,9885],{"class":134},"    int*",[128,9887,9888],{"class":138},"p;\n",[128,9890,9891,9894,9897],{"class":130,"line":193},[128,9892,9893],{"class":138},"    p",[128,9895,9896],{"class":134},"=&",[128,9898,9754],{"class":138},[128,9900,9901,9903,9905,9908,9911,9913,9915],{"class":130,"line":206},[128,9902,5162],{"class":138},[128,9904,4789],{"class":134},[128,9906,9907],{"class":176},"\"a的地址为：\"",[128,9909,9910],{"class":134},"\u003C\u003C&",[128,9912,3989],{"class":138},[128,9914,4789],{"class":134},[128,9916,4811],{"class":138},[128,9918,9919,9921,9923,9926,9928,9930,9932,9934],{"class":130,"line":221},[128,9920,5162],{"class":138},[128,9922,4789],{"class":134},[128,9924,9925],{"class":176},"\"指针p为：\"",[128,9927,4789],{"class":134},[128,9929,19],{"class":138},[128,9931,4789],{"class":134},[128,9933,4853],{"class":138},[128,9935,9936],{"class":3814},"\u002F\u002F指针p表示的就是a的地址\n",[128,9938,9939],{"class":130,"line":230},[128,9940,160],{"emptyLinePlaceholder":159},[128,9942,9943],{"class":130,"line":235},[128,9944,9945],{"class":3814},"    \u002F\u002F2.使用指针\n",[128,9947,9948],{"class":130,"line":244},[128,9949,9950],{"class":3814},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[128,9952,9953],{"class":130,"line":287},[128,9954,9955],{"class":3814},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[128,9957,9958,9961,9963,9965,9968],{"class":130,"line":301},[128,9959,9960],{"class":134},"    *",[128,9962,19],{"class":138},[128,9964,270],{"class":134},[128,9966,9967],{"class":166},"1000",[128,9969,4905],{"class":138},[128,9971,9972,9974,9977,9979,9981,9983],{"class":130,"line":310},[128,9973,5162],{"class":138},[128,9975,9976],{"class":134},"\u003C\u003C*",[128,9978,19],{"class":138},[128,9980,4789],{"class":134},[128,9982,4853],{"class":138},[128,9984,9985],{"class":3814},"\u002F\u002F1000\n",[128,9987,9988,9990,9992,9994,9996,9998],{"class":130,"line":323},[128,9989,5162],{"class":138},[128,9991,4789],{"class":134},[128,9993,3989],{"class":138},[128,9995,4789],{"class":134},[128,9997,4853],{"class":138},[128,9999,9985],{"class":3814},[128,10001,10002],{"class":130,"line":330},[128,10003,2694],{"class":138},[14,10005,10007],{"id":10006},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,10009,10010],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,10012,10013],{},"在32位操作系统下：占用4个字节空间",[19,10015,10016],{},"在64位操作系统下：占用8个字节空间",[19,10018,10019],{},"上方是不管啥数据类型的",[106,10021,10023],{"className":3749,"code":10022,"language":3751,"meta":112,"style":112},"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",[114,10024,10025,10033,10037,10042,10054,10059,10064,10069,10082,10104,10130,10156],{"__ignoreMap":112},[128,10026,10027,10029,10031],{"class":130,"line":131},[128,10028,3763],{"class":134},[128,10030,1575],{"class":199},[128,10032,5563],{"class":138},[128,10034,10035],{"class":130,"line":142},[128,10036,5157],{"class":138},[128,10038,10039],{"class":130,"line":156},[128,10040,10041],{"class":3814},"    \u002F\u002F指针所占内存空间\n",[128,10043,10044,10046,10048,10050,10052],{"class":130,"line":163},[128,10045,5572],{"class":134},[128,10047,5010],{"class":138},[128,10049,270],{"class":134},[128,10051,4196],{"class":166},[128,10053,4905],{"class":138},[128,10055,10056],{"class":130,"line":183},[128,10057,10058],{"class":3814},"    \u002F\u002Fint *p;\n",[128,10060,10061],{"class":130,"line":188},[128,10062,10063],{"class":3814},"    \u002F\u002Fp=&a;\n",[128,10065,10066],{"class":130,"line":193},[128,10067,10068],{"class":3814},"    \u002F\u002F上述可以写为以下：\n",[128,10070,10071,10073,10076,10078,10080],{"class":130,"line":206},[128,10072,5572],{"class":134},[128,10074,10075],{"class":134}," *",[128,10077,19],{"class":138},[128,10079,9896],{"class":134},[128,10081,9754],{"class":138},[128,10083,10084,10087,10089,10092,10094,10097,10099,10101],{"class":130,"line":221},[128,10085,10086],{"class":138},"    cout ",[128,10088,4789],{"class":134},[128,10090,10091],{"class":176},"\"sizeof(int *)\"",[128,10093,4984],{"class":134},[128,10095,10096],{"class":138},"(p)",[128,10098,4789],{"class":134},[128,10100,4853],{"class":138},[128,10102,10103],{"class":3814},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[128,10105,10106,10108,10110,10112,10114,10116,10118,10120,10122,10124,10127],{"class":130,"line":230},[128,10107,10086],{"class":138},[128,10109,4789],{"class":134},[128,10111,10091],{"class":176},[128,10113,4984],{"class":134},[128,10115,253],{"class":138},[128,10117,3763],{"class":134},[128,10119,10075],{"class":134},[128,10121,4179],{"class":138},[128,10123,4789],{"class":134},[128,10125,10126],{"class":138},"endl",[128,10128,10129],{"class":3814},"  \u002F\u002F4字节(32位的话)\n",[128,10131,10132,10134,10136,10139,10141,10143,10145,10147,10149,10151,10153],{"class":130,"line":235},[128,10133,10086],{"class":138},[128,10135,4789],{"class":134},[128,10137,10138],{"class":176},"\"sizeof(char *)\"",[128,10140,4984],{"class":134},[128,10142,253],{"class":138},[128,10144,3851],{"class":134},[128,10146,10075],{"class":134},[128,10148,4179],{"class":138},[128,10150,4789],{"class":134},[128,10152,4853],{"class":138},[128,10154,10155],{"class":3814}," \u002F\u002F4字节(32位的话)\n",[128,10157,10158],{"class":130,"line":244},[128,10159,2694],{"class":138},[14,10161,10163],{"id":10162},"_33空指针","3.3空指针",[19,10165,10166],{},"空指针：指针变量指向内存中编号为0的空间",[19,10168,10169],{},"用途：初始化指针变量",[19,10171,10172],{},"注意：空指针指向的内存是不可以访问的",[106,10174,10176],{"className":3749,"code":10175,"language":3751,"meta":112,"style":112},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[114,10177,10178,10186,10190,10195,10209,10214,10229,10234],{"__ignoreMap":112},[128,10179,10180,10182,10184],{"class":130,"line":131},[128,10181,3763],{"class":134},[128,10183,1575],{"class":199},[128,10185,5563],{"class":138},[128,10187,10188],{"class":130,"line":142},[128,10189,5157],{"class":138},[128,10191,10192],{"class":130,"line":156},[128,10193,10194],{"class":3814},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[128,10196,10197,10199,10201,10203,10205,10207],{"class":130,"line":163},[128,10198,5572],{"class":134},[128,10200,10075],{"class":134},[128,10202,19],{"class":138},[128,10204,270],{"class":134},[128,10206,5976],{"class":166},[128,10208,4905],{"class":138},[128,10210,10211],{"class":130,"line":183},[128,10212,10213],{"class":3814},"    \u002F\u002F2.空指针不能进行访问\n",[128,10215,10216,10218,10220,10222,10224,10226],{"class":130,"line":188},[128,10217,9960],{"class":134},[128,10219,19],{"class":138},[128,10221,270],{"class":134},[128,10223,4061],{"class":166},[128,10225,3811],{"class":138},[128,10227,10228],{"class":3814},"\u002F\u002F直接报错，压根不能访问\n",[128,10230,10231],{"class":130,"line":193},[128,10232,10233],{"class":3814},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[128,10235,10236],{"class":130,"line":206},[128,10237,2694],{"class":138},[14,10239,10241],{"id":10240},"_34野指针","3.4野指针",[19,10243,10244],{},[3903,10245,10246],{},"指针变量指向非法的内存空间",[106,10248,10250],{"className":3749,"code":10249,"language":3751,"meta":112,"style":112},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[114,10251,10252,10260,10264,10293,10298,10310],{"__ignoreMap":112},[128,10253,10254,10256,10258],{"class":130,"line":131},[128,10255,3763],{"class":134},[128,10257,1575],{"class":199},[128,10259,5563],{"class":138},[128,10261,10262],{"class":130,"line":142},[128,10263,5157],{"class":138},[128,10265,10266,10268,10270,10272,10274,10276,10278,10280,10282,10285,10288,10290],{"class":130,"line":156},[128,10267,5572],{"class":134},[128,10269,10075],{"class":134},[128,10271,19],{"class":138},[128,10273,270],{"class":134},[128,10275,253],{"class":138},[128,10277,3763],{"class":134},[128,10279,10075],{"class":134},[128,10281,4179],{"class":138},[128,10283,10284],{"class":134},"0x",[128,10286,10287],{"class":166},"1100",[128,10289,3811],{"class":138},[128,10291,10292],{"class":3814}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[128,10294,10295],{"class":130,"line":163},[128,10296,10297],{"class":3814},"    \u002F\u002F访问野指针报错\n",[128,10299,10300,10302,10304,10306,10308],{"class":130,"line":183},[128,10301,5162],{"class":138},[128,10303,9976],{"class":134},[128,10305,19],{"class":138},[128,10307,4789],{"class":134},[128,10309,4811],{"class":138},[128,10311,10312],{"class":130,"line":188},[128,10313,2694],{"class":138},[19,10315,10316],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,10318,10320],{"id":10319},"_35const修饰指针","3.5const修饰指针",[19,10322,10323],{},"三种情况：",[4752,10325,10326,10329,10332],{},[29,10327,10328],{},"const修饰指针 常量指针",[29,10330,10331],{},"const修饰常量 指针常量",[29,10333,10334],{},"const即修饰指针，又修饰常量",[26,10336,10337],{},[29,10338,10339],{},"常量指针",[106,10341,10343],{"className":3749,"code":10342,"language":3751,"meta":112,"style":112},"const int *p=&a;\n",[114,10344,10345],{"__ignoreMap":112},[128,10346,10347,10350,10352,10354,10356,10358],{"class":130,"line":131},[128,10348,10349],{"class":134},"const",[128,10351,638],{"class":134},[128,10353,10075],{"class":134},[128,10355,19],{"class":138},[128,10357,9896],{"class":134},[128,10359,9754],{"class":138},[19,10361,10362],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[26,10364,10365],{"start":142},[29,10366,10367],{},"指针常量",[106,10369,10371],{"className":3749,"code":10370,"language":3751,"meta":112,"style":112},"int *const p=&a;\n",[114,10372,10373],{"__ignoreMap":112},[128,10374,10375,10377,10380,10383,10385],{"class":130,"line":131},[128,10376,3763],{"class":134},[128,10378,10379],{"class":134}," *const",[128,10381,10382],{"class":138}," p",[128,10384,9896],{"class":134},[128,10386,9754],{"class":138},[19,10388,10389],{},"指针的指向不可以改，指针指向的值可以改",[26,10391,10392],{"start":156},[29,10393,10334],{},[106,10395,10397],{"className":3749,"code":10396,"language":3751,"meta":112,"style":112},"const int *const p=&a;\n",[114,10398,10399],{"__ignoreMap":112},[128,10400,10401,10403,10405,10407,10409,10411],{"class":130,"line":131},[128,10402,10349],{"class":134},[128,10404,638],{"class":134},[128,10406,10379],{"class":134},[128,10408,10382],{"class":138},[128,10410,9896],{"class":134},[128,10412,9754],{"class":138},[19,10414,10415],{},"指针的指向和指针指向的值都不可以改变",[14,10417,10419],{"id":10418},"_36指针和数组","3.6指针和数组",[106,10421,10423],{"className":3749,"code":10422,"language":3751,"meta":112,"style":112},"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",[114,10424,10425,10433,10437,10442,10496,10517,10533,10549,10560,10577,10582,10596,10622,10626,10638,10647,10651],{"__ignoreMap":112},[128,10426,10427,10429,10431],{"class":130,"line":131},[128,10428,3763],{"class":134},[128,10430,1575],{"class":199},[128,10432,5563],{"class":138},[128,10434,10435],{"class":130,"line":142},[128,10436,5157],{"class":138},[128,10438,10439],{"class":130,"line":156},[128,10440,10441],{"class":3814},"    \u002F\u002F利用指针访问数组中的元素\n",[128,10443,10444,10446,10448,10450,10452,10454,10456,10458,10460,10462,10464,10466,10468,10470,10472,10474,10476,10478,10480,10482,10484,10486,10488,10490,10492,10494],{"class":130,"line":163},[128,10445,5572],{"class":134},[128,10447,7529],{"class":138},[128,10449,4196],{"class":166},[128,10451,1388],{"class":138},[128,10453,270],{"class":134},[128,10455,1379],{"class":138},[128,10457,2592],{"class":166},[128,10459,4128],{"class":138},[128,10461,409],{"class":166},[128,10463,4128],{"class":138},[128,10465,3827],{"class":166},[128,10467,4128],{"class":138},[128,10469,4043],{"class":166},[128,10471,4128],{"class":138},[128,10473,4069],{"class":166},[128,10475,4128],{"class":138},[128,10477,4094],{"class":166},[128,10479,4128],{"class":138},[128,10481,4119],{"class":166},[128,10483,4128],{"class":138},[128,10485,4145],{"class":166},[128,10487,4128],{"class":138},[128,10489,4170],{"class":166},[128,10491,4128],{"class":138},[128,10493,4196],{"class":166},[128,10495,7562],{"class":138},[128,10497,10498,10500,10502,10505,10507,10509,10511,10513,10515],{"class":130,"line":183},[128,10499,5162],{"class":138},[128,10501,4789],{"class":134},[128,10503,10504],{"class":176},"\"数组的第一个元素为：\"",[128,10506,4789],{"class":134},[128,10508,7473],{"class":138},[128,10510,2452],{"class":166},[128,10512,1388],{"class":138},[128,10514,4789],{"class":134},[128,10516,4811],{"class":138},[128,10518,10519,10521,10523,10525,10527,10530],{"class":130,"line":188},[128,10520,5572],{"class":134},[128,10522,10075],{"class":134},[128,10524,19],{"class":138},[128,10526,270],{"class":134},[128,10528,10529],{"class":138},"arr;",[128,10531,10532],{"class":3814},"\u002F\u002F注意数才要加取地址符号&\n",[128,10534,10535,10537,10539,10541,10543,10545,10547],{"class":130,"line":193},[128,10536,5162],{"class":138},[128,10538,4789],{"class":134},[128,10540,10504],{"class":176},[128,10542,9976],{"class":134},[128,10544,19],{"class":138},[128,10546,4789],{"class":134},[128,10548,4811],{"class":138},[128,10550,10551,10553,10555,10557],{"class":130,"line":206},[128,10552,9893],{"class":138},[128,10554,5877],{"class":134},[128,10556,3811],{"class":138},[128,10558,10559],{"class":3814}," \u002F\u002F让指针向后偏移4个字节\n",[128,10561,10562,10564,10566,10569,10571,10573,10575],{"class":130,"line":221},[128,10563,5162],{"class":138},[128,10565,4789],{"class":134},[128,10567,10568],{"class":176},"\"数组的第二个元素为：\"",[128,10570,9976],{"class":134},[128,10572,19],{"class":138},[128,10574,4789],{"class":134},[128,10576,4811],{"class":138},[128,10578,10579],{"class":130,"line":230},[128,10580,10581],{"class":3814},"    \u002F\u002F利用指针遍历数组\n",[128,10583,10584,10586,10588,10591,10593],{"class":130,"line":235},[128,10585,5572],{"class":134},[128,10587,10075],{"class":134},[128,10589,10590],{"class":138},"p2",[128,10592,270],{"class":134},[128,10594,10595],{"class":138},"arr;\n",[128,10597,10598,10600,10602,10604,10606,10608,10610,10612,10614,10616,10618,10620],{"class":130,"line":244},[128,10599,543],{"class":134},[128,10601,5260],{"class":138},[128,10603,3763],{"class":134},[128,10605,6603],{"class":138},[128,10607,270],{"class":134},[128,10609,2452],{"class":166},[128,10611,6610],{"class":138},[128,10613,4657],{"class":134},[128,10615,4196],{"class":166},[128,10617,6610],{"class":138},[128,10619,5877],{"class":134},[128,10621,180],{"class":138},[128,10623,10624],{"class":130,"line":287},[128,10625,5617],{"class":138},[128,10627,10628,10630,10632,10634,10636],{"class":130,"line":301},[128,10629,7019],{"class":138},[128,10631,9976],{"class":134},[128,10633,10590],{"class":138},[128,10635,4789],{"class":134},[128,10637,4811],{"class":138},[128,10639,10640,10643,10645],{"class":130,"line":310},[128,10641,10642],{"class":138},"        p2",[128,10644,5877],{"class":134},[128,10646,4905],{"class":138},[128,10648,10649],{"class":130,"line":323},[128,10650,5773],{"class":138},[128,10652,10653],{"class":130,"line":330},[128,10654,2694],{"class":138},[14,10656,10658],{"id":10657},"_37指针和函数","3.7指针和函数",[19,10660,10661],{},"利用指针做函数参数，可以修改实参的值",[19,10663,10664],{},"值传递：只改变形参，不改变实参",[19,10666,10667],{},"地址传递：",[106,10669,10671],{"className":3749,"code":10670,"language":3751,"meta":112,"style":112},"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",[114,10672,10673,10698,10702,10714,10725,10735,10739,10747,10751,10763,10775,10780,10796,10811,10826],{"__ignoreMap":112},[128,10674,10675,10677,10679,10681,10683,10685,10688,10690,10692,10694,10696],{"class":130,"line":131},[128,10676,8922],{"class":134},[128,10678,8925],{"class":199},[128,10680,253],{"class":138},[128,10682,3763],{"class":134},[128,10684,10075],{"class":134},[128,10686,10687],{"class":266},"p1",[128,10689,4128],{"class":138},[128,10691,3763],{"class":134},[128,10693,10075],{"class":134},[128,10695,10590],{"class":266},[128,10697,180],{"class":138},[128,10699,10700],{"class":130,"line":142},[128,10701,5157],{"class":138},[128,10703,10704,10706,10708,10711],{"class":130,"line":156},[128,10705,5572],{"class":134},[128,10707,7821],{"class":138},[128,10709,10710],{"class":134},"=*",[128,10712,10713],{"class":138},"p1;\n",[128,10715,10716,10718,10720,10722],{"class":130,"line":163},[128,10717,9960],{"class":134},[128,10719,10687],{"class":138},[128,10721,10710],{"class":134},[128,10723,10724],{"class":138},"p2;\n",[128,10726,10727,10729,10731,10733],{"class":130,"line":183},[128,10728,9960],{"class":134},[128,10730,10590],{"class":138},[128,10732,270],{"class":134},[128,10734,7846],{"class":138},[128,10736,10737],{"class":130,"line":188},[128,10738,2694],{"class":138},[128,10740,10741,10743,10745],{"class":130,"line":193},[128,10742,3763],{"class":134},[128,10744,1575],{"class":199},[128,10746,5563],{"class":138},[128,10748,10749],{"class":130,"line":206},[128,10750,5157],{"class":138},[128,10752,10753,10755,10757,10759,10761],{"class":130,"line":221},[128,10754,5572],{"class":134},[128,10756,5010],{"class":138},[128,10758,270],{"class":134},[128,10760,4196],{"class":166},[128,10762,4905],{"class":138},[128,10764,10765,10767,10769,10771,10773],{"class":130,"line":230},[128,10766,5572],{"class":134},[128,10768,6406],{"class":138},[128,10770,270],{"class":134},[128,10772,4449],{"class":166},[128,10774,4905],{"class":138},[128,10776,10777],{"class":130,"line":235},[128,10778,10779],{"class":3814},"    \u002F\u002F地址传递\n",[128,10781,10782,10784,10786,10788,10791,10793],{"class":130,"line":244},[128,10783,9119],{"class":199},[128,10785,253],{"class":138},[128,10787,4103],{"class":134},[128,10789,10790],{"class":138},"a,",[128,10792,4103],{"class":134},[128,10794,10795],{"class":138},"b);\n",[128,10797,10798,10800,10802,10804,10806,10808],{"class":130,"line":287},[128,10799,5162],{"class":138},[128,10801,4789],{"class":134},[128,10803,3989],{"class":138},[128,10805,4789],{"class":134},[128,10807,4853],{"class":138},[128,10809,10810],{"class":3814},"\u002F\u002F20\n",[128,10812,10813,10815,10817,10819,10821,10823],{"class":130,"line":301},[128,10814,5162],{"class":138},[128,10816,4789],{"class":134},[128,10818,4013],{"class":138},[128,10820,4789],{"class":134},[128,10822,4853],{"class":138},[128,10824,10825],{"class":3814},"\u002F\u002F10\n",[128,10827,10828],{"class":130,"line":310},[128,10829,2694],{"class":138},[19,10831,10832],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,10834,10836],{"id":10835},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,10838,10839],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,10841,10842,10843,10845],{},"例如数组：int arr",[128,10844,4196],{},"={4,3,6,9,1,2,10,8,7,5}",[106,10847,10849],{"className":3749,"code":10848,"language":3751,"meta":112,"style":112},"#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",[114,10850,10851,10857,10867,10891,10895,10926,10930,10964,10968,10986,10990,11001,11016,11031,11035,11039,11043,11047,11051,11059,11063,11068,11122,11134,11146,11151,11159,11163,11168,11193,11197,11212,11221,11225],{"__ignoreMap":112},[128,10852,10853,10855],{"class":130,"line":131},[128,10854,5538],{"class":134},[128,10856,5541],{"class":176},[128,10858,10859,10861,10863,10865],{"class":130,"line":142},[128,10860,5546],{"class":134},[128,10862,5549],{"class":134},[128,10864,5552],{"class":199},[128,10866,4905],{"class":138},[128,10868,10869,10871,10874,10876,10878,10880,10882,10884,10886,10889],{"class":130,"line":156},[128,10870,8922],{"class":134},[128,10872,10873],{"class":199}," bubbleSort",[128,10875,253],{"class":138},[128,10877,3763],{"class":134},[128,10879,10075],{"class":134},[128,10881,19],{"class":266},[128,10883,4128],{"class":138},[128,10885,3763],{"class":134},[128,10887,10888],{"class":266}," len",[128,10890,180],{"class":138},[128,10892,10893],{"class":130,"line":163},[128,10894,5157],{"class":138},[128,10896,10897,10899,10901,10903,10905,10907,10909,10911,10913,10916,10918,10920,10922,10924],{"class":130,"line":183},[128,10898,543],{"class":134},[128,10900,253],{"class":138},[128,10902,3763],{"class":134},[128,10904,6603],{"class":138},[128,10906,270],{"class":134},[128,10908,2452],{"class":166},[128,10910,6610],{"class":138},[128,10912,4657],{"class":134},[128,10914,10915],{"class":138},"len",[128,10917,4281],{"class":134},[128,10919,2592],{"class":166},[128,10921,6610],{"class":138},[128,10923,5877],{"class":134},[128,10925,180],{"class":138},[128,10927,10928],{"class":130,"line":188},[128,10929,5617],{"class":138},[128,10931,10932,10934,10936,10938,10940,10942,10944,10946,10948,10950,10952,10954,10956,10958,10960,10962],{"class":130,"line":193},[128,10933,2141],{"class":134},[128,10935,253],{"class":138},[128,10937,3763],{"class":134},[128,10939,6978],{"class":138},[128,10941,270],{"class":134},[128,10943,2452],{"class":166},[128,10945,6985],{"class":138},[128,10947,4657],{"class":134},[128,10949,10915],{"class":138},[128,10951,4281],{"class":134},[128,10953,4191],{"class":138},[128,10955,4281],{"class":134},[128,10957,2592],{"class":166},[128,10959,6985],{"class":138},[128,10961,5877],{"class":134},[128,10963,180],{"class":138},[128,10965,10966],{"class":130,"line":206},[128,10967,6092],{"class":138},[128,10969,10970,10972,10975,10977,10980,10982,10984],{"class":130,"line":221},[128,10971,2156],{"class":134},[128,10973,10974],{"class":138},"(p[j]",[128,10976,4705],{"class":134},[128,10978,10979],{"class":138},"p[j",[128,10981,2457],{"class":134},[128,10983,2592],{"class":166},[128,10985,2595],{"class":138},[128,10987,10988],{"class":130,"line":230},[128,10989,8225],{"class":138},[128,10991,10992,10994,10996,10998],{"class":130,"line":235},[128,10993,8230],{"class":134},[128,10995,7821],{"class":138},[128,10997,270],{"class":134},[128,10999,11000],{"class":138},"p[j];\n",[128,11002,11003,11006,11008,11010,11012,11014],{"class":130,"line":244},[128,11004,11005],{"class":138},"                p[j]",[128,11007,270],{"class":134},[128,11009,10979],{"class":138},[128,11011,2457],{"class":134},[128,11013,2592],{"class":166},[128,11015,8253],{"class":138},[128,11017,11018,11021,11023,11025,11027,11029],{"class":130,"line":287},[128,11019,11020],{"class":138},"                p[j",[128,11022,2457],{"class":134},[128,11024,2592],{"class":166},[128,11026,1388],{"class":138},[128,11028,270],{"class":134},[128,11030,7846],{"class":138},[128,11032,11033],{"class":130,"line":301},[128,11034,8273],{"class":138},[128,11036,11037],{"class":130,"line":310},[128,11038,2014],{"class":138},[128,11040,11041],{"class":130,"line":323},[128,11042,5773],{"class":138},[128,11044,11045],{"class":130,"line":330},[128,11046,2694],{"class":138},[128,11048,11049],{"class":130,"line":335},[128,11050,160],{"emptyLinePlaceholder":159},[128,11052,11053,11055,11057],{"class":130,"line":340},[128,11054,3763],{"class":134},[128,11056,1575],{"class":199},[128,11058,5563],{"class":138},[128,11060,11061],{"class":130,"line":351},[128,11062,5157],{"class":138},[128,11064,11065],{"class":130,"line":384},[128,11066,11067],{"class":3814},"    \u002F\u002F 1.创建数组\n",[128,11069,11070,11072,11074,11076,11078,11080,11082,11084,11086,11088,11090,11092,11094,11096,11098,11100,11102,11104,11106,11108,11110,11112,11114,11116,11118,11120],{"class":130,"line":414},[128,11071,5572],{"class":134},[128,11073,7529],{"class":138},[128,11075,4196],{"class":166},[128,11077,1388],{"class":138},[128,11079,270],{"class":134},[128,11081,1379],{"class":138},[128,11083,4043],{"class":166},[128,11085,4128],{"class":138},[128,11087,3827],{"class":166},[128,11089,4128],{"class":138},[128,11091,4094],{"class":166},[128,11093,4128],{"class":138},[128,11095,4170],{"class":166},[128,11097,4128],{"class":138},[128,11099,2592],{"class":166},[128,11101,4128],{"class":138},[128,11103,409],{"class":166},[128,11105,4128],{"class":138},[128,11107,4196],{"class":166},[128,11109,4128],{"class":138},[128,11111,4145],{"class":166},[128,11113,4128],{"class":138},[128,11115,4119],{"class":166},[128,11117,4128],{"class":138},[128,11119,4069],{"class":166},[128,11121,7562],{"class":138},[128,11123,11124,11126,11128,11130,11132],{"class":130,"line":419},[128,11125,5572],{"class":134},[128,11127,10888],{"class":138},[128,11129,270],{"class":134},[128,11131,4196],{"class":166},[128,11133,4905],{"class":138},[128,11135,11136,11138,11140,11142,11144],{"class":130,"line":424},[128,11137,5572],{"class":134},[128,11139,10075],{"class":134},[128,11141,19],{"class":138},[128,11143,270],{"class":134},[128,11145,10595],{"class":138},[128,11147,11148],{"class":130,"line":434},[128,11149,11150],{"class":3814},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[128,11152,11153,11156],{"class":130,"line":447},[128,11154,11155],{"class":199},"    bubbleSort",[128,11157,11158],{"class":138},"(p,len);\n",[128,11160,11161],{"class":130,"line":459},[128,11162,160],{"emptyLinePlaceholder":159},[128,11164,11165],{"class":130,"line":471},[128,11166,11167],{"class":3814},"    \u002F\u002F 3.打印排序后的数组\n",[128,11169,11170,11172,11174,11176,11178,11180,11182,11184,11186,11189,11191],{"class":130,"line":483},[128,11171,543],{"class":134},[128,11173,5260],{"class":138},[128,11175,3763],{"class":134},[128,11177,6603],{"class":138},[128,11179,270],{"class":134},[128,11181,2452],{"class":166},[128,11183,6783],{"class":138},[128,11185,4657],{"class":134},[128,11187,11188],{"class":138},"len; i",[128,11190,5877],{"class":134},[128,11192,180],{"class":138},[128,11194,11195],{"class":130,"line":495},[128,11196,5617],{"class":138},[128,11198,11199,11201,11203,11205,11207,11210],{"class":130,"line":507},[128,11200,7019],{"class":138},[128,11202,9976],{"class":134},[128,11204,19],{"class":138},[128,11206,4789],{"class":134},[128,11208,11209],{"class":176},"\"\"",[128,11211,4905],{"class":138},[128,11213,11214,11217,11219],{"class":130,"line":519},[128,11215,11216],{"class":138},"        p",[128,11218,5877],{"class":134},[128,11220,4905],{"class":138},[128,11222,11223],{"class":130,"line":524},[128,11224,5773],{"class":138},[128,11226,11227],{"class":130,"line":529},[128,11228,2694],{"class":138},[3659,11230,11231],{},"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":112,"searchDepth":142,"depth":142,"links":11233},[11234,11235,11236,11237,11238,11239,11240,11241],{"id":9840,"depth":142,"text":9841},{"id":10006,"depth":142,"text":10007},{"id":10162,"depth":142,"text":10163},{"id":10240,"depth":142,"text":10241},{"id":10319,"depth":142,"text":10320},{"id":10418,"depth":142,"text":10419},{"id":10657,"depth":142,"text":10658},{"id":10835,"depth":142,"text":10836},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":9829,"description":9837},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":11248,"title":11249,"body":11250,"description":11257,"extension":3687,"meta":14201,"navigation":159,"path":14202,"seo":14203,"stem":14204,"__hash__":14205},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":11251,"toc":14192},[11252,11255,11258,11262,11265,11268,11279,11606,11609,11613,11616,11623,11878,11882,11885,11888,12043,12047,12050,12053,12259,12263,12266,12569,12572,12580,12584,12587,12738,12740,12751,12808,12812,12817,13455,13463,13466,13560,13563,14183,14189],[10,11253,11249],{"id":11254},"_4结构体",[19,11256,11257],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,11259,11261],{"id":11260},"_41结构体定义与使用","4.1结构体定义与使用",[19,11263,11264],{},"语法：struct 结构体名 {结构体成员列表}；",[19,11266,11267],{},"通过结构体创建变量的方式：",[4752,11269,11270,11273,11276],{},[29,11271,11272],{},"struct 结构体名 变量名",[29,11274,11275],{},"struct 结构体名 变量名={成员1值，成员2值...}",[29,11277,11278],{},"定义结构体时顺便创建变量",[106,11280,11282],{"className":3749,"code":11281,"language":3751,"meta":112,"style":112},"#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",[114,11283,11284,11290,11300,11307,11312,11320,11324,11329,11333,11338,11343,11348,11355,11360,11367,11371,11378,11382,11386,11390,11394,11398,11402,11408,11412,11418,11426,11434,11438,11443,11448,11458,11463,11475,11486,11497,11502,11525,11529,11534,11560,11564,11569,11580,11591,11602],{"__ignoreMap":112},[128,11285,11286,11288],{"class":130,"line":131},[128,11287,5538],{"class":134},[128,11289,5541],{"class":176},[128,11291,11292,11294,11296,11298],{"class":130,"line":142},[128,11293,5546],{"class":134},[128,11295,5549],{"class":134},[128,11297,5552],{"class":199},[128,11299,4905],{"class":138},[128,11301,11302,11304],{"class":130,"line":156},[128,11303,5538],{"class":134},[128,11305,11306],{"class":176},"\u003Cstring>\n",[128,11308,11309],{"class":130,"line":163},[128,11310,11311],{"class":3814},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[128,11313,11314,11317],{"class":130,"line":183},[128,11315,11316],{"class":134},"struct",[128,11318,11319],{"class":199}," Student\n",[128,11321,11322],{"class":130,"line":188},[128,11323,5157],{"class":138},[128,11325,11326],{"class":130,"line":193},[128,11327,11328],{"class":3814},"    \u002F\u002F成员列表\n",[128,11330,11331],{"class":130,"line":206},[128,11332,160],{"emptyLinePlaceholder":159},[128,11334,11335],{"class":130,"line":221},[128,11336,11337],{"class":3814},"    \u002F\u002F姓名\n",[128,11339,11340],{"class":130,"line":230},[128,11341,11342],{"class":138},"    string name;\n",[128,11344,11345],{"class":130,"line":235},[128,11346,11347],{"class":3814},"    \u002F\u002F年龄\n",[128,11349,11350,11352],{"class":130,"line":244},[128,11351,5572],{"class":134},[128,11353,11354],{"class":138}," age;\n",[128,11356,11357],{"class":130,"line":287},[128,11358,11359],{"class":3814},"    \u002F\u002F分数\n",[128,11361,11362,11364],{"class":130,"line":301},[128,11363,5572],{"class":134},[128,11365,11366],{"class":138}," score;\n",[128,11368,11369],{"class":130,"line":310},[128,11370,7562],{"class":138},[128,11372,11373,11375],{"class":130,"line":323},[128,11374,11316],{"class":134},[128,11376,11377],{"class":199}," School\n",[128,11379,11380],{"class":130,"line":330},[128,11381,5157],{"class":138},[128,11383,11384],{"class":130,"line":335},[128,11385,11328],{"class":3814},[128,11387,11388],{"class":130,"line":340},[128,11389,160],{"emptyLinePlaceholder":159},[128,11391,11392],{"class":130,"line":351},[128,11393,11337],{"class":3814},[128,11395,11396],{"class":130,"line":384},[128,11397,11342],{"class":138},[128,11399,11400],{"class":130,"line":414},[128,11401,11347],{"class":3814},[128,11403,11404,11406],{"class":130,"line":419},[128,11405,5572],{"class":134},[128,11407,11354],{"class":138},[128,11409,11410],{"class":130,"line":424},[128,11411,11359],{"class":3814},[128,11413,11414,11416],{"class":130,"line":434},[128,11415,5572],{"class":134},[128,11417,11366],{"class":138},[128,11419,11420,11423],{"class":130,"line":447},[128,11421,11422],{"class":138},"} s3;",[128,11424,11425],{"class":3814}," \u002F\u002F创建结构体时就创建了变量\n",[128,11427,11428,11430,11432],{"class":130,"line":459},[128,11429,3763],{"class":134},[128,11431,1575],{"class":199},[128,11433,5563],{"class":138},[128,11435,11436],{"class":130,"line":471},[128,11437,5157],{"class":138},[128,11439,11440],{"class":130,"line":483},[128,11441,11442],{"class":3814},"    \u002F\u002F2.通过学生类型创建具体学生\n",[128,11444,11445],{"class":130,"line":495},[128,11446,11447],{"class":3814},"    \u002F\u002F2.1 struct Student s1;\n",[128,11449,11450,11453,11455],{"class":130,"line":507},[128,11451,11452],{"class":134},"    struct",[128,11454,1904],{"class":199},[128,11456,11457],{"class":138}," s1;\n",[128,11459,11460],{"class":130,"line":519},[128,11461,11462],{"class":3814},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[128,11464,11465,11468,11470,11473],{"class":130,"line":524},[128,11466,11467],{"class":138},"    s1.name",[128,11469,270],{"class":134},[128,11471,11472],{"class":176},"\"张三\"",[128,11474,4905],{"class":138},[128,11476,11477,11480,11482,11484],{"class":130,"line":529},[128,11478,11479],{"class":138},"    s1.age",[128,11481,270],{"class":134},[128,11483,4399],{"class":166},[128,11485,4905],{"class":138},[128,11487,11488,11491,11493,11495],{"class":130,"line":540},[128,11489,11490],{"class":138},"    s1.score",[128,11492,270],{"class":134},[128,11494,4004],{"class":166},[128,11496,4905],{"class":138},[128,11498,11499],{"class":130,"line":555},[128,11500,11501],{"class":3814},"    \u002F\u002F输出结果\n",[128,11503,11504,11506,11508,11511,11513,11516,11518,11521,11523],{"class":130,"line":576},[128,11505,5162],{"class":138},[128,11507,4789],{"class":134},[128,11509,11510],{"class":138},"s1.name",[128,11512,4789],{"class":134},[128,11514,11515],{"class":138},"s1.age",[128,11517,4789],{"class":134},[128,11519,11520],{"class":138},"s1.score",[128,11522,4789],{"class":134},[128,11524,4811],{"class":138},[128,11526,11527],{"class":130,"line":584},[128,11528,160],{"emptyLinePlaceholder":159},[128,11530,11531],{"class":130,"line":593},[128,11532,11533],{"class":3814},"    \u002F\u002F2.2 struct Student s2={...}\n",[128,11535,11536,11538,11540,11543,11545,11547,11550,11552,11554,11556,11558],{"class":130,"line":598},[128,11537,11452],{"class":134},[128,11539,1904],{"class":199},[128,11541,11542],{"class":138}," s2",[128,11544,270],{"class":134},[128,11546,1379],{"class":138},[128,11548,11549],{"class":176},"\"王五\"",[128,11551,4128],{"class":138},[128,11553,4399],{"class":166},[128,11555,4128],{"class":138},[128,11557,4004],{"class":166},[128,11559,7562],{"class":138},[128,11561,11562],{"class":130,"line":603},[128,11563,160],{"emptyLinePlaceholder":159},[128,11565,11566],{"class":130,"line":614},[128,11567,11568],{"class":3814},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[128,11570,11571,11574,11576,11578],{"class":130,"line":625},[128,11572,11573],{"class":138},"    s3.name",[128,11575,270],{"class":134},[128,11577,7246],{"class":176},[128,11579,4905],{"class":138},[128,11581,11582,11585,11587,11589],{"class":130,"line":633},[128,11583,11584],{"class":138},"    s3.age",[128,11586,270],{"class":134},[128,11588,4399],{"class":166},[128,11590,4905],{"class":138},[128,11592,11593,11596,11598,11600],{"class":130,"line":649},[128,11594,11595],{"class":138},"    s3.score",[128,11597,270],{"class":134},[128,11599,4449],{"class":166},[128,11601,4905],{"class":138},[128,11603,11604],{"class":130,"line":660},[128,11605,2694],{"class":138},[19,11607,11608],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,11610,11612],{"id":11611},"_42结构体数组","4.2结构体数组",[19,11614,11615],{},"将自定义的结构体放入到数组中方便维护",[19,11617,11618,11619,11622],{},"语法：struct 结构体名 数组名",[128,11620,11621],{},"元素个数","={ {}，{},...{} };",[106,11624,11626],{"className":3749,"code":11625,"language":3751,"meta":112,"style":112},"#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",[114,11627,11628,11634,11644,11650,11655,11661,11665,11669,11675,11681,11685,11689,11697,11701,11706,11721,11725,11741,11757,11761,11766,11782,11797,11812,11817,11843,11847,11870,11874],{"__ignoreMap":112},[128,11629,11630,11632],{"class":130,"line":131},[128,11631,5538],{"class":134},[128,11633,5541],{"class":176},[128,11635,11636,11638,11640,11642],{"class":130,"line":142},[128,11637,5546],{"class":134},[128,11639,5549],{"class":134},[128,11641,5552],{"class":199},[128,11643,4905],{"class":138},[128,11645,11646,11648],{"class":130,"line":156},[128,11647,5538],{"class":134},[128,11649,11306],{"class":176},[128,11651,11652],{"class":130,"line":163},[128,11653,11654],{"class":3814},"\u002F\u002F1.定义结构体\n",[128,11656,11657,11659],{"class":130,"line":183},[128,11658,11316],{"class":134},[128,11660,11319],{"class":199},[128,11662,11663],{"class":130,"line":188},[128,11664,5157],{"class":138},[128,11666,11667],{"class":130,"line":193},[128,11668,11342],{"class":138},[128,11670,11671,11673],{"class":130,"line":206},[128,11672,5572],{"class":134},[128,11674,11354],{"class":138},[128,11676,11677,11679],{"class":130,"line":221},[128,11678,5572],{"class":134},[128,11680,11366],{"class":138},[128,11682,11683],{"class":130,"line":230},[128,11684,160],{"emptyLinePlaceholder":159},[128,11686,11687],{"class":130,"line":235},[128,11688,7562],{"class":138},[128,11690,11691,11693,11695],{"class":130,"line":244},[128,11692,3763],{"class":134},[128,11694,1575],{"class":199},[128,11696,5563],{"class":138},[128,11698,11699],{"class":130,"line":287},[128,11700,5157],{"class":138},[128,11702,11703],{"class":130,"line":301},[128,11704,11705],{"class":3814},"    \u002F\u002F2.创建结构体数组\n",[128,11707,11708,11710,11712,11715,11717,11719],{"class":130,"line":310},[128,11709,11452],{"class":134},[128,11711,1904],{"class":199},[128,11713,11714],{"class":138}," stuArray[",[128,11716,409],{"class":166},[128,11718,1388],{"class":138},[128,11720,8471],{"class":134},[128,11722,11723],{"class":130,"line":323},[128,11724,5617],{"class":138},[128,11726,11727,11729,11731,11733,11735,11737,11739],{"class":130,"line":330},[128,11728,8480],{"class":138},[128,11730,11472],{"class":176},[128,11732,4128],{"class":138},[128,11734,4399],{"class":166},[128,11736,4128],{"class":138},[128,11738,4061],{"class":166},[128,11740,2282],{"class":138},[128,11742,11743,11745,11747,11749,11751,11753,11755],{"class":130,"line":335},[128,11744,8480],{"class":138},[128,11746,7246],{"class":176},[128,11748,4128],{"class":138},[128,11750,4324],{"class":166},[128,11752,4128],{"class":138},[128,11754,4324],{"class":166},[128,11756,2694],{"class":138},[128,11758,11759],{"class":130,"line":340},[128,11760,5773],{"class":138},[128,11762,11763],{"class":130,"line":351},[128,11764,11765],{"class":3814},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[128,11767,11768,11771,11773,11776,11778,11780],{"class":130,"line":384},[128,11769,11770],{"class":138},"    stuArray[",[128,11772,2592],{"class":166},[128,11774,11775],{"class":138},"].name",[128,11777,270],{"class":134},[128,11779,7269],{"class":176},[128,11781,4905],{"class":138},[128,11783,11784,11786,11788,11791,11793,11795],{"class":130,"line":414},[128,11785,11770],{"class":138},[128,11787,2592],{"class":166},[128,11789,11790],{"class":138},"].age",[128,11792,270],{"class":134},[128,11794,409],{"class":166},[128,11796,4905],{"class":138},[128,11798,11799,11801,11803,11806,11808,11810],{"class":130,"line":419},[128,11800,11770],{"class":138},[128,11802,2592],{"class":166},[128,11804,11805],{"class":138},"].score",[128,11807,270],{"class":134},[128,11809,409],{"class":166},[128,11811,4905],{"class":138},[128,11813,11814],{"class":130,"line":424},[128,11815,11816],{"class":3814},"    \u002F\u002F4.遍历结构体数组\n",[128,11818,11819,11821,11823,11825,11827,11829,11831,11833,11835,11837,11839,11841],{"class":130,"line":434},[128,11820,543],{"class":134},[128,11822,5260],{"class":138},[128,11824,3763],{"class":134},[128,11826,6603],{"class":138},[128,11828,270],{"class":134},[128,11830,2452],{"class":166},[128,11832,6610],{"class":138},[128,11834,4657],{"class":134},[128,11836,409],{"class":166},[128,11838,6610],{"class":138},[128,11840,5877],{"class":134},[128,11842,180],{"class":138},[128,11844,11845],{"class":130,"line":447},[128,11846,5617],{"class":138},[128,11848,11849,11851,11853,11856,11858,11861,11863,11866,11868],{"class":130,"line":459},[128,11850,7019],{"class":138},[128,11852,4789],{"class":134},[128,11854,11855],{"class":138},"stuArray[i].name",[128,11857,4789],{"class":134},[128,11859,11860],{"class":138},"stuArray[i].age",[128,11862,4789],{"class":134},[128,11864,11865],{"class":138},"stuArray[i].score",[128,11867,4789],{"class":134},[128,11869,4811],{"class":138},[128,11871,11872],{"class":130,"line":471},[128,11873,5773],{"class":138},[128,11875,11876],{"class":130,"line":483},[128,11877,2694],{"class":138},[14,11879,11881],{"id":11880},"_43结构体指针","4.3结构体指针",[19,11883,11884],{},"作用：通过指针访问结构体中的成员",[19,11886,11887],{},"利用操作符->可以通过结构体指针访问结构体属性",[106,11889,11891],{"className":3749,"code":11890,"language":3751,"meta":112,"style":112},"#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",[114,11892,11893,11899,11909,11915,11919,11925,11929,11933,11939,11945,11949,11957,11961,11966,11991,11996,12011,12016,12039],{"__ignoreMap":112},[128,11894,11895,11897],{"class":130,"line":131},[128,11896,5538],{"class":134},[128,11898,5541],{"class":176},[128,11900,11901,11903,11905,11907],{"class":130,"line":142},[128,11902,5546],{"class":134},[128,11904,5549],{"class":134},[128,11906,5552],{"class":199},[128,11908,4905],{"class":138},[128,11910,11911,11913],{"class":130,"line":156},[128,11912,5538],{"class":134},[128,11914,11306],{"class":176},[128,11916,11917],{"class":130,"line":163},[128,11918,11654],{"class":3814},[128,11920,11921,11923],{"class":130,"line":183},[128,11922,11316],{"class":134},[128,11924,11319],{"class":199},[128,11926,11927],{"class":130,"line":188},[128,11928,5157],{"class":138},[128,11930,11931],{"class":130,"line":193},[128,11932,11342],{"class":138},[128,11934,11935,11937],{"class":130,"line":206},[128,11936,5572],{"class":134},[128,11938,11354],{"class":138},[128,11940,11941,11943],{"class":130,"line":221},[128,11942,5572],{"class":134},[128,11944,11366],{"class":138},[128,11946,11947],{"class":130,"line":230},[128,11948,7562],{"class":138},[128,11950,11951,11953,11955],{"class":130,"line":235},[128,11952,3763],{"class":134},[128,11954,1575],{"class":199},[128,11956,5563],{"class":138},[128,11958,11959],{"class":130,"line":244},[128,11960,5157],{"class":138},[128,11962,11963],{"class":130,"line":287},[128,11964,11965],{"class":3814},"    \u002F\u002F创建学生结构体变量\n",[128,11967,11968,11970,11972,11975,11977,11979,11981,11983,11985,11987,11989],{"class":130,"line":301},[128,11969,11452],{"class":134},[128,11971,1904],{"class":199},[128,11973,11974],{"class":138}," s",[128,11976,270],{"class":134},[128,11978,1379],{"class":138},[128,11980,11472],{"class":176},[128,11982,4128],{"class":138},[128,11984,4399],{"class":166},[128,11986,4128],{"class":138},[128,11988,3143],{"class":166},[128,11990,7562],{"class":138},[128,11992,11993],{"class":130,"line":310},[128,11994,11995],{"class":3814},"    \u002F\u002F通过指针指向结构体变量\n",[128,11997,11998,12000,12002,12004,12006,12008],{"class":130,"line":323},[128,11999,11452],{"class":134},[128,12001,1904],{"class":199},[128,12003,10075],{"class":134},[128,12005,19],{"class":138},[128,12007,9896],{"class":134},[128,12009,12010],{"class":138},"s\n",[128,12012,12013],{"class":130,"line":330},[128,12014,12015],{"class":3814},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[128,12017,12018,12020,12022,12025,12027,12030,12032,12035,12037],{"class":130,"line":335},[128,12019,5162],{"class":138},[128,12021,4789],{"class":134},[128,12023,12024],{"class":138},"p->name",[128,12026,4789],{"class":134},[128,12028,12029],{"class":138},"p->age",[128,12031,4789],{"class":134},[128,12033,12034],{"class":138},"p->score",[128,12036,4789],{"class":134},[128,12038,4811],{"class":138},[128,12040,12041],{"class":130,"line":340},[128,12042,2694],{"class":138},[14,12044,12046],{"id":12045},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,12048,12049],{},"作用：结构体中的成员可以是另一个结构体",[19,12051,12052],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[106,12054,12056],{"className":3749,"code":12055,"language":3751,"meta":112,"style":112},"#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",[114,12057,12058,12064,12074,12080,12085,12093,12097,12101,12107,12113,12117,12122,12129,12133,12140,12144,12150,12155,12159,12167,12171,12176,12181,12186,12197,12209,12220,12233,12244,12255],{"__ignoreMap":112},[128,12059,12060,12062],{"class":130,"line":131},[128,12061,5538],{"class":134},[128,12063,5541],{"class":176},[128,12065,12066,12068,12070,12072],{"class":130,"line":142},[128,12067,5546],{"class":134},[128,12069,5549],{"class":134},[128,12071,5552],{"class":199},[128,12073,4905],{"class":138},[128,12075,12076,12078],{"class":130,"line":156},[128,12077,5538],{"class":134},[128,12079,11306],{"class":176},[128,12081,12082],{"class":130,"line":163},[128,12083,12084],{"class":3814},"\u002F\u002F定义学生结构体\n",[128,12086,12087,12089,12091],{"class":130,"line":183},[128,12088,11316],{"class":134},[128,12090,1904],{"class":199},[128,12092,6247],{"class":138},[128,12094,12095],{"class":130,"line":188},[128,12096,5157],{"class":138},[128,12098,12099],{"class":130,"line":193},[128,12100,11342],{"class":138},[128,12102,12103,12105],{"class":130,"line":206},[128,12104,5572],{"class":134},[128,12106,11354],{"class":138},[128,12108,12109,12111],{"class":130,"line":221},[128,12110,5572],{"class":134},[128,12112,11366],{"class":138},[128,12114,12115],{"class":130,"line":230},[128,12116,2694],{"class":138},[128,12118,12119],{"class":130,"line":235},[128,12120,12121],{"class":3814},"\u002F\u002F定义老师结构体\n",[128,12123,12124,12126],{"class":130,"line":244},[128,12125,11316],{"class":134},[128,12127,12128],{"class":199}," Teacher\n",[128,12130,12131],{"class":130,"line":287},[128,12132,5157],{"class":138},[128,12134,12135,12137],{"class":130,"line":301},[128,12136,5572],{"class":134},[128,12138,12139],{"class":138}," id;\n",[128,12141,12142],{"class":130,"line":310},[128,12143,11342],{"class":138},[128,12145,12146,12148],{"class":130,"line":323},[128,12147,5572],{"class":134},[128,12149,11354],{"class":138},[128,12151,12152],{"class":130,"line":330},[128,12153,12154],{"class":138},"    Student stu;\n",[128,12156,12157],{"class":130,"line":335},[128,12158,2694],{"class":138},[128,12160,12161,12163,12165],{"class":130,"line":340},[128,12162,3763],{"class":134},[128,12164,1575],{"class":199},[128,12166,9535],{"class":138},[128,12168,12169],{"class":130,"line":351},[128,12170,5157],{"class":138},[128,12172,12173],{"class":130,"line":384},[128,12174,12175],{"class":3814},"    \u002F\u002F结构体嵌套结构体\n",[128,12177,12178],{"class":130,"line":414},[128,12179,12180],{"class":3814},"    \u002F\u002F创建老师\n",[128,12182,12183],{"class":130,"line":419},[128,12184,12185],{"class":138},"    Teacher t;\n",[128,12187,12188,12191,12193,12195],{"class":130,"line":424},[128,12189,12190],{"class":138},"    t.id",[128,12192,270],{"class":134},[128,12194,4061],{"class":166},[128,12196,4905],{"class":138},[128,12198,12199,12202,12204,12207],{"class":130,"line":434},[128,12200,12201],{"class":138},"    t.name",[128,12203,270],{"class":134},[128,12205,12206],{"class":176},"\"老王\"",[128,12208,4905],{"class":138},[128,12210,12211,12214,12216,12218],{"class":130,"line":447},[128,12212,12213],{"class":138},"    t.age",[128,12215,270],{"class":134},[128,12217,4399],{"class":166},[128,12219,4905],{"class":138},[128,12221,12222,12225,12227,12230],{"class":130,"line":459},[128,12223,12224],{"class":138},"    t.stu.name",[128,12226,270],{"class":134},[128,12228,12229],{"class":176},"\"小王\"",[128,12231,12232],{"class":138},"；\n",[128,12234,12235,12238,12240,12242],{"class":130,"line":471},[128,12236,12237],{"class":138},"    t.stu.age",[128,12239,270],{"class":134},[128,12241,4449],{"class":166},[128,12243,4905],{"class":138},[128,12245,12246,12249,12251,12253],{"class":130,"line":483},[128,12247,12248],{"class":138},"    t.stu.score",[128,12250,270],{"class":134},[128,12252,4094],{"class":166},[128,12254,4905],{"class":138},[128,12256,12257],{"class":130,"line":495},[128,12258,2694],{"class":138},[14,12260,12262],{"id":12261},"_45结构体做函数参数","4.5结构体做函数参数",[19,12264,12265],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[106,12267,12269],{"className":3749,"code":12268,"language":3751,"meta":112,"style":112},"#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",[114,12270,12271,12277,12287,12293,12299,12303,12307,12313,12319,12323,12328,12333,12350,12354,12387,12391,12396,12415,12419,12450,12454,12462,12466,12475,12487,12499,12511,12524,12532,12545,12557,12565],{"__ignoreMap":112},[128,12272,12273,12275],{"class":130,"line":131},[128,12274,5538],{"class":134},[128,12276,5541],{"class":176},[128,12278,12279,12281,12283,12285],{"class":130,"line":142},[128,12280,5546],{"class":134},[128,12282,5549],{"class":134},[128,12284,5552],{"class":199},[128,12286,4905],{"class":138},[128,12288,12289,12291],{"class":130,"line":156},[128,12290,5538],{"class":134},[128,12292,11306],{"class":176},[128,12294,12295,12297],{"class":130,"line":163},[128,12296,11316],{"class":134},[128,12298,11319],{"class":199},[128,12300,12301],{"class":130,"line":183},[128,12302,5157],{"class":138},[128,12304,12305],{"class":130,"line":188},[128,12306,11342],{"class":138},[128,12308,12309,12311],{"class":130,"line":193},[128,12310,5572],{"class":134},[128,12312,11354],{"class":138},[128,12314,12315,12317],{"class":130,"line":206},[128,12316,5572],{"class":134},[128,12318,11366],{"class":138},[128,12320,12321],{"class":130,"line":221},[128,12322,7562],{"class":138},[128,12324,12325],{"class":130,"line":230},[128,12326,12327],{"class":3814},"\u002F\u002F打印学生信息的函数\n",[128,12329,12330],{"class":130,"line":235},[128,12331,12332],{"class":3814},"\u002F\u002F值传递\n",[128,12334,12335,12337,12340,12342,12344,12346,12348],{"class":130,"line":244},[128,12336,8922],{"class":134},[128,12338,12339],{"class":199}," printStudent1",[128,12341,253],{"class":138},[128,12343,11316],{"class":134},[128,12345,1904],{"class":199},[128,12347,11974],{"class":266},[128,12349,180],{"class":138},[128,12351,12352],{"class":130,"line":287},[128,12353,5157],{"class":138},[128,12355,12356,12358,12360,12363,12365,12368,12370,12373,12375,12377,12379,12382,12384],{"class":130,"line":301},[128,12357,10086],{"class":138},[128,12359,4789],{"class":134},[128,12361,12362],{"class":138}," s.name ",[128,12364,4789],{"class":134},[128,12366,12367],{"class":176}," \" \"",[128,12369,5056],{"class":134},[128,12371,12372],{"class":138}," s.age ",[128,12374,4789],{"class":134},[128,12376,12367],{"class":176},[128,12378,5056],{"class":134},[128,12380,12381],{"class":138}," s.score ",[128,12383,4789],{"class":134},[128,12385,12386],{"class":138}," endl;\n",[128,12388,12389],{"class":130,"line":310},[128,12390,2694],{"class":138},[128,12392,12393],{"class":130,"line":323},[128,12394,12395],{"class":3814},"\u002F\u002F地址传递\n",[128,12397,12398,12400,12403,12405,12407,12409,12411,12413],{"class":130,"line":330},[128,12399,8922],{"class":134},[128,12401,12402],{"class":199}," printStudent2",[128,12404,253],{"class":138},[128,12406,11316],{"class":134},[128,12408,1904],{"class":199},[128,12410,10075],{"class":134},[128,12412,4444],{"class":266},[128,12414,180],{"class":138},[128,12416,12417],{"class":130,"line":335},[128,12418,5157],{"class":138},[128,12420,12421,12423,12425,12428,12430,12432,12434,12437,12439,12441,12443,12446,12448],{"class":130,"line":340},[128,12422,10086],{"class":138},[128,12424,4789],{"class":134},[128,12426,12427],{"class":138}," s->name ",[128,12429,4789],{"class":134},[128,12431,12367],{"class":176},[128,12433,5056],{"class":134},[128,12435,12436],{"class":138}," s->age ",[128,12438,4789],{"class":134},[128,12440,12367],{"class":176},[128,12442,5056],{"class":134},[128,12444,12445],{"class":138}," s->score ",[128,12447,4789],{"class":134},[128,12449,12386],{"class":138},[128,12451,12452],{"class":130,"line":351},[128,12453,2694],{"class":138},[128,12455,12456,12458,12460],{"class":130,"line":384},[128,12457,3763],{"class":134},[128,12459,1575],{"class":199},[128,12461,5563],{"class":138},[128,12463,12464],{"class":130,"line":414},[128,12465,5157],{"class":138},[128,12467,12468,12470,12472],{"class":130,"line":419},[128,12469,11452],{"class":134},[128,12471,1904],{"class":199},[128,12473,12474],{"class":138}," s;\n",[128,12476,12477,12480,12482,12485],{"class":130,"line":424},[128,12478,12479],{"class":138},"    s.name ",[128,12481,270],{"class":134},[128,12483,12484],{"class":176}," \"张三\"",[128,12486,4905],{"class":138},[128,12488,12489,12492,12494,12497],{"class":130,"line":434},[128,12490,12491],{"class":138},"    s.age ",[128,12493,270],{"class":134},[128,12495,12496],{"class":166}," 20",[128,12498,4905],{"class":138},[128,12500,12501,12504,12506,12509],{"class":130,"line":447},[128,12502,12503],{"class":138},"    s.score ",[128,12505,270],{"class":134},[128,12507,12508],{"class":166}," 85",[128,12510,4905],{"class":138},[128,12512,12513,12515,12517,12520,12522],{"class":130,"line":459},[128,12514,5162],{"class":138},[128,12516,4789],{"class":134},[128,12518,12519],{"class":176},"\"值传递:\"",[128,12521,4789],{"class":134},[128,12523,4811],{"class":138},[128,12525,12526,12529],{"class":130,"line":471},[128,12527,12528],{"class":199},"    printStudent1",[128,12530,12531],{"class":138},"(s);\n",[128,12533,12534,12536,12538,12541,12543],{"class":130,"line":483},[128,12535,5162],{"class":138},[128,12537,4789],{"class":134},[128,12539,12540],{"class":176},"\"地址传递:\"",[128,12542,4789],{"class":134},[128,12544,4811],{"class":138},[128,12546,12547,12550,12552,12554],{"class":130,"line":495},[128,12548,12549],{"class":199},"    printStudent2",[128,12551,253],{"class":138},[128,12553,4103],{"class":134},[128,12555,12556],{"class":138},"s); \n",[128,12558,12559,12561,12563],{"class":130,"line":507},[128,12560,587],{"class":134},[128,12562,7659],{"class":166},[128,12564,4905],{"class":138},[128,12566,12567],{"class":130,"line":519},[128,12568,2694],{"class":138},[19,12570,12571],{},"注意：",[4752,12573,12574,12577],{},[29,12575,12576],{},"1.先定义结构体，不要在函数中写结构体的定义",[29,12578,12579],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,12581,12583],{"id":12582},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,12585,12586],{},"用const防止误操作",[106,12588,12590],{"className":3749,"code":12589,"language":3751,"meta":112,"style":112},"#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",[114,12591,12592,12598,12608,12614,12619,12623,12627,12633,12639,12643,12659,12663,12686,12690,12698,12702,12723,12730,12734],{"__ignoreMap":112},[128,12593,12594,12596],{"class":130,"line":131},[128,12595,5538],{"class":134},[128,12597,5541],{"class":176},[128,12599,12600,12602,12604,12606],{"class":130,"line":142},[128,12601,5546],{"class":134},[128,12603,5549],{"class":134},[128,12605,5552],{"class":199},[128,12607,4905],{"class":138},[128,12609,12610,12612],{"class":130,"line":156},[128,12611,5538],{"class":134},[128,12613,11306],{"class":176},[128,12615,12616],{"class":130,"line":163},[128,12617,12618],{"class":138},"sctuct Student\n",[128,12620,12621],{"class":130,"line":183},[128,12622,5157],{"class":138},[128,12624,12625],{"class":130,"line":188},[128,12626,11342],{"class":138},[128,12628,12629,12631],{"class":130,"line":193},[128,12630,5572],{"class":134},[128,12632,11354],{"class":138},[128,12634,12635,12637],{"class":130,"line":206},[128,12636,5572],{"class":134},[128,12638,11366],{"class":138},[128,12640,12641],{"class":130,"line":221},[128,12642,7562],{"class":138},[128,12644,12645,12647,12650,12652,12655,12657],{"class":130,"line":230},[128,12646,8922],{"class":134},[128,12648,12649],{"class":199}," printStudents",[128,12651,253],{"class":138},[128,12653,12654],{"class":199},"student",[128,12656,11974],{"class":266},[128,12658,180],{"class":138},[128,12660,12661],{"class":130,"line":235},[128,12662,5157],{"class":138},[128,12664,12665,12667,12669,12672,12674,12677,12679,12682,12684],{"class":130,"line":244},[128,12666,5162],{"class":138},[128,12668,4789],{"class":134},[128,12670,12671],{"class":138},"s.name",[128,12673,4789],{"class":134},[128,12675,12676],{"class":138},"s.age",[128,12678,4789],{"class":134},[128,12680,12681],{"class":138},"s.score",[128,12683,4789],{"class":134},[128,12685,4811],{"class":138},[128,12687,12688],{"class":130,"line":287},[128,12689,2694],{"class":138},[128,12691,12692,12694,12696],{"class":130,"line":301},[128,12693,3763],{"class":134},[128,12695,1575],{"class":199},[128,12697,9535],{"class":138},[128,12699,12700],{"class":130,"line":310},[128,12701,5157],{"class":138},[128,12703,12704,12707,12709,12711,12713,12715,12717,12719,12721],{"class":130,"line":323},[128,12705,12706],{"class":138},"    Student s",[128,12708,270],{"class":134},[128,12710,1379],{"class":138},[128,12712,11472],{"class":176},[128,12714,4128],{"class":138},[128,12716,4399],{"class":166},[128,12718,4128],{"class":138},[128,12720,4399],{"class":166},[128,12722,7562],{"class":138},[128,12724,12725,12728],{"class":130,"line":330},[128,12726,12727],{"class":199},"    printStudent",[128,12729,12531],{"class":138},[128,12731,12732],{"class":130,"line":335},[128,12733,160],{"emptyLinePlaceholder":159},[128,12735,12736],{"class":130,"line":340},[128,12737,2694],{"class":138},[19,12739,12571],{},[4752,12741,12742,12745,12748],{},[29,12743,12744],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[29,12746,12747],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[29,12749,12750],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[106,12752,12754],{"className":3749,"code":12753,"language":3751,"meta":112,"style":112},"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",[114,12755,12756,12775,12779,12784,12804],{"__ignoreMap":112},[128,12757,12758,12760,12762,12764,12766,12769,12771,12773],{"class":130,"line":131},[128,12759,8922],{"class":134},[128,12761,12649],{"class":199},[128,12763,253],{"class":138},[128,12765,10349],{"class":134},[128,12767,12768],{"class":199}," student",[128,12770,10075],{"class":134},[128,12772,4444],{"class":266},[128,12774,180],{"class":138},[128,12776,12777],{"class":130,"line":142},[128,12778,5157],{"class":138},[128,12780,12781],{"class":130,"line":156},[128,12782,12783],{"class":3814},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[128,12785,12786,12788,12790,12792,12794,12796,12798,12800,12802],{"class":130,"line":163},[128,12787,5162],{"class":138},[128,12789,4789],{"class":134},[128,12791,12671],{"class":138},[128,12793,4789],{"class":134},[128,12795,12676],{"class":138},[128,12797,4789],{"class":134},[128,12799,12681],{"class":138},[128,12801,4789],{"class":134},[128,12803,4811],{"class":138},[128,12805,12806],{"class":130,"line":183},[128,12807,2694],{"class":138},[14,12809,12811],{"id":12810},"_47案例","4.7案例",[26,12813,12814],{},[29,12815,12816],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[106,12818,12820],{"className":3749,"code":12819,"language":3751,"meta":112,"style":112},"#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",[114,12821,12822,12828,12838,12844,12851,12855,12861,12865,12870,12876,12882,12886,12890,12896,12900,12905,12910,12923,12927,12932,12958,12962,12974,13001,13005,13017,13027,13031,13036,13065,13069,13081,13090,13117,13128,13138,13142,13146,13150,13155,13179,13183,13207,13211,13230,13256,13260,13284,13306,13329,13333,13337,13341,13349,13353,13358,13378,13383,13396,13401,13427,13435,13440,13447,13451],{"__ignoreMap":112},[128,12823,12824,12826],{"class":130,"line":131},[128,12825,5538],{"class":134},[128,12827,5541],{"class":176},[128,12829,12830,12832,12834,12836],{"class":130,"line":142},[128,12831,5546],{"class":134},[128,12833,5549],{"class":134},[128,12835,5552],{"class":199},[128,12837,4905],{"class":138},[128,12839,12840,12842],{"class":130,"line":156},[128,12841,5538],{"class":134},[128,12843,11306],{"class":176},[128,12845,12846,12848],{"class":130,"line":163},[128,12847,5538],{"class":134},[128,12849,12850],{"class":176},"\u003Cctime>\n",[128,12852,12853],{"class":130,"line":183},[128,12854,12084],{"class":3814},[128,12856,12857,12859],{"class":130,"line":188},[128,12858,11316],{"class":134},[128,12860,11319],{"class":199},[128,12862,12863],{"class":130,"line":193},[128,12864,5157],{"class":138},[128,12866,12867],{"class":130,"line":206},[128,12868,12869],{"class":138},"    string sName;\n",[128,12871,12872,12874],{"class":130,"line":221},[128,12873,5572],{"class":134},[128,12875,11354],{"class":138},[128,12877,12878,12880],{"class":130,"line":230},[128,12879,5572],{"class":134},[128,12881,11366],{"class":138},[128,12883,12884],{"class":130,"line":235},[128,12885,7562],{"class":138},[128,12887,12888],{"class":130,"line":244},[128,12889,12121],{"class":3814},[128,12891,12892,12894],{"class":130,"line":287},[128,12893,11316],{"class":134},[128,12895,12128],{"class":199},[128,12897,12898],{"class":130,"line":301},[128,12899,5157],{"class":138},[128,12901,12902],{"class":130,"line":310},[128,12903,12904],{"class":138},"    string tName;\n",[128,12906,12907],{"class":130,"line":323},[128,12908,12909],{"class":3814},"    \u002F\u002F学生数组\n",[128,12911,12912,12914,12916,12919,12921],{"class":130,"line":330},[128,12913,11452],{"class":134},[128,12915,1904],{"class":199},[128,12917,12918],{"class":138}," sArray[",[128,12920,4069],{"class":166},[128,12922,8253],{"class":138},[128,12924,12925],{"class":130,"line":335},[128,12926,7562],{"class":138},[128,12928,12929],{"class":130,"line":340},[128,12930,12931],{"class":3814},"\u002F\u002F给老师和学生赋值的函数\n",[128,12933,12934,12936,12939,12941,12943,12946,12949,12952,12954,12956],{"class":130,"line":351},[128,12935,8922],{"class":134},[128,12937,12938],{"class":199}," allocateSpace",[128,12940,253],{"class":138},[128,12942,11316],{"class":134},[128,12944,12945],{"class":199}," Teacher",[128,12947,12948],{"class":266}," tArray",[128,12950,12951],{"class":138},"[],",[128,12953,3763],{"class":134},[128,12955,10888],{"class":266},[128,12957,180],{"class":138},[128,12959,12960],{"class":130,"line":384},[128,12961,5157],{"class":138},[128,12963,12964,12967,12969,12972],{"class":130,"line":414},[128,12965,12966],{"class":138},"    string nameSeed",[128,12968,270],{"class":134},[128,12970,12971],{"class":176},"\"ABCDE\"",[128,12973,4905],{"class":138},[128,12975,12976,12978,12980,12982,12985,12987,12989,12992,12994,12997,12999],{"class":130,"line":419},[128,12977,543],{"class":134},[128,12979,5260],{"class":138},[128,12981,3763],{"class":134},[128,12983,12984],{"class":138}," i ",[128,12986,270],{"class":134},[128,12988,7659],{"class":166},[128,12990,12991],{"class":138},"; i ",[128,12993,4657],{"class":134},[128,12995,12996],{"class":138}," len; i",[128,12998,5877],{"class":134},[128,13000,180],{"class":138},[128,13002,13003],{"class":130,"line":424},[128,13004,5617],{"class":138},[128,13006,13007,13010,13012,13015],{"class":130,"line":434},[128,13008,13009],{"class":138},"        tArray[i].tName ",[128,13011,270],{"class":134},[128,13013,13014],{"class":176}," \"Teacher_\"",[128,13016,4905],{"class":138},[128,13018,13019,13021,13024],{"class":130,"line":447},[128,13020,13009],{"class":138},[128,13022,13023],{"class":134},"+=",[128,13025,13026],{"class":138},"nameSeed[i];\n",[128,13028,13029],{"class":130,"line":459},[128,13030,160],{"emptyLinePlaceholder":159},[128,13032,13033],{"class":130,"line":471},[128,13034,13035],{"class":3814},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[128,13037,13038,13040,13042,13044,13047,13049,13051,13054,13056,13058,13061,13063],{"class":130,"line":483},[128,13039,2141],{"class":134},[128,13041,5260],{"class":138},[128,13043,3763],{"class":134},[128,13045,13046],{"class":138}," j ",[128,13048,270],{"class":134},[128,13050,7659],{"class":166},[128,13052,13053],{"class":138},"; j ",[128,13055,4657],{"class":134},[128,13057,5734],{"class":166},[128,13059,13060],{"class":138},"; j",[128,13062,5877],{"class":134},[128,13064,180],{"class":138},[128,13066,13067],{"class":130,"line":495},[128,13068,6092],{"class":138},[128,13070,13071,13074,13076,13079],{"class":130,"line":507},[128,13072,13073],{"class":138},"            tArray[i].sArray[j].sName ",[128,13075,270],{"class":134},[128,13077,13078],{"class":176}," \"Student_\"",[128,13080,4905],{"class":138},[128,13082,13083,13085,13087],{"class":130,"line":519},[128,13084,13073],{"class":138},[128,13086,13023],{"class":134},[128,13088,13089],{"class":138}," nameSeed[j];\n",[128,13091,13092,13095,13098,13100,13102,13104,13106,13108,13110,13112,13114],{"class":130,"line":524},[128,13093,13094],{"class":134},"            int",[128,13096,13097],{"class":138}," random",[128,13099,270],{"class":134},[128,13101,6007],{"class":199},[128,13103,6010],{"class":138},[128,13105,4078],{"class":134},[128,13107,4654],{"class":166},[128,13109,2457],{"class":134},[128,13111,4151],{"class":166},[128,13113,3811],{"class":138},[128,13115,13116],{"class":3814},"\u002F\u002F40~99\n",[128,13118,13119,13122,13124,13126],{"class":130,"line":529},[128,13120,13121],{"class":138},"            tArray[i].sArray[j].age ",[128,13123,270],{"class":134},[128,13125,12496],{"class":166},[128,13127,4905],{"class":138},[128,13129,13130,13133,13135],{"class":130,"line":540},[128,13131,13132],{"class":138},"            tArray[i].sArray[j].score ",[128,13134,270],{"class":134},[128,13136,13137],{"class":138}," random;\n",[128,13139,13140],{"class":130,"line":555},[128,13141,2014],{"class":138},[128,13143,13144],{"class":130,"line":576},[128,13145,5773],{"class":138},[128,13147,13148],{"class":130,"line":584},[128,13149,2694],{"class":138},[128,13151,13152],{"class":130,"line":593},[128,13153,13154],{"class":3814},"\u002F\u002F打印所有信息的函数\n",[128,13156,13157,13159,13162,13164,13166,13168,13170,13173,13175,13177],{"class":130,"line":598},[128,13158,8922],{"class":134},[128,13160,13161],{"class":199}," printInfo",[128,13163,253],{"class":138},[128,13165,11316],{"class":134},[128,13167,12945],{"class":199},[128,13169,12948],{"class":266},[128,13171,13172],{"class":138},"[], ",[128,13174,3763],{"class":134},[128,13176,10888],{"class":266},[128,13178,180],{"class":138},[128,13180,13181],{"class":130,"line":603},[128,13182,5157],{"class":138},[128,13184,13185,13187,13189,13191,13193,13195,13197,13199,13201,13203,13205],{"class":130,"line":614},[128,13186,543],{"class":134},[128,13188,5260],{"class":138},[128,13190,3763],{"class":134},[128,13192,12984],{"class":138},[128,13194,270],{"class":134},[128,13196,7659],{"class":166},[128,13198,12991],{"class":138},[128,13200,4657],{"class":134},[128,13202,12996],{"class":138},[128,13204,5877],{"class":134},[128,13206,180],{"class":138},[128,13208,13209],{"class":130,"line":625},[128,13210,5617],{"class":138},[128,13212,13213,13216,13218,13221,13223,13226,13228],{"class":130,"line":633},[128,13214,13215],{"class":138},"        cout ",[128,13217,4789],{"class":134},[128,13219,13220],{"class":176}," \"Teacher: \"",[128,13222,5056],{"class":134},[128,13224,13225],{"class":138}," tArray[i].tName ",[128,13227,4789],{"class":134},[128,13229,12386],{"class":138},[128,13231,13232,13234,13236,13238,13240,13242,13244,13246,13248,13250,13252,13254],{"class":130,"line":649},[128,13233,2141],{"class":134},[128,13235,5260],{"class":138},[128,13237,3763],{"class":134},[128,13239,13046],{"class":138},[128,13241,270],{"class":134},[128,13243,7659],{"class":166},[128,13245,13053],{"class":138},[128,13247,4657],{"class":134},[128,13249,5734],{"class":166},[128,13251,13060],{"class":138},[128,13253,5877],{"class":134},[128,13255,180],{"class":138},[128,13257,13258],{"class":130,"line":660},[128,13259,6092],{"class":138},[128,13261,13262,13265,13267,13270,13272,13275,13277,13280,13282],{"class":130,"line":673},[128,13263,13264],{"class":138},"            cout ",[128,13266,4789],{"class":134},[128,13268,13269],{"class":176}," \"",[128,13271,1525],{"class":166},[128,13273,13274],{"class":176},"Student: \"",[128,13276,5056],{"class":134},[128,13278,13279],{"class":138}," tArray[i].sArray[j].sName",[128,13281,4789],{"class":134},[128,13283,4811],{"class":138},[128,13285,13286,13288,13290,13292,13294,13297,13299,13302,13304],{"class":130,"line":678},[128,13287,13264],{"class":138},[128,13289,4789],{"class":134},[128,13291,13269],{"class":176},[128,13293,1525],{"class":166},[128,13295,13296],{"class":176},"Age: \"",[128,13298,5056],{"class":134},[128,13300,13301],{"class":138}," tArray[i].sArray[j].age ",[128,13303,4789],{"class":134},[128,13305,12386],{"class":138},[128,13307,13308,13310,13312,13314,13316,13319,13321,13324,13326],{"class":130,"line":683},[128,13309,13264],{"class":138},[128,13311,4789],{"class":134},[128,13313,13269],{"class":176},[128,13315,1525],{"class":166},[128,13317,13318],{"class":176},"Score: \"",[128,13320,5056],{"class":134},[128,13322,13323],{"class":138}," tArray[i].sArray[j].score ",[128,13325,4789],{"class":134},[128,13327,13328],{"class":138}," endl;   \n",[128,13330,13331],{"class":130,"line":693},[128,13332,2014],{"class":138},[128,13334,13335],{"class":130,"line":702},[128,13336,5773],{"class":138},[128,13338,13339],{"class":130,"line":709},[128,13340,2694],{"class":138},[128,13342,13343,13345,13347],{"class":130,"line":723},[128,13344,3763],{"class":134},[128,13346,1575],{"class":199},[128,13348,5563],{"class":138},[128,13350,13351],{"class":130,"line":732},[128,13352,5157],{"class":138},[128,13354,13355],{"class":130,"line":744},[128,13356,13357],{"class":3814},"    \u002F\u002F随机数种子\n",[128,13359,13360,13362,13364,13366,13368,13370,13372,13374,13376],{"class":130,"line":749},[128,13361,5958],{"class":199},[128,13363,5961],{"class":138},[128,13365,5964],{"class":134},[128,13367,638],{"class":134},[128,13369,4179],{"class":138},[128,13371,5971],{"class":199},[128,13373,253],{"class":138},[128,13375,5976],{"class":166},[128,13377,5979],{"class":138},[128,13379,13380],{"class":130,"line":754},[128,13381,13382],{"class":3814},"    \u002F\u002F1.创建3名老师的数组\n",[128,13384,13385,13387,13389,13392,13394],{"class":130,"line":764},[128,13386,11452],{"class":134},[128,13388,12945],{"class":199},[128,13390,13391],{"class":138}," tArray[",[128,13393,3827],{"class":166},[128,13395,8253],{"class":138},[128,13397,13398],{"class":130,"line":782},[128,13399,13400],{"class":3814},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[128,13402,13403,13405,13408,13410,13413,13416,13418,13420,13423,13425],{"class":130,"line":787},[128,13404,5572],{"class":134},[128,13406,13407],{"class":138}," len ",[128,13409,270],{"class":134},[128,13411,13412],{"class":134}," sizeof",[128,13414,13415],{"class":138},"(tArray) ",[128,13417,4333],{"class":134},[128,13419,13412],{"class":134},[128,13421,13422],{"class":138},"(tArray[",[128,13424,2452],{"class":166},[128,13426,7423],{"class":138},[128,13428,13429,13432],{"class":130,"line":795},[128,13430,13431],{"class":199},"    allocateSpace",[128,13433,13434],{"class":138},"(tArray, len);\n",[128,13436,13437],{"class":130,"line":807},[128,13438,13439],{"class":3814},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[128,13441,13442,13445],{"class":130,"line":813},[128,13443,13444],{"class":199},"    printInfo",[128,13446,13434],{"class":138},[128,13448,13449],{"class":130,"line":818},[128,13450,160],{"emptyLinePlaceholder":159},[128,13452,13453],{"class":130,"line":835},[128,13454,2694],{"class":138},[26,13456,13457],{"start":142},[29,13458,13459,13462],{},[3903,13460,13461],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,13464,13465],{},"五名英雄信息如下：",[106,13467,13471],{"className":13468,"code":13469,"language":13470,"meta":112,"style":112},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[114,13472,13473,13491,13508,13525,13542],{"__ignoreMap":112},[128,13474,13475,13477,13480,13482,13484,13486,13489],{"class":130,"line":131},[128,13476,8480],{"class":138},[128,13478,13479],{"class":176},"\"刘备\"",[128,13481,4128],{"class":138},[128,13483,4524],{"class":166},[128,13485,4128],{"class":138},[128,13487,13488],{"class":176},"\"男\"",[128,13490,2282],{"class":138},[128,13492,13493,13495,13498,13500,13502,13504,13506],{"class":130,"line":142},[128,13494,8480],{"class":138},[128,13496,13497],{"class":176},"\"关羽\"",[128,13499,4128],{"class":138},[128,13501,4499],{"class":166},[128,13503,4128],{"class":138},[128,13505,13488],{"class":176},[128,13507,2282],{"class":138},[128,13509,13510,13512,13515,13517,13519,13521,13523],{"class":130,"line":156},[128,13511,8480],{"class":138},[128,13513,13514],{"class":176},"\"张飞\"",[128,13516,4128],{"class":138},[128,13518,4449],{"class":166},[128,13520,4128],{"class":138},[128,13522,13488],{"class":176},[128,13524,2282],{"class":138},[128,13526,13527,13529,13532,13534,13536,13538,13540],{"class":130,"line":163},[128,13528,8480],{"class":138},[128,13530,13531],{"class":176},"\"赵云\"",[128,13533,4128],{"class":138},[128,13535,4474],{"class":166},[128,13537,4128],{"class":138},[128,13539,13488],{"class":176},[128,13541,2282],{"class":138},[128,13543,13544,13546,13549,13551,13553,13555,13558],{"class":130,"line":183},[128,13545,8480],{"class":138},[128,13547,13548],{"class":176},"\"貂蝉\"",[128,13550,4128],{"class":138},[128,13552,4424],{"class":166},[128,13554,4128],{"class":138},[128,13556,13557],{"class":176},"\"女\"",[128,13559,2282],{"class":138},[19,13561,13562],{},"代码：",[106,13564,13566],{"className":3749,"code":13565,"language":3751,"meta":112,"style":112},"#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",[114,13567,13568,13574,13584,13590,13597,13601,13605,13611,13616,13620,13625,13648,13652,13677,13681,13714,13719,13748,13753,13768,13794,13814,13819,13824,13828,13832,13837,13859,13863,13887,13891,13953,13957,13961,13969,13973,13978,13989,13993,14009,14025,14041,14057,14073,14077,14097,14119,14124,14137,14144,14149,14155,14160,14173,14179],{"__ignoreMap":112},[128,13569,13570,13572],{"class":130,"line":131},[128,13571,5538],{"class":134},[128,13573,5541],{"class":176},[128,13575,13576,13578,13580,13582],{"class":130,"line":142},[128,13577,5546],{"class":134},[128,13579,5549],{"class":134},[128,13581,5552],{"class":199},[128,13583,4905],{"class":138},[128,13585,13586,13588],{"class":130,"line":156},[128,13587,5538],{"class":134},[128,13589,11306],{"class":176},[128,13591,13592,13594],{"class":130,"line":163},[128,13593,11316],{"class":134},[128,13595,13596],{"class":199}," Sanguo\n",[128,13598,13599],{"class":130,"line":183},[128,13600,5157],{"class":138},[128,13602,13603],{"class":130,"line":188},[128,13604,11342],{"class":138},[128,13606,13607,13609],{"class":130,"line":193},[128,13608,5572],{"class":134},[128,13610,11354],{"class":138},[128,13612,13613],{"class":130,"line":206},[128,13614,13615],{"class":138},"    string gender;\n",[128,13617,13618],{"class":130,"line":221},[128,13619,7562],{"class":138},[128,13621,13622],{"class":130,"line":230},[128,13623,13624],{"class":3814},"\u002F\u002F定义排序函数\n",[128,13626,13627,13629,13631,13633,13636,13638,13640,13642,13644,13646],{"class":130,"line":235},[128,13628,8922],{"class":134},[128,13630,10873],{"class":199},[128,13632,253],{"class":138},[128,13634,13635],{"class":199},"Sanguo",[128,13637,10075],{"class":134},[128,13639,4444],{"class":266},[128,13641,4128],{"class":138},[128,13643,3763],{"class":134},[128,13645,10888],{"class":266},[128,13647,180],{"class":138},[128,13649,13650],{"class":130,"line":244},[128,13651,5157],{"class":138},[128,13653,13654,13656,13658,13660,13662,13664,13666,13668,13670,13673,13675],{"class":130,"line":287},[128,13655,543],{"class":134},[128,13657,253],{"class":138},[128,13659,3763],{"class":134},[128,13661,6603],{"class":138},[128,13663,270],{"class":134},[128,13665,2452],{"class":166},[128,13667,6610],{"class":138},[128,13669,4657],{"class":134},[128,13671,13672],{"class":138},"len;i",[128,13674,5877],{"class":134},[128,13676,180],{"class":138},[128,13678,13679],{"class":130,"line":301},[128,13680,5617],{"class":138},[128,13682,13683,13686,13688,13690,13692,13694,13696,13698,13700,13702,13704,13706,13708,13710,13712],{"class":130,"line":310},[128,13684,13685],{"class":134},"     for",[128,13687,5260],{"class":138},[128,13689,3763],{"class":134},[128,13691,6978],{"class":138},[128,13693,270],{"class":134},[128,13695,2452],{"class":166},[128,13697,6985],{"class":138},[128,13699,4657],{"class":134},[128,13701,10915],{"class":138},[128,13703,4281],{"class":134},[128,13705,2592],{"class":166},[128,13707,4281],{"class":134},[128,13709,7118],{"class":138},[128,13711,5877],{"class":134},[128,13713,180],{"class":138},[128,13715,13716],{"class":130,"line":323},[128,13717,13718],{"class":138},"     {\n",[128,13720,13721,13724,13727,13729,13732,13734,13737,13739,13741,13743,13745],{"class":130,"line":330},[128,13722,13723],{"class":134},"         if",[128,13725,13726],{"class":138}," ((s",[128,13728,2457],{"class":134},[128,13730,13731],{"class":138},"j)->age ",[128,13733,4705],{"class":134},[128,13735,13736],{"class":138}," (s",[128,13738,2457],{"class":134},[128,13740,4217],{"class":138},[128,13742,2457],{"class":134},[128,13744,2592],{"class":166},[128,13746,13747],{"class":138},")->age)\n",[128,13749,13750],{"class":130,"line":335},[128,13751,13752],{"class":138},"         {\n",[128,13754,13755,13758,13760,13763,13765],{"class":130,"line":340},[128,13756,13757],{"class":138},"             Sanguo temp",[128,13759,10710],{"class":134},[128,13761,13762],{"class":138},"(s",[128,13764,2457],{"class":134},[128,13766,13767],{"class":138},"j);\n",[128,13769,13770,13773,13775,13777,13780,13782,13784,13786,13788,13790,13792],{"class":130,"line":351},[128,13771,13772],{"class":134},"             *",[128,13774,13762],{"class":138},[128,13776,2457],{"class":134},[128,13778,13779],{"class":138},"j)",[128,13781,10710],{"class":134},[128,13783,13762],{"class":138},[128,13785,2457],{"class":134},[128,13787,4217],{"class":138},[128,13789,2457],{"class":134},[128,13791,2592],{"class":166},[128,13793,6292],{"class":138},[128,13795,13796,13798,13800,13802,13804,13806,13808,13810,13812],{"class":130,"line":384},[128,13797,13772],{"class":134},[128,13799,13762],{"class":138},[128,13801,2457],{"class":134},[128,13803,4217],{"class":138},[128,13805,2457],{"class":134},[128,13807,2592],{"class":166},[128,13809,4179],{"class":138},[128,13811,270],{"class":134},[128,13813,7846],{"class":138},[128,13815,13816],{"class":130,"line":414},[128,13817,13818],{"class":138},"         }\n",[128,13820,13821],{"class":130,"line":419},[128,13822,13823],{"class":138},"     }\n",[128,13825,13826],{"class":130,"line":424},[128,13827,5773],{"class":138},[128,13829,13830],{"class":130,"line":434},[128,13831,2694],{"class":138},[128,13833,13834],{"class":130,"line":447},[128,13835,13836],{"class":3814},"\u002F\u002F定义打印函数\n",[128,13838,13839,13841,13843,13845,13847,13849,13851,13853,13855,13857],{"class":130,"line":459},[128,13840,8922],{"class":134},[128,13842,13161],{"class":199},[128,13844,253],{"class":138},[128,13846,13635],{"class":199},[128,13848,10075],{"class":134},[128,13850,4444],{"class":266},[128,13852,4128],{"class":138},[128,13854,3763],{"class":134},[128,13856,10888],{"class":266},[128,13858,180],{"class":138},[128,13860,13861],{"class":130,"line":471},[128,13862,5157],{"class":138},[128,13864,13865,13867,13869,13871,13873,13875,13877,13879,13881,13883,13885],{"class":130,"line":483},[128,13866,543],{"class":134},[128,13868,5260],{"class":138},[128,13870,3763],{"class":134},[128,13872,6603],{"class":138},[128,13874,270],{"class":134},[128,13876,2452],{"class":166},[128,13878,6610],{"class":138},[128,13880,4657],{"class":134},[128,13882,13672],{"class":138},[128,13884,5877],{"class":134},[128,13886,180],{"class":138},[128,13888,13889],{"class":130,"line":495},[128,13890,5617],{"class":138},[128,13892,13893,13895,13897,13899,13901,13904,13906,13908,13910,13913,13915,13917,13919,13922,13924,13926,13928,13931,13933,13935,13937,13940,13942,13944,13946,13949,13951],{"class":130,"line":507},[128,13894,7019],{"class":138},[128,13896,4789],{"class":134},[128,13898,1376],{"class":176},[128,13900,1525],{"class":166},[128,13902,13903],{"class":176},"姓名：\"",[128,13905,4789],{"class":134},[128,13907,13762],{"class":138},[128,13909,2457],{"class":134},[128,13911,13912],{"class":138},"i)->name",[128,13914,4789],{"class":134},[128,13916,1376],{"class":176},[128,13918,1525],{"class":166},[128,13920,13921],{"class":176},"年龄：\"",[128,13923,4789],{"class":134},[128,13925,13762],{"class":138},[128,13927,2457],{"class":134},[128,13929,13930],{"class":138},"i)->age",[128,13932,4789],{"class":134},[128,13934,1376],{"class":176},[128,13936,1525],{"class":166},[128,13938,13939],{"class":176},"性别：\"",[128,13941,4789],{"class":134},[128,13943,13762],{"class":138},[128,13945,2457],{"class":134},[128,13947,13948],{"class":138},"i)->gender",[128,13950,4789],{"class":134},[128,13952,4811],{"class":138},[128,13954,13955],{"class":130,"line":519},[128,13956,5773],{"class":138},[128,13958,13959],{"class":130,"line":524},[128,13960,2694],{"class":138},[128,13962,13963,13965,13967],{"class":130,"line":529},[128,13964,3763],{"class":134},[128,13966,1575],{"class":199},[128,13968,5563],{"class":138},[128,13970,13971],{"class":130,"line":540},[128,13972,5157],{"class":138},[128,13974,13975],{"class":130,"line":555},[128,13976,13977],{"class":3814},"    \u002F\u002F定义结构体变量\n",[128,13979,13980,13983,13985,13987],{"class":130,"line":576},[128,13981,13982],{"class":138},"    Sanguo s1[",[128,13984,4069],{"class":166},[128,13986,1388],{"class":138},[128,13988,8471],{"class":134},[128,13990,13991],{"class":130,"line":584},[128,13992,5617],{"class":138},[128,13994,13995,13997,13999,14001,14003,14005,14007],{"class":130,"line":593},[128,13996,8480],{"class":138},[128,13998,13479],{"class":176},[128,14000,4128],{"class":138},[128,14002,4524],{"class":166},[128,14004,4128],{"class":138},[128,14006,13488],{"class":176},[128,14008,2282],{"class":138},[128,14010,14011,14013,14015,14017,14019,14021,14023],{"class":130,"line":598},[128,14012,8480],{"class":138},[128,14014,13497],{"class":176},[128,14016,4128],{"class":138},[128,14018,4499],{"class":166},[128,14020,4128],{"class":138},[128,14022,13488],{"class":176},[128,14024,2282],{"class":138},[128,14026,14027,14029,14031,14033,14035,14037,14039],{"class":130,"line":603},[128,14028,8480],{"class":138},[128,14030,13514],{"class":176},[128,14032,4128],{"class":138},[128,14034,4449],{"class":166},[128,14036,4128],{"class":138},[128,14038,13488],{"class":176},[128,14040,2282],{"class":138},[128,14042,14043,14045,14047,14049,14051,14053,14055],{"class":130,"line":614},[128,14044,8480],{"class":138},[128,14046,13531],{"class":176},[128,14048,4128],{"class":138},[128,14050,4474],{"class":166},[128,14052,4128],{"class":138},[128,14054,13488],{"class":176},[128,14056,2282],{"class":138},[128,14058,14059,14061,14063,14065,14067,14069,14071],{"class":130,"line":625},[128,14060,8480],{"class":138},[128,14062,13548],{"class":176},[128,14064,4128],{"class":138},[128,14066,4424],{"class":166},[128,14068,4128],{"class":138},[128,14070,13557],{"class":176},[128,14072,2282],{"class":138},[128,14074,14075],{"class":130,"line":633},[128,14076,8513],{"class":138},[128,14078,14079,14081,14083,14085,14088,14090,14093,14095],{"class":130,"line":649},[128,14080,5572],{"class":134},[128,14082,10888],{"class":138},[128,14084,7769],{"class":134},[128,14086,14087],{"class":138},"(s1)",[128,14089,7775],{"class":134},[128,14091,14092],{"class":138},"(s1[",[128,14094,2452],{"class":166},[128,14096,7423],{"class":138},[128,14098,14099,14102,14104,14107,14109,14112,14115,14117],{"class":130,"line":660},[128,14100,14101],{"class":138},"    Sanguo ",[128,14103,4205],{"class":134},[128,14105,14106],{"class":138},"s ",[128,14108,270],{"class":134},[128,14110,14111],{"class":134}," &",[128,14113,14114],{"class":138},"s1[",[128,14116,2452],{"class":166},[128,14118,8253],{"class":138},[128,14120,14121],{"class":130,"line":673},[128,14122,14123],{"class":3814},"    \u002F\u002F排序前：\n",[128,14125,14126,14128,14130,14133,14135],{"class":130,"line":678},[128,14127,10086],{"class":138},[128,14129,4789],{"class":134},[128,14131,14132],{"class":176}," \"排序前：\"",[128,14134,5056],{"class":134},[128,14136,12386],{"class":138},[128,14138,14139,14141],{"class":130,"line":683},[128,14140,13444],{"class":199},[128,14142,14143],{"class":138},"(s,len);\n",[128,14145,14146],{"class":130,"line":693},[128,14147,14148],{"class":3814},"    \u002F\u002F调用排序函数\n",[128,14150,14151,14153],{"class":130,"line":702},[128,14152,11155],{"class":199},[128,14154,14143],{"class":138},[128,14156,14157],{"class":130,"line":709},[128,14158,14159],{"class":3814},"    \u002F\u002F排序后\n",[128,14161,14162,14164,14166,14169,14171],{"class":130,"line":723},[128,14163,10086],{"class":138},[128,14165,4789],{"class":134},[128,14167,14168],{"class":176}," \"排序后：\"",[128,14170,5056],{"class":134},[128,14172,12386],{"class":138},[128,14174,14175,14177],{"class":130,"line":732},[128,14176,13444],{"class":199},[128,14178,14143],{"class":138},[128,14180,14181],{"class":130,"line":744},[128,14182,2694],{"class":138},[19,14184,14185,14186,14188],{},"注意：使用指针时直接用传首地址**&s",[128,14187,2452],{},"**",[3659,14190,14191],{},"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":112,"searchDepth":142,"depth":142,"links":14193},[14194,14195,14196,14197,14198,14199,14200],{"id":11260,"depth":142,"text":11261},{"id":11611,"depth":142,"text":11612},{"id":11880,"depth":142,"text":11881},{"id":12045,"depth":142,"text":12046},{"id":12261,"depth":142,"text":12262},{"id":12582,"depth":142,"text":12583},{"id":12810,"depth":142,"text":12811},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":11249,"description":11257},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":14207,"title":14208,"body":14209,"description":112,"extension":3687,"meta":15552,"navigation":159,"path":15553,"seo":15554,"stem":15555,"__hash__":15556},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":14210,"toc":15546},[14211,14214,14218,14224,14238,14243,14246,14250,14257,14263,14266,14273,14279,14284,14287,14290,14293,14857,14860,14874,14878,14883,14899,15039,15042,15048,15051,15056,15064,15172,15175,15180,15183,15188,15191,15197,15200,15543],[10,14212,14208],{"id":14213},"_5程序内存模型",[14,14215,14217],{"id":14216},"_51内存分区模型","5.1内存分区模型",[19,14219,14220,14221],{},"C++程序在执行时，将内存大方向划分为",[3903,14222,14223],{},"4个区域",[4752,14225,14226,14229,14232,14235],{},[29,14227,14228],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[29,14230,14231],{},"全局区：存放全局变量和静态变量以及常量",[29,14233,14234],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[29,14236,14237],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,14239,14240],{},[3903,14241,14242],{},"内存四区意义：",[19,14244,14245],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[72,14247,14249],{"id":14248},"_511程序运行前","5.1.1程序运行前",[19,14251,14252,14253,14256],{},"​\t在程序编译后，生成了exe可执行程序，",[3903,14254,14255],{},"未执行该程序前","分为两个区域",[19,14258,14259,14260],{},"​\t",[3903,14261,14262],{},"代码区：",[19,14264,14265],{},"​\t\t存放 CPU 执行的机器指令",[19,14267,14268,14269,14272],{},"​\t\t代码区是",[3903,14270,14271],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,14274,14268,14275,14278],{},[3903,14276,14277],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,14280,14259,14281],{},[3903,14282,14283],{},"全局区：",[19,14285,14286],{},"​\t\t全局变量和静态变量存放在此.",[19,14288,14289],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,14291,14292],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[106,14294,14296],{"className":3749,"code":14295,"language":3751,"meta":112,"style":112},"\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",[114,14297,14298,14303,14316,14329,14333,14338,14353,14368,14372,14381,14385,14390,14403,14416,14420,14425,14451,14477,14481,14508,14534,14538,14543,14559,14574,14578,14604,14630,14634,14659,14684,14688,14714,14740,14744,14760,14775,14801,14827,14831,14841,14845,14853],{"__ignoreMap":112},[128,14299,14300],{"class":130,"line":131},[128,14301,14302],{"class":3814},"\u002F\u002F全局变量\n",[128,14304,14305,14307,14310,14312,14314],{"class":130,"line":142},[128,14306,3763],{"class":134},[128,14308,14309],{"class":138}," g_a ",[128,14311,270],{"class":134},[128,14313,5625],{"class":166},[128,14315,4905],{"class":138},[128,14317,14318,14320,14323,14325,14327],{"class":130,"line":156},[128,14319,3763],{"class":134},[128,14321,14322],{"class":138}," g_b ",[128,14324,270],{"class":134},[128,14326,5625],{"class":166},[128,14328,4905],{"class":138},[128,14330,14331],{"class":130,"line":163},[128,14332,160],{"emptyLinePlaceholder":159},[128,14334,14335],{"class":130,"line":183},[128,14336,14337],{"class":3814},"\u002F\u002F全局常量\n",[128,14339,14340,14342,14344,14347,14349,14351],{"class":130,"line":188},[128,14341,10349],{"class":134},[128,14343,638],{"class":134},[128,14345,14346],{"class":138}," c_g_a ",[128,14348,270],{"class":134},[128,14350,5625],{"class":166},[128,14352,4905],{"class":138},[128,14354,14355,14357,14359,14362,14364,14366],{"class":130,"line":193},[128,14356,10349],{"class":134},[128,14358,638],{"class":134},[128,14360,14361],{"class":138}," c_g_b ",[128,14363,270],{"class":134},[128,14365,5625],{"class":166},[128,14367,4905],{"class":138},[128,14369,14370],{"class":130,"line":206},[128,14371,160],{"emptyLinePlaceholder":159},[128,14373,14374,14376,14378],{"class":130,"line":221},[128,14375,3763],{"class":134},[128,14377,1575],{"class":199},[128,14379,14380],{"class":138},"() {\n",[128,14382,14383],{"class":130,"line":230},[128,14384,160],{"emptyLinePlaceholder":159},[128,14386,14387],{"class":130,"line":235},[128,14388,14389],{"class":3814},"    \u002F\u002F局部变量\n",[128,14391,14392,14394,14397,14399,14401],{"class":130,"line":244},[128,14393,5572],{"class":134},[128,14395,14396],{"class":138}," a ",[128,14398,270],{"class":134},[128,14400,5625],{"class":166},[128,14402,4905],{"class":138},[128,14404,14405,14407,14410,14412,14414],{"class":130,"line":287},[128,14406,5572],{"class":134},[128,14408,14409],{"class":138}," b ",[128,14411,270],{"class":134},[128,14413,5625],{"class":166},[128,14415,4905],{"class":138},[128,14417,14418],{"class":130,"line":301},[128,14419,160],{"emptyLinePlaceholder":159},[128,14421,14422],{"class":130,"line":310},[128,14423,14424],{"class":3814},"    \u002F\u002F打印地址\n",[128,14426,14427,14429,14431,14434,14436,14438,14440,14442,14444,14447,14449],{"class":130,"line":323},[128,14428,10086],{"class":138},[128,14430,4789],{"class":134},[128,14432,14433],{"class":176}," \"局部变量a地址为： \"",[128,14435,5056],{"class":134},[128,14437,5260],{"class":138},[128,14439,3763],{"class":134},[128,14441,4179],{"class":138},[128,14443,4103],{"class":134},[128,14445,14446],{"class":138},"a ",[128,14448,4789],{"class":134},[128,14450,12386],{"class":138},[128,14452,14453,14455,14457,14460,14462,14464,14466,14468,14470,14473,14475],{"class":130,"line":330},[128,14454,10086],{"class":138},[128,14456,4789],{"class":134},[128,14458,14459],{"class":176}," \"局部变量b地址为： \"",[128,14461,5056],{"class":134},[128,14463,5260],{"class":138},[128,14465,3763],{"class":134},[128,14467,4179],{"class":138},[128,14469,4103],{"class":134},[128,14471,14472],{"class":138},"b ",[128,14474,4789],{"class":134},[128,14476,12386],{"class":138},[128,14478,14479],{"class":130,"line":335},[128,14480,160],{"emptyLinePlaceholder":159},[128,14482,14483,14485,14487,14490,14492,14495,14497,14499,14501,14504,14506],{"class":130,"line":340},[128,14484,10086],{"class":138},[128,14486,4789],{"class":134},[128,14488,14489],{"class":176}," \"全局变量g_a地址为： \"",[128,14491,5056],{"class":134},[128,14493,14494],{"class":138},"  (",[128,14496,3763],{"class":134},[128,14498,4179],{"class":138},[128,14500,4103],{"class":134},[128,14502,14503],{"class":138},"g_a ",[128,14505,4789],{"class":134},[128,14507,12386],{"class":138},[128,14509,14510,14512,14514,14517,14519,14521,14523,14525,14527,14530,14532],{"class":130,"line":351},[128,14511,10086],{"class":138},[128,14513,4789],{"class":134},[128,14515,14516],{"class":176}," \"全局变量g_b地址为： \"",[128,14518,5056],{"class":134},[128,14520,14494],{"class":138},[128,14522,3763],{"class":134},[128,14524,4179],{"class":138},[128,14526,4103],{"class":134},[128,14528,14529],{"class":138},"g_b ",[128,14531,4789],{"class":134},[128,14533,12386],{"class":138},[128,14535,14536],{"class":130,"line":384},[128,14537,160],{"emptyLinePlaceholder":159},[128,14539,14540],{"class":130,"line":414},[128,14541,14542],{"class":3814},"    \u002F\u002F静态变量\n",[128,14544,14545,14548,14550,14553,14555,14557],{"class":130,"line":419},[128,14546,14547],{"class":134},"    static",[128,14549,638],{"class":134},[128,14551,14552],{"class":138}," s_a ",[128,14554,270],{"class":134},[128,14556,5625],{"class":166},[128,14558,4905],{"class":138},[128,14560,14561,14563,14565,14568,14570,14572],{"class":130,"line":424},[128,14562,14547],{"class":134},[128,14564,638],{"class":134},[128,14566,14567],{"class":138}," s_b ",[128,14569,270],{"class":134},[128,14571,5625],{"class":166},[128,14573,4905],{"class":138},[128,14575,14576],{"class":130,"line":434},[128,14577,160],{"emptyLinePlaceholder":159},[128,14579,14580,14582,14584,14587,14589,14591,14593,14595,14597,14600,14602],{"class":130,"line":447},[128,14581,10086],{"class":138},[128,14583,4789],{"class":134},[128,14585,14586],{"class":176}," \"静态变量s_a地址为： \"",[128,14588,5056],{"class":134},[128,14590,5260],{"class":138},[128,14592,3763],{"class":134},[128,14594,4179],{"class":138},[128,14596,4103],{"class":134},[128,14598,14599],{"class":138},"s_a ",[128,14601,4789],{"class":134},[128,14603,12386],{"class":138},[128,14605,14606,14608,14610,14613,14615,14617,14619,14621,14623,14626,14628],{"class":130,"line":459},[128,14607,10086],{"class":138},[128,14609,4789],{"class":134},[128,14611,14612],{"class":176}," \"静态变量s_b地址为： \"",[128,14614,5056],{"class":134},[128,14616,5260],{"class":138},[128,14618,3763],{"class":134},[128,14620,4179],{"class":138},[128,14622,4103],{"class":134},[128,14624,14625],{"class":138},"s_b ",[128,14627,4789],{"class":134},[128,14629,12386],{"class":138},[128,14631,14632],{"class":130,"line":471},[128,14633,160],{"emptyLinePlaceholder":159},[128,14635,14636,14638,14640,14643,14645,14647,14649,14651,14653,14655,14657],{"class":130,"line":483},[128,14637,10086],{"class":138},[128,14639,4789],{"class":134},[128,14641,14642],{"class":176}," \"字符串常量地址为： \"",[128,14644,5056],{"class":134},[128,14646,5260],{"class":138},[128,14648,3763],{"class":134},[128,14650,4179],{"class":138},[128,14652,4103],{"class":134},[128,14654,4806],{"class":176},[128,14656,5056],{"class":134},[128,14658,12386],{"class":138},[128,14660,14661,14663,14665,14667,14669,14671,14673,14675,14677,14680,14682],{"class":130,"line":495},[128,14662,10086],{"class":138},[128,14664,4789],{"class":134},[128,14666,14642],{"class":176},[128,14668,5056],{"class":134},[128,14670,5260],{"class":138},[128,14672,3763],{"class":134},[128,14674,4179],{"class":138},[128,14676,4103],{"class":134},[128,14678,14679],{"class":176},"\"hello world1\"",[128,14681,5056],{"class":134},[128,14683,12386],{"class":138},[128,14685,14686],{"class":130,"line":507},[128,14687,160],{"emptyLinePlaceholder":159},[128,14689,14690,14692,14694,14697,14699,14701,14703,14705,14707,14710,14712],{"class":130,"line":519},[128,14691,10086],{"class":138},[128,14693,4789],{"class":134},[128,14695,14696],{"class":176}," \"全局常量c_g_a地址为： \"",[128,14698,5056],{"class":134},[128,14700,5260],{"class":138},[128,14702,3763],{"class":134},[128,14704,4179],{"class":138},[128,14706,4103],{"class":134},[128,14708,14709],{"class":138},"c_g_a ",[128,14711,4789],{"class":134},[128,14713,12386],{"class":138},[128,14715,14716,14718,14720,14723,14725,14727,14729,14731,14733,14736,14738],{"class":130,"line":524},[128,14717,10086],{"class":138},[128,14719,4789],{"class":134},[128,14721,14722],{"class":176}," \"全局常量c_g_b地址为： \"",[128,14724,5056],{"class":134},[128,14726,5260],{"class":138},[128,14728,3763],{"class":134},[128,14730,4179],{"class":138},[128,14732,4103],{"class":134},[128,14734,14735],{"class":138},"c_g_b ",[128,14737,4789],{"class":134},[128,14739,12386],{"class":138},[128,14741,14742],{"class":130,"line":529},[128,14743,160],{"emptyLinePlaceholder":159},[128,14745,14746,14749,14751,14754,14756,14758],{"class":130,"line":540},[128,14747,14748],{"class":134},"    const",[128,14750,638],{"class":134},[128,14752,14753],{"class":138}," c_l_a ",[128,14755,270],{"class":134},[128,14757,5625],{"class":166},[128,14759,4905],{"class":138},[128,14761,14762,14764,14766,14769,14771,14773],{"class":130,"line":555},[128,14763,14748],{"class":134},[128,14765,638],{"class":134},[128,14767,14768],{"class":138}," c_l_b ",[128,14770,270],{"class":134},[128,14772,5625],{"class":166},[128,14774,4905],{"class":138},[128,14776,14777,14779,14781,14784,14786,14788,14790,14792,14794,14797,14799],{"class":130,"line":576},[128,14778,10086],{"class":138},[128,14780,4789],{"class":134},[128,14782,14783],{"class":176}," \"局部常量c_l_a地址为： \"",[128,14785,5056],{"class":134},[128,14787,5260],{"class":138},[128,14789,3763],{"class":134},[128,14791,4179],{"class":138},[128,14793,4103],{"class":134},[128,14795,14796],{"class":138},"c_l_a ",[128,14798,4789],{"class":134},[128,14800,12386],{"class":138},[128,14802,14803,14805,14807,14810,14812,14814,14816,14818,14820,14823,14825],{"class":130,"line":584},[128,14804,10086],{"class":138},[128,14806,4789],{"class":134},[128,14808,14809],{"class":176}," \"局部常量c_l_b地址为： \"",[128,14811,5056],{"class":134},[128,14813,5260],{"class":138},[128,14815,3763],{"class":134},[128,14817,4179],{"class":138},[128,14819,4103],{"class":134},[128,14821,14822],{"class":138},"c_l_b ",[128,14824,4789],{"class":134},[128,14826,12386],{"class":138},[128,14828,14829],{"class":130,"line":593},[128,14830,160],{"emptyLinePlaceholder":159},[128,14832,14833,14835,14837,14839],{"class":130,"line":598},[128,14834,5888],{"class":199},[128,14836,253],{"class":138},[128,14838,5893],{"class":176},[128,14840,6292],{"class":138},[128,14842,14843],{"class":130,"line":603},[128,14844,160],{"emptyLinePlaceholder":159},[128,14846,14847,14849,14851],{"class":130,"line":614},[128,14848,587],{"class":134},[128,14850,7659],{"class":166},[128,14852,4905],{"class":138},[128,14854,14855],{"class":130,"line":625},[128,14856,2694],{"class":138},[19,14858,14859],{},"总结：",[4752,14861,14862,14865,14868,14871],{},[29,14863,14864],{},"c++中程序运行前分为全局区和代码区",[29,14866,14867],{},"代码区特点是共享和只读",[29,14869,14870],{},"全局区中存放全局变量、静态变量、常量",[29,14872,14873],{},"常量区中存放const修饰的全局常量和字符串常量",[72,14875,14877],{"id":14876},"_512程序运行后","5.1.2程序运行后",[26,14879,14880],{},[29,14881,14882],{},"栈区：",[4752,14884,14885,14892],{},[29,14886,14887,14888,14891],{},"由编译器自动分配释放, 存放",[3903,14889,14890],{},"函数的参数值,局部变量","等",[29,14893,14894,14895,14898],{},"注意事项：",[3903,14896,14897],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[106,14900,14902],{"className":3749,"code":14901,"language":3751,"meta":112,"style":112},"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",[114,14903,14904,14915,14919,14934,14946,14950,14954,14962,14967,14982,15000,15017,15027,15035],{"__ignoreMap":112},[128,14905,14906,14908,14910,14913],{"class":130,"line":131},[128,14907,3763],{"class":134},[128,14909,10075],{"class":134},[128,14911,14912],{"class":199}," func",[128,14914,5563],{"class":138},[128,14916,14917],{"class":130,"line":142},[128,14918,5157],{"class":138},[128,14920,14921,14923,14925,14927,14929,14931],{"class":130,"line":156},[128,14922,5572],{"class":134},[128,14924,14396],{"class":138},[128,14926,270],{"class":134},[128,14928,5625],{"class":166},[128,14930,3811],{"class":138},[128,14932,14933],{"class":3814}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[128,14935,14936,14938,14940,14943],{"class":130,"line":163},[128,14937,587],{"class":134},[128,14939,14111],{"class":134},[128,14941,14942],{"class":138},"a;",[128,14944,14945],{"class":3814}," \u002F\u002F放回局部变量的地址\n",[128,14947,14948],{"class":130,"line":183},[128,14949,2694],{"class":138},[128,14951,14952],{"class":130,"line":188},[128,14953,160],{"emptyLinePlaceholder":159},[128,14955,14956,14958,14960],{"class":130,"line":193},[128,14957,3763],{"class":134},[128,14959,1575],{"class":199},[128,14961,14380],{"class":138},[128,14963,14964],{"class":130,"line":206},[128,14965,14966],{"class":3814},"    \u002F\u002F接受func的返回值\n",[128,14968,14969,14971,14973,14976,14978,14980],{"class":130,"line":221},[128,14970,5572],{"class":134},[128,14972,10075],{"class":134},[128,14974,14975],{"class":138},"p ",[128,14977,270],{"class":134},[128,14979,14912],{"class":199},[128,14981,9194],{"class":138},[128,14983,14984,14986,14988,14990,14992,14994,14997],{"class":130,"line":230},[128,14985,10086],{"class":138},[128,14987,4789],{"class":134},[128,14989,10075],{"class":134},[128,14991,14975],{"class":138},[128,14993,4789],{"class":134},[128,14995,14996],{"class":138}," endl;",[128,14998,14999],{"class":3814}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[128,15001,15002,15004,15006,15008,15010,15012,15014],{"class":130,"line":235},[128,15003,10086],{"class":138},[128,15005,4789],{"class":134},[128,15007,10075],{"class":134},[128,15009,14975],{"class":138},[128,15011,4789],{"class":134},[128,15013,14996],{"class":138},[128,15015,15016],{"class":3814}," \u002F\u002F第二次这个数据不再保留\n",[128,15018,15019,15021,15023,15025],{"class":130,"line":244},[128,15020,5888],{"class":199},[128,15022,253],{"class":138},[128,15024,5893],{"class":176},[128,15026,6292],{"class":138},[128,15028,15029,15031,15033],{"class":130,"line":287},[128,15030,587],{"class":134},[128,15032,7659],{"class":166},[128,15034,4905],{"class":138},[128,15036,15037],{"class":130,"line":301},[128,15038,2694],{"class":138},[19,15040,15041],{},"输出结果：",[19,15043,15044],{},[5074,15045],{"alt":15046,"src":15047},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,15049,15050],{},"总结：不要返回局部变量的地址",[26,15052,15053],{"start":142},[29,15054,15055],{},"堆区",[4752,15057,15058,15061],{},[29,15059,15060],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[29,15062,15063],{},"在c++中主要利用new在堆区开辟内存",[106,15065,15067],{"className":3749,"code":15066,"language":3751,"meta":112,"style":112},"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",[114,15068,15069,15084,15088,15093,15114,15121,15125,15133,15137,15142,15156,15168],{"__ignoreMap":112},[128,15070,15071,15073,15076,15079,15081],{"class":130,"line":131},[128,15072,3763],{"class":134},[128,15074,15075],{"class":134},"  *",[128,15077,15078],{"class":199},"func",[128,15080,6010],{"class":138},[128,15082,15083],{"class":3814},"  \u002F\u002F函数返回指针\n",[128,15085,15086],{"class":130,"line":142},[128,15087,5157],{"class":138},[128,15089,15090],{"class":130,"line":156},[128,15091,15092],{"class":3814},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[128,15094,15095,15097,15099,15101,15103,15106,15108,15110,15112],{"class":130,"line":163},[128,15096,7713],{"class":134},[128,15098,10075],{"class":134},[128,15100,19],{"class":138},[128,15102,270],{"class":134},[128,15104,15105],{"class":134}," new",[128,15107,638],{"class":134},[128,15109,253],{"class":138},[128,15111,4196],{"class":166},[128,15113,6292],{"class":138},[128,15115,15116,15118],{"class":130,"line":183},[128,15117,7947],{"class":134},[128,15119,15120],{"class":138}," p;\n",[128,15122,15123],{"class":130,"line":188},[128,15124,2694],{"class":138},[128,15126,15127,15129,15131],{"class":130,"line":193},[128,15128,3763],{"class":134},[128,15130,1575],{"class":199},[128,15132,5563],{"class":138},[128,15134,15135],{"class":130,"line":206},[128,15136,5157],{"class":138},[128,15138,15139],{"class":130,"line":221},[128,15140,15141],{"class":3814},"    \u002F\u002F在堆区开辟数据\n",[128,15143,15144,15146,15148,15150,15152,15154],{"class":130,"line":230},[128,15145,5572],{"class":134},[128,15147,10075],{"class":134},[128,15149,19],{"class":138},[128,15151,270],{"class":134},[128,15153,15078],{"class":199},[128,15155,9194],{"class":138},[128,15157,15158,15160,15162,15164,15166],{"class":130,"line":235},[128,15159,5162],{"class":138},[128,15161,9976],{"class":134},[128,15163,19],{"class":138},[128,15165,4789],{"class":134},[128,15167,4811],{"class":138},[128,15169,15170],{"class":130,"line":244},[128,15171,2694],{"class":138},[19,15173,15174],{},"图片展示：",[19,15176,15177],{},[5074,15178],{"alt":15046,"src":15179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,15181,15182],{},"堆区内存由程序员管生死！！！",[26,15184,15185],{"start":156},[29,15186,15187],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,15189,15190],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,15192,15193,15194],{},"​语法：",[114,15195,15196],{}," new 数据类型",[19,15198,15199],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[106,15201,15203],{"className":3749,"code":15202,"language":3751,"meta":112,"style":112},"\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",[114,15204,15205,15210,15220,15224,15229,15234,15256,15260,15268,15272,15286,15298,15310,15322,15327,15332,15343,15347,15352,15360,15364,15369,15391,15417,15421,15439,15443,15469,15473,15485,15489,15494,15499,15507,15511,15515,15523,15527,15533,15539],{"__ignoreMap":112},[128,15206,15207],{"class":130,"line":131},[128,15208,15209],{"class":3814},"\u002F\u002F1.new的基本语法\n",[128,15211,15212,15214,15216,15218],{"class":130,"line":142},[128,15213,3763],{"class":134},[128,15215,10075],{"class":134},[128,15217,15078],{"class":199},[128,15219,5563],{"class":138},[128,15221,15222],{"class":130,"line":156},[128,15223,5157],{"class":138},[128,15225,15226],{"class":130,"line":163},[128,15227,15228],{"class":3814},"    \u002F\u002F在堆区创建整型数据\n",[128,15230,15231],{"class":130,"line":183},[128,15232,15233],{"class":3814},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[128,15235,15236,15238,15240,15242,15245,15247,15249,15251,15253],{"class":130,"line":188},[128,15237,5572],{"class":134},[128,15239,10075],{"class":134},[128,15241,19],{"class":138},[128,15243,15244],{"class":134},"=new",[128,15246,638],{"class":134},[128,15248,253],{"class":138},[128,15250,4196],{"class":166},[128,15252,9523],{"class":138},[128,15254,15255],{"class":3814},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[128,15257,15258],{"class":130,"line":193},[128,15259,2694],{"class":138},[128,15261,15262,15264,15266],{"class":130,"line":206},[128,15263,8922],{"class":134},[128,15265,9146],{"class":199},[128,15267,5563],{"class":138},[128,15269,15270],{"class":130,"line":221},[128,15271,5157],{"class":138},[128,15273,15274,15276,15278,15280,15282,15284],{"class":130,"line":230},[128,15275,5572],{"class":134},[128,15277,10075],{"class":134},[128,15279,19],{"class":138},[128,15281,270],{"class":134},[128,15283,15078],{"class":199},[128,15285,9194],{"class":138},[128,15287,15288,15290,15292,15294,15296],{"class":130,"line":235},[128,15289,5162],{"class":138},[128,15291,9976],{"class":134},[128,15293,19],{"class":138},[128,15295,4789],{"class":134},[128,15297,4811],{"class":138},[128,15299,15300,15302,15304,15306,15308],{"class":130,"line":244},[128,15301,5162],{"class":138},[128,15303,9976],{"class":134},[128,15305,19],{"class":138},[128,15307,4789],{"class":134},[128,15309,4811],{"class":138},[128,15311,15312,15314,15316,15318,15320],{"class":130,"line":287},[128,15313,5162],{"class":138},[128,15315,9976],{"class":134},[128,15317,19],{"class":138},[128,15319,4789],{"class":134},[128,15321,4811],{"class":138},[128,15323,15324],{"class":130,"line":301},[128,15325,15326],{"class":3814},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[128,15328,15329],{"class":130,"line":310},[128,15330,15331],{"class":3814},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[128,15333,15334,15337,15340],{"class":130,"line":323},[128,15335,15336],{"class":134},"    delete",[128,15338,15339],{"class":138}," p;",[128,15341,15342],{"class":3814},"\u002F\u002F删除这块地址\n",[128,15344,15345],{"class":130,"line":330},[128,15346,2694],{"class":138},[128,15348,15349],{"class":130,"line":335},[128,15350,15351],{"class":3814},"\u002F\u002F2.在堆区利用new开辟数组\n",[128,15353,15354,15356,15358],{"class":130,"line":340},[128,15355,8922],{"class":134},[128,15357,9215],{"class":199},[128,15359,5563],{"class":138},[128,15361,15362],{"class":130,"line":351},[128,15363,5157],{"class":138},[128,15365,15366],{"class":130,"line":384},[128,15367,15368],{"class":3814},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[128,15370,15371,15373,15375,15377,15379,15381,15383,15385,15388],{"class":130,"line":414},[128,15372,5572],{"class":134},[128,15374,10075],{"class":134},[128,15376,7447],{"class":138},[128,15378,15244],{"class":134},[128,15380,638],{"class":134},[128,15382,4638],{"class":138},[128,15384,4196],{"class":166},[128,15386,15387],{"class":138},"];",[128,15389,15390],{"class":3814},"\u002F\u002F10代表数组有10个元素\n",[128,15392,15393,15395,15397,15399,15401,15403,15405,15407,15409,15411,15413,15415],{"class":130,"line":419},[128,15394,543],{"class":134},[128,15396,5260],{"class":138},[128,15398,3763],{"class":134},[128,15400,6603],{"class":138},[128,15402,270],{"class":134},[128,15404,2452],{"class":166},[128,15406,6610],{"class":138},[128,15408,4657],{"class":134},[128,15410,4196],{"class":166},[128,15412,6610],{"class":138},[128,15414,5877],{"class":134},[128,15416,180],{"class":138},[128,15418,15419],{"class":130,"line":424},[128,15420,5617],{"class":138},[128,15422,15423,15426,15428,15430,15432,15434,15436],{"class":130,"line":434},[128,15424,15425],{"class":138},"        arr[i]",[128,15427,270],{"class":134},[128,15429,4191],{"class":138},[128,15431,2457],{"class":134},[128,15433,4061],{"class":166},[128,15435,3811],{"class":138},[128,15437,15438],{"class":3814},"\u002F\u002F给10个元素赋值100～109\n",[128,15440,15441],{"class":130,"line":447},[128,15442,5773],{"class":138},[128,15444,15445,15447,15449,15451,15453,15455,15457,15459,15461,15463,15465,15467],{"class":130,"line":459},[128,15446,543],{"class":134},[128,15448,5260],{"class":138},[128,15450,3763],{"class":134},[128,15452,6603],{"class":138},[128,15454,270],{"class":134},[128,15456,2452],{"class":166},[128,15458,6610],{"class":138},[128,15460,4657],{"class":134},[128,15462,4196],{"class":166},[128,15464,6610],{"class":138},[128,15466,5877],{"class":134},[128,15468,180],{"class":138},[128,15470,15471],{"class":130,"line":471},[128,15472,5617],{"class":138},[128,15474,15475,15477,15479,15481,15483],{"class":130,"line":483},[128,15476,7019],{"class":138},[128,15478,4789],{"class":134},[128,15480,7920],{"class":138},[128,15482,4789],{"class":134},[128,15484,4811],{"class":138},[128,15486,15487],{"class":130,"line":495},[128,15488,5773],{"class":138},[128,15490,15491],{"class":130,"line":507},[128,15492,15493],{"class":3814},"    \u002F\u002F释放堆区数组\n",[128,15495,15496],{"class":130,"line":519},[128,15497,15498],{"class":3814},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[128,15500,15501,15504],{"class":130,"line":524},[128,15502,15503],{"class":134},"    delete[]",[128,15505,15506],{"class":138}," arr;\n",[128,15508,15509],{"class":130,"line":529},[128,15510,2694],{"class":138},[128,15512,15513],{"class":130,"line":540},[128,15514,160],{"emptyLinePlaceholder":159},[128,15516,15517,15519,15521],{"class":130,"line":555},[128,15518,3763],{"class":134},[128,15520,1575],{"class":199},[128,15522,5563],{"class":138},[128,15524,15525],{"class":130,"line":576},[128,15526,5157],{"class":138},[128,15528,15529,15531],{"class":130,"line":584},[128,15530,9191],{"class":199},[128,15532,9194],{"class":138},[128,15534,15535,15537],{"class":130,"line":593},[128,15536,9260],{"class":199},[128,15538,9194],{"class":138},[128,15540,15541],{"class":130,"line":598},[128,15542,2694],{"class":138},[3659,15544,15545],{},"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":112,"searchDepth":142,"depth":142,"links":15547},[15548],{"id":14216,"depth":142,"text":14217,"children":15549},[15550,15551],{"id":14248,"depth":156,"text":14249},{"id":14876,"depth":156,"text":14877},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":14208,"description":112},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":15558,"title":15559,"body":15560,"description":112,"extension":3687,"meta":17040,"navigation":159,"path":17041,"seo":17042,"stem":17043,"__hash__":17044},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":15561,"toc":17032},[15562,15565,15569,15572,15575,15744,15748,15753,15770,15775,15927,15931,15934,15937,16330,16334,16337,16342,16345,16657,16661,16667,16827,16829,16837,16841,16844,16851,17029],[10,15563,15559],{"id":15564},"_6引用",[14,15566,15568],{"id":15567},"_61引用基本用法","6.1引用基本用法",[19,15570,15571],{},"引用的本质：给变量起别名",[19,15573,15574],{},"语法：数据类型 &别名=原名",[106,15576,15578],{"className":3749,"code":15577,"language":3751,"meta":112,"style":112},"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",[114,15579,15580,15588,15592,15604,15616,15620,15639,15658,15662,15673,15677,15696,15714,15718,15728,15732,15740],{"__ignoreMap":112},[128,15581,15582,15584,15586],{"class":130,"line":131},[128,15583,3763],{"class":134},[128,15585,1575],{"class":199},[128,15587,14380],{"class":138},[128,15589,15590],{"class":130,"line":142},[128,15591,160],{"emptyLinePlaceholder":159},[128,15593,15594,15596,15598,15600,15602],{"class":130,"line":156},[128,15595,5572],{"class":134},[128,15597,14396],{"class":138},[128,15599,270],{"class":134},[128,15601,5625],{"class":166},[128,15603,4905],{"class":138},[128,15605,15606,15608,15610,15612,15614],{"class":130,"line":163},[128,15607,5572],{"class":134},[128,15609,14111],{"class":134},[128,15611,14472],{"class":138},[128,15613,270],{"class":134},[128,15615,5044],{"class":138},[128,15617,15618],{"class":130,"line":183},[128,15619,160],{"emptyLinePlaceholder":159},[128,15621,15622,15624,15626,15629,15631,15633,15635,15637],{"class":130,"line":188},[128,15623,10086],{"class":138},[128,15625,4789],{"class":134},[128,15627,15628],{"class":176}," \"a = \"",[128,15630,5056],{"class":134},[128,15632,14396],{"class":138},[128,15634,4789],{"class":134},[128,15636,14996],{"class":138},[128,15638,10825],{"class":3814},[128,15640,15641,15643,15645,15648,15650,15652,15654,15656],{"class":130,"line":193},[128,15642,10086],{"class":138},[128,15644,4789],{"class":134},[128,15646,15647],{"class":176}," \"b = \"",[128,15649,5056],{"class":134},[128,15651,14409],{"class":138},[128,15653,4789],{"class":134},[128,15655,14996],{"class":138},[128,15657,10825],{"class":3814},[128,15659,15660],{"class":130,"line":206},[128,15661,160],{"emptyLinePlaceholder":159},[128,15663,15664,15667,15669,15671],{"class":130,"line":221},[128,15665,15666],{"class":138},"    b ",[128,15668,270],{"class":134},[128,15670,9312],{"class":166},[128,15672,4905],{"class":138},[128,15674,15675],{"class":130,"line":230},[128,15676,160],{"emptyLinePlaceholder":159},[128,15678,15679,15681,15683,15685,15687,15689,15691,15693],{"class":130,"line":235},[128,15680,10086],{"class":138},[128,15682,4789],{"class":134},[128,15684,15628],{"class":176},[128,15686,5056],{"class":134},[128,15688,14396],{"class":138},[128,15690,4789],{"class":134},[128,15692,14996],{"class":138},[128,15694,15695],{"class":3814},"\u002F\u002F100\n",[128,15697,15698,15700,15702,15704,15706,15708,15710,15712],{"class":130,"line":244},[128,15699,10086],{"class":138},[128,15701,4789],{"class":134},[128,15703,15647],{"class":176},[128,15705,5056],{"class":134},[128,15707,14409],{"class":138},[128,15709,4789],{"class":134},[128,15711,14996],{"class":138},[128,15713,15695],{"class":3814},[128,15715,15716],{"class":130,"line":287},[128,15717,160],{"emptyLinePlaceholder":159},[128,15719,15720,15722,15724,15726],{"class":130,"line":301},[128,15721,5888],{"class":199},[128,15723,253],{"class":138},[128,15725,5893],{"class":176},[128,15727,6292],{"class":138},[128,15729,15730],{"class":130,"line":310},[128,15731,160],{"emptyLinePlaceholder":159},[128,15733,15734,15736,15738],{"class":130,"line":323},[128,15735,587],{"class":134},[128,15737,7659],{"class":166},[128,15739,4905],{"class":138},[128,15741,15742],{"class":130,"line":330},[128,15743,2694],{"class":138},[14,15745,15747],{"id":15746},"_62引用的注意事项","6.2引用的注意事项",[26,15749,15750],{},[29,15751,15752],{},"引用必须要初始化",[106,15754,15756],{"className":3749,"code":15755,"language":3751,"meta":112,"style":112},"int &b;\u002F\u002F非常错误！\n",[114,15757,15758],{"__ignoreMap":112},[128,15759,15760,15762,15764,15767],{"class":130,"line":131},[128,15761,3763],{"class":134},[128,15763,14111],{"class":134},[128,15765,15766],{"class":138},"b;",[128,15768,15769],{"class":3814},"\u002F\u002F非常错误！\n",[26,15771,15772],{"start":142},[29,15773,15774],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[106,15776,15778],{"className":3749,"code":15777,"language":3751,"meta":112,"style":112},"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",[114,15779,15780,15788,15800,15812,15820,15836,15849,15867,15885,15905,15915,15923],{"__ignoreMap":112},[128,15781,15782,15784,15786],{"class":130,"line":131},[128,15783,3763],{"class":134},[128,15785,1575],{"class":199},[128,15787,14380],{"class":138},[128,15789,15790,15792,15794,15796,15798],{"class":130,"line":142},[128,15791,5572],{"class":134},[128,15793,14396],{"class":138},[128,15795,270],{"class":134},[128,15797,5625],{"class":166},[128,15799,4905],{"class":138},[128,15801,15802,15804,15806,15808,15810],{"class":130,"line":156},[128,15803,5572],{"class":134},[128,15805,14409],{"class":138},[128,15807,270],{"class":134},[128,15809,12496],{"class":166},[128,15811,4905],{"class":138},[128,15813,15814,15817],{"class":130,"line":163},[128,15815,15816],{"class":3814},"    \u002F\u002Fint &c;",[128,15818,15819],{"class":3814}," \u002F\u002F错误，引用必须初始化\n",[128,15821,15822,15824,15826,15828,15830,15833],{"class":130,"line":183},[128,15823,5572],{"class":134},[128,15825,14111],{"class":134},[128,15827,6519],{"class":138},[128,15829,270],{"class":134},[128,15831,15832],{"class":138}," a;",[128,15834,15835],{"class":3814}," \u002F\u002F一旦初始化后，就不可以更改\n",[128,15837,15838,15841,15843,15846],{"class":130,"line":188},[128,15839,15840],{"class":138},"    c ",[128,15842,270],{"class":134},[128,15844,15845],{"class":138}," b;",[128,15847,15848],{"class":3814}," \u002F\u002F这是赋值操作，不是更改引用\n",[128,15850,15851,15853,15855,15857,15859,15861,15863,15865],{"class":130,"line":193},[128,15852,10086],{"class":138},[128,15854,4789],{"class":134},[128,15856,15628],{"class":176},[128,15858,5056],{"class":134},[128,15860,14396],{"class":138},[128,15862,4789],{"class":134},[128,15864,14996],{"class":138},[128,15866,10810],{"class":3814},[128,15868,15869,15871,15873,15875,15877,15879,15881,15883],{"class":130,"line":206},[128,15870,10086],{"class":138},[128,15872,4789],{"class":134},[128,15874,15647],{"class":176},[128,15876,5056],{"class":134},[128,15878,14409],{"class":138},[128,15880,4789],{"class":134},[128,15882,14996],{"class":138},[128,15884,10810],{"class":3814},[128,15886,15887,15889,15891,15894,15896,15899,15901,15903],{"class":130,"line":221},[128,15888,10086],{"class":138},[128,15890,4789],{"class":134},[128,15892,15893],{"class":176}," \"c = \"",[128,15895,5056],{"class":134},[128,15897,15898],{"class":138}," c ",[128,15900,4789],{"class":134},[128,15902,14996],{"class":138},[128,15904,10810],{"class":3814},[128,15906,15907,15909,15911,15913],{"class":130,"line":230},[128,15908,5888],{"class":199},[128,15910,253],{"class":138},[128,15912,5893],{"class":176},[128,15914,6292],{"class":138},[128,15916,15917,15919,15921],{"class":130,"line":235},[128,15918,587],{"class":134},[128,15920,7659],{"class":166},[128,15922,4905],{"class":138},[128,15924,15925],{"class":130,"line":244},[128,15926,2694],{"class":138},[14,15928,15930],{"id":15929},"_63引用做函数参数","6.3引用做函数参数",[19,15932,15933],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,15935,15936],{},"优点：可以简化指针修改实参",[106,15938,15940],{"className":3749,"code":15939,"language":3751,"meta":112,"style":112},"\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",[114,15941,15942,15947,15969,15980,15990,15999,16003,16007,16012,16034,16046,16058,16068,16072,16076,16081,16103,16113,16121,16129,16133,16137,16145,16149,16161,16173,16177,16188,16214,16218,16238,16262,16266,16276,16300,16304,16314,16318,16326],{"__ignoreMap":112},[128,15943,15944],{"class":130,"line":131},[128,15945,15946],{"class":3814},"\u002F\u002F1. 值传递\n",[128,15948,15949,15951,15954,15956,15958,15960,15962,15964,15966],{"class":130,"line":142},[128,15950,8922],{"class":134},[128,15952,15953],{"class":199}," mySwap01",[128,15955,253],{"class":138},[128,15957,3763],{"class":134},[128,15959,5010],{"class":266},[128,15961,258],{"class":138},[128,15963,3763],{"class":134},[128,15965,6406],{"class":266},[128,15967,15968],{"class":138},") {\n",[128,15970,15971,15973,15976,15978],{"class":130,"line":156},[128,15972,5572],{"class":134},[128,15974,15975],{"class":138}," temp ",[128,15977,270],{"class":134},[128,15979,5044],{"class":138},[128,15981,15982,15985,15987],{"class":130,"line":163},[128,15983,15984],{"class":138},"    a ",[128,15986,270],{"class":134},[128,15988,15989],{"class":138}," b;\n",[128,15991,15992,15994,15996],{"class":130,"line":183},[128,15993,15666],{"class":138},[128,15995,270],{"class":134},[128,15997,15998],{"class":138}," temp;\n",[128,16000,16001],{"class":130,"line":188},[128,16002,2694],{"class":138},[128,16004,16005],{"class":130,"line":193},[128,16006,160],{"emptyLinePlaceholder":159},[128,16008,16009],{"class":130,"line":206},[128,16010,16011],{"class":3814},"\u002F\u002F2. 地址传递\n",[128,16013,16014,16016,16019,16021,16024,16026,16028,16030,16032],{"class":130,"line":221},[128,16015,8922],{"class":134},[128,16017,16018],{"class":199}," mySwap02",[128,16020,253],{"class":138},[128,16022,16023],{"class":134},"int*",[128,16025,5010],{"class":266},[128,16027,258],{"class":138},[128,16029,16023],{"class":134},[128,16031,6406],{"class":266},[128,16033,15968],{"class":138},[128,16035,16036,16038,16040,16042,16044],{"class":130,"line":230},[128,16037,5572],{"class":134},[128,16039,15975],{"class":138},[128,16041,270],{"class":134},[128,16043,10075],{"class":134},[128,16045,9754],{"class":138},[128,16047,16048,16050,16052,16054,16056],{"class":130,"line":235},[128,16049,9960],{"class":134},[128,16051,14446],{"class":138},[128,16053,270],{"class":134},[128,16055,10075],{"class":134},[128,16057,9626],{"class":138},[128,16059,16060,16062,16064,16066],{"class":130,"line":244},[128,16061,9960],{"class":134},[128,16063,14472],{"class":138},[128,16065,270],{"class":134},[128,16067,15998],{"class":138},[128,16069,16070],{"class":130,"line":287},[128,16071,2694],{"class":138},[128,16073,16074],{"class":130,"line":301},[128,16075,160],{"emptyLinePlaceholder":159},[128,16077,16078],{"class":130,"line":310},[128,16079,16080],{"class":3814},"\u002F\u002F3. 引用传递\n",[128,16082,16083,16085,16088,16090,16093,16095,16097,16099,16101],{"class":130,"line":323},[128,16084,8922],{"class":134},[128,16086,16087],{"class":199}," mySwap03",[128,16089,253],{"class":138},[128,16091,16092],{"class":134},"int&",[128,16094,5010],{"class":266},[128,16096,258],{"class":138},[128,16098,16092],{"class":134},[128,16100,6406],{"class":266},[128,16102,15968],{"class":138},[128,16104,16105,16107,16109,16111],{"class":130,"line":330},[128,16106,5572],{"class":134},[128,16108,15975],{"class":138},[128,16110,270],{"class":134},[128,16112,5044],{"class":138},[128,16114,16115,16117,16119],{"class":130,"line":335},[128,16116,15984],{"class":138},[128,16118,270],{"class":134},[128,16120,15989],{"class":138},[128,16122,16123,16125,16127],{"class":130,"line":340},[128,16124,15666],{"class":138},[128,16126,270],{"class":134},[128,16128,15998],{"class":138},[128,16130,16131],{"class":130,"line":351},[128,16132,2694],{"class":138},[128,16134,16135],{"class":130,"line":384},[128,16136,160],{"emptyLinePlaceholder":159},[128,16138,16139,16141,16143],{"class":130,"line":414},[128,16140,3763],{"class":134},[128,16142,1575],{"class":199},[128,16144,14380],{"class":138},[128,16146,16147],{"class":130,"line":419},[128,16148,160],{"emptyLinePlaceholder":159},[128,16150,16151,16153,16155,16157,16159],{"class":130,"line":424},[128,16152,5572],{"class":134},[128,16154,14396],{"class":138},[128,16156,270],{"class":134},[128,16158,5625],{"class":166},[128,16160,4905],{"class":138},[128,16162,16163,16165,16167,16169,16171],{"class":130,"line":434},[128,16164,5572],{"class":134},[128,16166,14409],{"class":138},[128,16168,270],{"class":134},[128,16170,12496],{"class":166},[128,16172,4905],{"class":138},[128,16174,16175],{"class":130,"line":447},[128,16176,160],{"emptyLinePlaceholder":159},[128,16178,16179,16182,16185],{"class":130,"line":459},[128,16180,16181],{"class":199},"    mySwap01",[128,16183,16184],{"class":138},"(a, b);",[128,16186,16187],{"class":3814},"\u002F\u002F值传递，形参不会修饰实参\n",[128,16189,16190,16192,16194,16197,16199,16201,16203,16206,16208,16210,16212],{"class":130,"line":471},[128,16191,10086],{"class":138},[128,16193,4789],{"class":134},[128,16195,16196],{"class":176}," \"a:\"",[128,16198,5056],{"class":134},[128,16200,14396],{"class":138},[128,16202,4789],{"class":134},[128,16204,16205],{"class":176}," \" b:\"",[128,16207,5056],{"class":134},[128,16209,14409],{"class":138},[128,16211,4789],{"class":134},[128,16213,12386],{"class":138},[128,16215,16216],{"class":130,"line":483},[128,16217,160],{"emptyLinePlaceholder":159},[128,16219,16220,16223,16225,16227,16230,16232,16235],{"class":130,"line":495},[128,16221,16222],{"class":199},"    mySwap02",[128,16224,253],{"class":138},[128,16226,4103],{"class":134},[128,16228,16229],{"class":138},"a, ",[128,16231,4103],{"class":134},[128,16233,16234],{"class":138},"b);",[128,16236,16237],{"class":3814},"\u002F\u002F地址传递，形参会修饰实参\n",[128,16239,16240,16242,16244,16246,16248,16250,16252,16254,16256,16258,16260],{"class":130,"line":507},[128,16241,10086],{"class":138},[128,16243,4789],{"class":134},[128,16245,16196],{"class":176},[128,16247,5056],{"class":134},[128,16249,14396],{"class":138},[128,16251,4789],{"class":134},[128,16253,16205],{"class":176},[128,16255,5056],{"class":134},[128,16257,14409],{"class":138},[128,16259,4789],{"class":134},[128,16261,12386],{"class":138},[128,16263,16264],{"class":130,"line":519},[128,16265,160],{"emptyLinePlaceholder":159},[128,16267,16268,16271,16273],{"class":130,"line":524},[128,16269,16270],{"class":199},"    mySwap03",[128,16272,16184],{"class":138},[128,16274,16275],{"class":3814},"\u002F\u002F引用传递，形参会修饰实参\n",[128,16277,16278,16280,16282,16284,16286,16288,16290,16292,16294,16296,16298],{"class":130,"line":529},[128,16279,10086],{"class":138},[128,16281,4789],{"class":134},[128,16283,16196],{"class":176},[128,16285,5056],{"class":134},[128,16287,14396],{"class":138},[128,16289,4789],{"class":134},[128,16291,16205],{"class":176},[128,16293,5056],{"class":134},[128,16295,14409],{"class":138},[128,16297,4789],{"class":134},[128,16299,12386],{"class":138},[128,16301,16302],{"class":130,"line":540},[128,16303,160],{"emptyLinePlaceholder":159},[128,16305,16306,16308,16310,16312],{"class":130,"line":555},[128,16307,5888],{"class":199},[128,16309,253],{"class":138},[128,16311,5893],{"class":176},[128,16313,6292],{"class":138},[128,16315,16316],{"class":130,"line":576},[128,16317,160],{"emptyLinePlaceholder":159},[128,16319,16320,16322,16324],{"class":130,"line":584},[128,16321,587],{"class":134},[128,16323,7659],{"class":166},[128,16325,4905],{"class":138},[128,16327,16328],{"class":130,"line":593},[128,16329,2694],{"class":138},[14,16331,16333],{"id":16332},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,16335,16336],{},"作用：引用是可以作为函数的返回值存在的",[19,16338,12571,16339],{},[3903,16340,16341],{},"不要返回局部变量引用",[19,16343,16344],{},"用法：函数调用作为左值",[106,16346,16348],{"className":13468,"code":16347,"language":13470,"meta":112,"style":112},"\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",[114,16349,16350,16355,16363,16378,16384,16388,16392,16397,16405,16422,16428,16432,16436,16444,16448,16453,16467,16487,16506,16510,16515,16528,16548,16566,16570,16586,16590,16609,16627,16631,16641,16645,16653],{"__ignoreMap":112},[128,16351,16352],{"class":130,"line":131},[128,16353,16354],{"class":3814},"\u002F\u002F返回局部变量引用\n",[128,16356,16357,16359,16361],{"class":130,"line":142},[128,16358,16092],{"class":134},[128,16360,9146],{"class":199},[128,16362,14380],{"class":138},[128,16364,16365,16367,16369,16371,16373,16375],{"class":130,"line":156},[128,16366,5572],{"class":134},[128,16368,14396],{"class":138},[128,16370,270],{"class":134},[128,16372,5625],{"class":166},[128,16374,3811],{"class":138},[128,16376,16377],{"class":3814}," \u002F\u002F局部变量\n",[128,16379,16380,16382],{"class":130,"line":163},[128,16381,587],{"class":134},[128,16383,5044],{"class":138},[128,16385,16386],{"class":130,"line":183},[128,16387,2694],{"class":138},[128,16389,16390],{"class":130,"line":188},[128,16391,160],{"emptyLinePlaceholder":159},[128,16393,16394],{"class":130,"line":193},[128,16395,16396],{"class":3814},"\u002F\u002F返回静态变量引用\n",[128,16398,16399,16401,16403],{"class":130,"line":206},[128,16400,16092],{"class":134},[128,16402,9215],{"class":199},[128,16404,14380],{"class":138},[128,16406,16407,16409,16411,16413,16415,16417,16419],{"class":130,"line":221},[128,16408,14547],{"class":134},[128,16410,638],{"class":134},[128,16412,14396],{"class":138},[128,16414,270],{"class":134},[128,16416,12496],{"class":166},[128,16418,3811],{"class":138},[128,16420,16421],{"class":3814},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[128,16423,16424,16426],{"class":130,"line":230},[128,16425,587],{"class":134},[128,16427,5044],{"class":138},[128,16429,16430],{"class":130,"line":235},[128,16431,2694],{"class":138},[128,16433,16434],{"class":130,"line":244},[128,16435,160],{"emptyLinePlaceholder":159},[128,16437,16438,16440,16442],{"class":130,"line":287},[128,16439,3763],{"class":134},[128,16441,1575],{"class":199},[128,16443,14380],{"class":138},[128,16445,16446],{"class":130,"line":301},[128,16447,160],{"emptyLinePlaceholder":159},[128,16449,16450],{"class":130,"line":310},[128,16451,16452],{"class":3814},"    \u002F\u002F不能返回局部变量的引用\n",[128,16454,16455,16458,16461,16463,16465],{"class":130,"line":323},[128,16456,16457],{"class":134},"    int&",[128,16459,16460],{"class":138}," ref ",[128,16462,270],{"class":134},[128,16464,9146],{"class":199},[128,16466,9194],{"class":138},[128,16468,16469,16471,16473,16476,16478,16480,16482,16484],{"class":130,"line":330},[128,16470,10086],{"class":138},[128,16472,4789],{"class":134},[128,16474,16475],{"class":176}," \"ref = \"",[128,16477,5056],{"class":134},[128,16479,16460],{"class":138},[128,16481,4789],{"class":134},[128,16483,14996],{"class":138},[128,16485,16486],{"class":3814},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[128,16488,16489,16491,16493,16495,16497,16499,16501,16503],{"class":130,"line":335},[128,16490,10086],{"class":138},[128,16492,4789],{"class":134},[128,16494,16475],{"class":176},[128,16496,5056],{"class":134},[128,16498,16460],{"class":138},[128,16500,4789],{"class":134},[128,16502,14996],{"class":138},[128,16504,16505],{"class":3814},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[128,16507,16508],{"class":130,"line":340},[128,16509,160],{"emptyLinePlaceholder":159},[128,16511,16512],{"class":130,"line":351},[128,16513,16514],{"class":3814},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[128,16516,16517,16519,16522,16524,16526],{"class":130,"line":384},[128,16518,16457],{"class":134},[128,16520,16521],{"class":138}," ref2 ",[128,16523,270],{"class":134},[128,16525,9215],{"class":199},[128,16527,9194],{"class":138},[128,16529,16530,16532,16534,16537,16539,16541,16543,16545],{"class":130,"line":414},[128,16531,10086],{"class":138},[128,16533,4789],{"class":134},[128,16535,16536],{"class":176}," \"ref2 = \"",[128,16538,5056],{"class":134},[128,16540,16521],{"class":138},[128,16542,4789],{"class":134},[128,16544,14996],{"class":138},[128,16546,16547],{"class":3814}," \u002F\u002F20\n",[128,16549,16550,16552,16554,16556,16558,16560,16562,16564],{"class":130,"line":419},[128,16551,10086],{"class":138},[128,16553,4789],{"class":134},[128,16555,16536],{"class":176},[128,16557,5056],{"class":134},[128,16559,16521],{"class":138},[128,16561,4789],{"class":134},[128,16563,14996],{"class":138},[128,16565,16547],{"class":3814},[128,16567,16568],{"class":130,"line":424},[128,16569,160],{"emptyLinePlaceholder":159},[128,16571,16572,16574,16577,16579,16581,16583],{"class":130,"line":434},[128,16573,9260],{"class":199},[128,16575,16576],{"class":138},"() ",[128,16578,270],{"class":134},[128,16580,6571],{"class":166},[128,16582,3811],{"class":138},[128,16584,16585],{"class":3814},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[128,16587,16588],{"class":130,"line":447},[128,16589,160],{"emptyLinePlaceholder":159},[128,16591,16592,16594,16596,16598,16600,16602,16604,16606],{"class":130,"line":459},[128,16593,10086],{"class":138},[128,16595,4789],{"class":134},[128,16597,16536],{"class":176},[128,16599,5056],{"class":134},[128,16601,16521],{"class":138},[128,16603,4789],{"class":134},[128,16605,14996],{"class":138},[128,16607,16608],{"class":3814}," \u002F\u002F1000\n",[128,16610,16611,16613,16615,16617,16619,16621,16623,16625],{"class":130,"line":471},[128,16612,10086],{"class":138},[128,16614,4789],{"class":134},[128,16616,16536],{"class":176},[128,16618,5056],{"class":134},[128,16620,16521],{"class":138},[128,16622,4789],{"class":134},[128,16624,14996],{"class":138},[128,16626,16608],{"class":3814},[128,16628,16629],{"class":130,"line":483},[128,16630,160],{"emptyLinePlaceholder":159},[128,16632,16633,16635,16637,16639],{"class":130,"line":495},[128,16634,5888],{"class":199},[128,16636,253],{"class":138},[128,16638,5893],{"class":176},[128,16640,6292],{"class":138},[128,16642,16643],{"class":130,"line":507},[128,16644,160],{"emptyLinePlaceholder":159},[128,16646,16647,16649,16651],{"class":130,"line":519},[128,16648,587],{"class":134},[128,16650,7659],{"class":166},[128,16652,4905],{"class":138},[128,16654,16655],{"class":130,"line":524},[128,16656,2694],{"class":138},[14,16658,16660],{"id":16659},"_65引用的本质","6.5引用的本质",[19,16662,16663,16664],{},"本质：",[3903,16665,16666],{},"引用的本质在c++内部实现是一个指针常量.",[106,16668,16670],{"className":3749,"code":16669,"language":3751,"meta":112,"style":112},"\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",[114,16671,16672,16677,16693,16707,16711,16720,16732,16737,16742,16753,16766,16770,16786,16803,16807,16815,16823],{"__ignoreMap":112},[128,16673,16674],{"class":130,"line":131},[128,16675,16676],{"class":3814},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[128,16678,16679,16681,16683,16685,16687,16690],{"class":130,"line":142},[128,16680,8922],{"class":134},[128,16682,14912],{"class":199},[128,16684,253],{"class":138},[128,16686,16092],{"class":134},[128,16688,16689],{"class":266}," ref",[128,16691,16692],{"class":138},"){\n",[128,16694,16695,16698,16700,16702,16704],{"class":130,"line":156},[128,16696,16697],{"class":138},"    ref ",[128,16699,270],{"class":134},[128,16701,9312],{"class":166},[128,16703,3811],{"class":138},[128,16705,16706],{"class":3814}," \u002F\u002F ref是引用，转换为*ref = 100\n",[128,16708,16709],{"class":130,"line":163},[128,16710,2694],{"class":138},[128,16712,16713,16715,16717],{"class":130,"line":183},[128,16714,3763],{"class":134},[128,16716,1575],{"class":199},[128,16718,16719],{"class":138},"(){\n",[128,16721,16722,16724,16726,16728,16730],{"class":130,"line":188},[128,16723,5572],{"class":134},[128,16725,14396],{"class":138},[128,16727,270],{"class":134},[128,16729,5625],{"class":166},[128,16731,4905],{"class":138},[128,16733,16734],{"class":130,"line":193},[128,16735,16736],{"class":138},"    \n",[128,16738,16739],{"class":130,"line":206},[128,16740,16741],{"class":3814},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[128,16743,16744,16746,16748,16750],{"class":130,"line":221},[128,16745,16457],{"class":134},[128,16747,16460],{"class":138},[128,16749,270],{"class":134},[128,16751,16752],{"class":138}," a; \n",[128,16754,16755,16757,16759,16761,16763],{"class":130,"line":230},[128,16756,16697],{"class":138},[128,16758,270],{"class":134},[128,16760,12496],{"class":166},[128,16762,3811],{"class":138},[128,16764,16765],{"class":3814}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[128,16767,16768],{"class":130,"line":235},[128,16769,16736],{"class":138},[128,16771,16772,16774,16776,16778,16780,16782,16784],{"class":130,"line":244},[128,16773,10086],{"class":138},[128,16775,4789],{"class":134},[128,16777,16196],{"class":176},[128,16779,5056],{"class":134},[128,16781,14396],{"class":138},[128,16783,4789],{"class":134},[128,16785,12386],{"class":138},[128,16787,16788,16790,16792,16795,16797,16799,16801],{"class":130,"line":287},[128,16789,10086],{"class":138},[128,16791,4789],{"class":134},[128,16793,16794],{"class":176}," \"ref:\"",[128,16796,5056],{"class":134},[128,16798,16460],{"class":138},[128,16800,4789],{"class":134},[128,16802,12386],{"class":138},[128,16804,16805],{"class":130,"line":301},[128,16806,16736],{"class":138},[128,16808,16809,16812],{"class":130,"line":310},[128,16810,16811],{"class":199},"    func",[128,16813,16814],{"class":138},"(a);\n",[128,16816,16817,16819,16821],{"class":130,"line":323},[128,16818,587],{"class":134},[128,16820,7659],{"class":166},[128,16822,4905],{"class":138},[128,16824,16825],{"class":130,"line":330},[128,16826,2694],{"class":138},[19,16828,14859],{},[26,16830,16831,16834],{},[29,16832,16833],{},"引用的本质，就是一个指针常量",[29,16835,16836],{},"引用一旦初始化，就不可以发生改变",[14,16838,16840],{"id":16839},"_66常量引用","6.6常量引用",[19,16842,16843],{},"作用：常量引用主要用来修饰形参",[19,16845,16846,16847,16850],{},"在函数形参列表中，可以加",[3903,16848,16849],{},"const修饰形参","，防止形参改变实参",[106,16852,16854],{"className":3749,"code":16853,"language":3751,"meta":112,"style":112},"\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",[114,16855,16856,16861,16866,16885,16890,16903,16907,16911,16919,16923,16928,16933,16947,16951,16959,16971,16975,16980,16992,16999,17003,17013,17017,17025],{"__ignoreMap":112},[128,16857,16858],{"class":130,"line":131},[128,16859,16860],{"class":3814},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[128,16862,16863],{"class":130,"line":142},[128,16864,16865],{"class":3814},"\u002F\u002F加上const就不能修改实参的\n",[128,16867,16868,16870,16873,16875,16877,16880,16883],{"class":130,"line":156},[128,16869,8922],{"class":134},[128,16871,16872],{"class":199}," showValue",[128,16874,253],{"class":138},[128,16876,10349],{"class":134},[128,16878,16879],{"class":134}," int&",[128,16881,16882],{"class":266}," v",[128,16884,15968],{"class":138},[128,16886,16887],{"class":130,"line":163},[128,16888,16889],{"class":3814},"    \u002F\u002Fv += 100;\n",[128,16891,16892,16894,16896,16899,16901],{"class":130,"line":183},[128,16893,10086],{"class":138},[128,16895,4789],{"class":134},[128,16897,16898],{"class":138}," v ",[128,16900,4789],{"class":134},[128,16902,12386],{"class":138},[128,16904,16905],{"class":130,"line":188},[128,16906,2694],{"class":138},[128,16908,16909],{"class":130,"line":193},[128,16910,160],{"emptyLinePlaceholder":159},[128,16912,16913,16915,16917],{"class":130,"line":206},[128,16914,3763],{"class":134},[128,16916,1575],{"class":199},[128,16918,14380],{"class":138},[128,16920,16921],{"class":130,"line":221},[128,16922,160],{"emptyLinePlaceholder":159},[128,16924,16925],{"class":130,"line":230},[128,16926,16927],{"class":3814},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[128,16929,16930],{"class":130,"line":235},[128,16931,16932],{"class":3814},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[128,16934,16935,16937,16939,16941,16943,16945],{"class":130,"line":244},[128,16936,14748],{"class":134},[128,16938,16879],{"class":134},[128,16940,16460],{"class":138},[128,16942,270],{"class":134},[128,16944,5625],{"class":166},[128,16946,4905],{"class":138},[128,16948,16949],{"class":130,"line":287},[128,16950,160],{"emptyLinePlaceholder":159},[128,16952,16953,16956],{"class":130,"line":301},[128,16954,16955],{"class":3814},"    \u002F\u002Fref = 100;",[128,16957,16958],{"class":3814},"  \u002F\u002F加入const后不可以修改变量\n",[128,16960,16961,16963,16965,16967,16969],{"class":130,"line":310},[128,16962,10086],{"class":138},[128,16964,4789],{"class":134},[128,16966,16460],{"class":138},[128,16968,4789],{"class":134},[128,16970,12386],{"class":138},[128,16972,16973],{"class":130,"line":323},[128,16974,160],{"emptyLinePlaceholder":159},[128,16976,16977],{"class":130,"line":330},[128,16978,16979],{"class":3814},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[128,16981,16982,16984,16986,16988,16990],{"class":130,"line":335},[128,16983,5572],{"class":134},[128,16985,14396],{"class":138},[128,16987,270],{"class":134},[128,16989,5625],{"class":166},[128,16991,4905],{"class":138},[128,16993,16994,16997],{"class":130,"line":340},[128,16995,16996],{"class":199},"    showValue",[128,16998,16814],{"class":138},[128,17000,17001],{"class":130,"line":351},[128,17002,160],{"emptyLinePlaceholder":159},[128,17004,17005,17007,17009,17011],{"class":130,"line":384},[128,17006,5888],{"class":199},[128,17008,253],{"class":138},[128,17010,5893],{"class":176},[128,17012,6292],{"class":138},[128,17014,17015],{"class":130,"line":414},[128,17016,160],{"emptyLinePlaceholder":159},[128,17018,17019,17021,17023],{"class":130,"line":419},[128,17020,587],{"class":134},[128,17022,7659],{"class":166},[128,17024,4905],{"class":138},[128,17026,17027],{"class":130,"line":424},[128,17028,2694],{"class":138},[3659,17030,17031],{},"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":112,"searchDepth":142,"depth":142,"links":17033},[17034,17035,17036,17037,17038,17039],{"id":15567,"depth":142,"text":15568},{"id":15746,"depth":142,"text":15747},{"id":15929,"depth":142,"text":15930},{"id":16332,"depth":142,"text":16333},{"id":16659,"depth":142,"text":16660},{"id":16839,"depth":142,"text":16840},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":15559,"description":112},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":17046,"title":17047,"body":17048,"description":112,"extension":3687,"meta":18127,"navigation":159,"path":18128,"seo":18129,"stem":18130,"__hash__":18131},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":17049,"toc":18119},[17050,17053,17057,17060,17065,17295,17297,17308,17312,17315,17323,17427,17430,17434,17437,17441,17444,17449,17471,17477,17804,17807,17811,17819,18116],[10,17051,17047],{"id":17052},"_7函数高级部分",[14,17054,17056],{"id":17055},"_71函数默认参数","7.1函数默认参数",[19,17058,17059],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,17061,8743,17062],{},[114,17063,17064],{}," 返回值类型  函数名 （参数= 默认值）{}",[106,17066,17068],{"className":3749,"code":17067,"language":3751,"meta":112,"style":112},"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",[114,17069,17070,17104,17119,17123,17127,17132,17137,17166,17186,17196,17200,17204,17212,17216,17243,17265,17269,17279,17283,17291],{"__ignoreMap":112},[128,17071,17072,17074,17076,17078,17080,17082,17084,17086,17088,17090,17092,17094,17096,17098,17100,17102],{"class":130,"line":131},[128,17073,3763],{"class":134},[128,17075,14912],{"class":199},[128,17077,253],{"class":138},[128,17079,3763],{"class":134},[128,17081,5010],{"class":266},[128,17083,258],{"class":138},[128,17085,3763],{"class":134},[128,17087,6406],{"class":266},[128,17089,170],{"class":134},[128,17091,5625],{"class":166},[128,17093,258],{"class":138},[128,17095,3763],{"class":134},[128,17097,6422],{"class":266},[128,17099,170],{"class":134},[128,17101,5625],{"class":166},[128,17103,15968],{"class":138},[128,17105,17106,17108,17110,17112,17114,17116],{"class":130,"line":142},[128,17107,587],{"class":134},[128,17109,14396],{"class":138},[128,17111,2457],{"class":134},[128,17113,14409],{"class":138},[128,17115,2457],{"class":134},[128,17117,17118],{"class":138}," c;\n",[128,17120,17121],{"class":130,"line":156},[128,17122,2694],{"class":138},[128,17124,17125],{"class":130,"line":163},[128,17126,160],{"emptyLinePlaceholder":159},[128,17128,17129],{"class":130,"line":183},[128,17130,17131],{"class":3814},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[128,17133,17134],{"class":130,"line":188},[128,17135,17136],{"class":3814},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[128,17138,17139,17141,17144,17146,17148,17150,17152,17154,17156,17158,17160,17162,17164],{"class":130,"line":193},[128,17140,3763],{"class":134},[128,17142,17143],{"class":199}," func2",[128,17145,253],{"class":138},[128,17147,3763],{"class":134},[128,17149,5010],{"class":266},[128,17151,170],{"class":134},[128,17153,5625],{"class":166},[128,17155,258],{"class":138},[128,17157,3763],{"class":134},[128,17159,6406],{"class":266},[128,17161,170],{"class":134},[128,17163,5625],{"class":166},[128,17165,6292],{"class":138},[128,17167,17168,17170,17172,17174,17176,17178,17180,17182,17184],{"class":130,"line":206},[128,17169,3763],{"class":134},[128,17171,17143],{"class":199},[128,17173,253],{"class":138},[128,17175,3763],{"class":134},[128,17177,5010],{"class":266},[128,17179,258],{"class":138},[128,17181,3763],{"class":134},[128,17183,6406],{"class":266},[128,17185,15968],{"class":138},[128,17187,17188,17190,17192,17194],{"class":130,"line":221},[128,17189,587],{"class":134},[128,17191,14396],{"class":138},[128,17193,2457],{"class":134},[128,17195,15989],{"class":138},[128,17197,17198],{"class":130,"line":230},[128,17199,2694],{"class":138},[128,17201,17202],{"class":130,"line":235},[128,17203,160],{"emptyLinePlaceholder":159},[128,17205,17206,17208,17210],{"class":130,"line":244},[128,17207,3763],{"class":134},[128,17209,1575],{"class":199},[128,17211,14380],{"class":138},[128,17213,17214],{"class":130,"line":287},[128,17215,160],{"emptyLinePlaceholder":159},[128,17217,17218,17220,17222,17225,17227,17229,17231,17233,17235,17237,17239,17241],{"class":130,"line":301},[128,17219,10086],{"class":138},[128,17221,4789],{"class":134},[128,17223,17224],{"class":176}," \"ret = \"",[128,17226,5056],{"class":134},[128,17228,14912],{"class":199},[128,17230,253],{"class":138},[128,17232,4449],{"class":166},[128,17234,258],{"class":138},[128,17236,4449],{"class":166},[128,17238,276],{"class":138},[128,17240,4789],{"class":134},[128,17242,12386],{"class":138},[128,17244,17245,17247,17249,17251,17253,17255,17257,17259,17261,17263],{"class":130,"line":310},[128,17246,10086],{"class":138},[128,17248,4789],{"class":134},[128,17250,17224],{"class":176},[128,17252,5056],{"class":134},[128,17254,14912],{"class":199},[128,17256,253],{"class":138},[128,17258,4061],{"class":166},[128,17260,276],{"class":138},[128,17262,4789],{"class":134},[128,17264,12386],{"class":138},[128,17266,17267],{"class":130,"line":323},[128,17268,160],{"emptyLinePlaceholder":159},[128,17270,17271,17273,17275,17277],{"class":130,"line":330},[128,17272,5888],{"class":199},[128,17274,253],{"class":138},[128,17276,5893],{"class":176},[128,17278,6292],{"class":138},[128,17280,17281],{"class":130,"line":335},[128,17282,160],{"emptyLinePlaceholder":159},[128,17284,17285,17287,17289],{"class":130,"line":340},[128,17286,587],{"class":134},[128,17288,7659],{"class":166},[128,17290,4905],{"class":138},[128,17292,17293],{"class":130,"line":351},[128,17294,2694],{"class":138},[19,17296,14859],{},[26,17298,17299,17302,17305],{},[29,17300,17301],{},"我传就用我；没传就用你",[29,17303,17304],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[29,17306,17307],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,17309,17311],{"id":17310},"_72函数的占位参数","7.2函数的占位参数",[19,17313,17314],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,17316,17317,17319,17320],{},[3903,17318,8743],{}," ",[114,17321,17322],{},"返回值类型 函数名 (数据类型){}",[106,17324,17326],{"className":3749,"code":17325,"language":3751,"meta":112,"style":112},"\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",[114,17327,17328,17333,17351,17364,17368,17376,17380,17397,17401,17411,17415,17423],{"__ignoreMap":112},[128,17329,17330],{"class":130,"line":131},[128,17331,17332],{"class":3814},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[128,17334,17335,17337,17339,17341,17343,17345,17347,17349],{"class":130,"line":142},[128,17336,8922],{"class":134},[128,17338,14912],{"class":199},[128,17340,253],{"class":138},[128,17342,3763],{"class":134},[128,17344,5010],{"class":266},[128,17346,258],{"class":138},[128,17348,3763],{"class":134},[128,17350,15968],{"class":138},[128,17352,17353,17355,17357,17360,17362],{"class":130,"line":156},[128,17354,10086],{"class":138},[128,17356,4789],{"class":134},[128,17358,17359],{"class":176}," \"this is func\"",[128,17361,5056],{"class":134},[128,17363,12386],{"class":138},[128,17365,17366],{"class":130,"line":163},[128,17367,2694],{"class":138},[128,17369,17370,17372,17374],{"class":130,"line":183},[128,17371,3763],{"class":134},[128,17373,1575],{"class":199},[128,17375,14380],{"class":138},[128,17377,17378],{"class":130,"line":188},[128,17379,160],{"emptyLinePlaceholder":159},[128,17381,17382,17384,17386,17388,17390,17392,17394],{"class":130,"line":193},[128,17383,16811],{"class":199},[128,17385,253],{"class":138},[128,17387,4196],{"class":166},[128,17389,4128],{"class":138},[128,17391,4196],{"class":166},[128,17393,9523],{"class":138},[128,17395,17396],{"class":3814}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[128,17398,17399],{"class":130,"line":206},[128,17400,160],{"emptyLinePlaceholder":159},[128,17402,17403,17405,17407,17409],{"class":130,"line":221},[128,17404,5888],{"class":199},[128,17406,253],{"class":138},[128,17408,5893],{"class":176},[128,17410,6292],{"class":138},[128,17412,17413],{"class":130,"line":230},[128,17414,160],{"emptyLinePlaceholder":159},[128,17416,17417,17419,17421],{"class":130,"line":235},[128,17418,587],{"class":134},[128,17420,7659],{"class":166},[128,17422,4905],{"class":138},[128,17424,17425],{"class":130,"line":244},[128,17426,2694],{"class":138},[19,17428,17429],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,17431,17433],{"id":17432},"_73函数重载","7.3函数重载",[19,17435,17436],{},"意思是函数名是可以相同的",[72,17438,17440],{"id":17439},"_731基本语法","7.3.1基本语法",[19,17442,17443],{},"作用：函数名可以相同，提高复用性",[19,17445,17446],{},[3903,17447,17448],{},"函数重载满足条件：",[4752,17450,17451,17454,17457],{},[29,17452,17453],{},"同一个作用域下",[29,17455,17456],{},"函数名称相同",[29,17458,17459,17460,17463,17464,17467,17468],{},"函数参数",[3903,17461,17462],{},"类型不同","  或者 ",[3903,17465,17466],{},"个数不同"," 或者 ",[3903,17469,17470],{},"顺序不同",[19,17472,17473,17476],{},[3903,17474,17475],{},"注意:","  函数的返回值不可以作为函数重载的条件",[106,17478,17480],{"className":13468,"code":17479,"language":13470,"meta":112,"style":112},"\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",[114,17481,17482,17487,17495,17499,17512,17516,17530,17534,17547,17551,17566,17570,17583,17587,17608,17612,17625,17629,17649,17653,17666,17670,17674,17679,17684,17689,17694,17699,17703,17707,17715,17719,17725,17735,17745,17759,17774,17778,17788,17792,17800],{"__ignoreMap":112},[128,17483,17484],{"class":130,"line":131},[128,17485,17486],{"class":3814},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[128,17488,17489,17491,17493],{"class":130,"line":142},[128,17490,8922],{"class":134},[128,17492,14912],{"class":199},[128,17494,5563],{"class":138},[128,17496,17497],{"class":130,"line":156},[128,17498,5157],{"class":138},[128,17500,17501,17503,17505,17508,17510],{"class":130,"line":163},[128,17502,10086],{"class":138},[128,17504,4789],{"class":134},[128,17506,17507],{"class":176}," \"func 的调用！\"",[128,17509,5056],{"class":134},[128,17511,12386],{"class":138},[128,17513,17514],{"class":130,"line":183},[128,17515,2694],{"class":138},[128,17517,17518,17520,17522,17524,17526,17528],{"class":130,"line":188},[128,17519,8922],{"class":134},[128,17521,14912],{"class":199},[128,17523,253],{"class":138},[128,17525,3763],{"class":134},[128,17527,5010],{"class":266},[128,17529,180],{"class":138},[128,17531,17532],{"class":130,"line":193},[128,17533,5157],{"class":138},[128,17535,17536,17538,17540,17543,17545],{"class":130,"line":206},[128,17537,10086],{"class":138},[128,17539,4789],{"class":134},[128,17541,17542],{"class":176}," \"func (int a) 的调用！\"",[128,17544,5056],{"class":134},[128,17546,12386],{"class":138},[128,17548,17549],{"class":130,"line":221},[128,17550,2694],{"class":138},[128,17552,17553,17555,17557,17559,17562,17564],{"class":130,"line":230},[128,17554,8922],{"class":134},[128,17556,14912],{"class":199},[128,17558,253],{"class":138},[128,17560,17561],{"class":134},"double",[128,17563,5010],{"class":266},[128,17565,180],{"class":138},[128,17567,17568],{"class":130,"line":235},[128,17569,5157],{"class":138},[128,17571,17572,17574,17576,17579,17581],{"class":130,"line":244},[128,17573,10086],{"class":138},[128,17575,4789],{"class":134},[128,17577,17578],{"class":176}," \"func (double a)的调用！\"",[128,17580,5056],{"class":134},[128,17582,12386],{"class":138},[128,17584,17585],{"class":130,"line":287},[128,17586,2694],{"class":138},[128,17588,17589,17591,17593,17595,17597,17599,17602,17604,17606],{"class":130,"line":301},[128,17590,8922],{"class":134},[128,17592,14912],{"class":199},[128,17594,253],{"class":138},[128,17596,3763],{"class":134},[128,17598,5010],{"class":266},[128,17600,17601],{"class":138}," ,",[128,17603,17561],{"class":134},[128,17605,6406],{"class":266},[128,17607,180],{"class":138},[128,17609,17610],{"class":130,"line":310},[128,17611,5157],{"class":138},[128,17613,17614,17616,17618,17621,17623],{"class":130,"line":323},[128,17615,10086],{"class":138},[128,17617,4789],{"class":134},[128,17619,17620],{"class":176}," \"func (int a ,double b) 的调用！\"",[128,17622,5056],{"class":134},[128,17624,12386],{"class":138},[128,17626,17627],{"class":130,"line":330},[128,17628,2694],{"class":138},[128,17630,17631,17633,17635,17637,17639,17641,17643,17645,17647],{"class":130,"line":335},[128,17632,8922],{"class":134},[128,17634,14912],{"class":199},[128,17636,253],{"class":138},[128,17638,17561],{"class":134},[128,17640,5010],{"class":266},[128,17642,17601],{"class":138},[128,17644,3763],{"class":134},[128,17646,6406],{"class":266},[128,17648,180],{"class":138},[128,17650,17651],{"class":130,"line":340},[128,17652,5157],{"class":138},[128,17654,17655,17657,17659,17662,17664],{"class":130,"line":351},[128,17656,10086],{"class":138},[128,17658,4789],{"class":134},[128,17660,17661],{"class":176}," \"func (double a ,int b)的调用！\"",[128,17663,5056],{"class":134},[128,17665,12386],{"class":138},[128,17667,17668],{"class":130,"line":384},[128,17669,2694],{"class":138},[128,17671,17672],{"class":130,"line":414},[128,17673,160],{"emptyLinePlaceholder":159},[128,17675,17676],{"class":130,"line":419},[128,17677,17678],{"class":3814},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[128,17680,17681],{"class":130,"line":424},[128,17682,17683],{"class":3814},"\u002F\u002Fint func(double a, int b)\n",[128,17685,17686],{"class":130,"line":434},[128,17687,17688],{"class":3814},"\u002F\u002F{\n",[128,17690,17691],{"class":130,"line":447},[128,17692,17693],{"class":3814},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[128,17695,17696],{"class":130,"line":459},[128,17697,17698],{"class":3814},"\u002F\u002F}\n",[128,17700,17701],{"class":130,"line":471},[128,17702,160],{"emptyLinePlaceholder":159},[128,17704,17705],{"class":130,"line":483},[128,17706,160],{"emptyLinePlaceholder":159},[128,17708,17709,17711,17713],{"class":130,"line":495},[128,17710,3763],{"class":134},[128,17712,1575],{"class":199},[128,17714,14380],{"class":138},[128,17716,17717],{"class":130,"line":507},[128,17718,160],{"emptyLinePlaceholder":159},[128,17720,17721,17723],{"class":130,"line":519},[128,17722,16811],{"class":199},[128,17724,9194],{"class":138},[128,17726,17727,17729,17731,17733],{"class":130,"line":524},[128,17728,16811],{"class":199},[128,17730,253],{"class":138},[128,17732,4196],{"class":166},[128,17734,6292],{"class":138},[128,17736,17737,17739,17741,17743],{"class":130,"line":529},[128,17738,16811],{"class":199},[128,17740,253],{"class":138},[128,17742,3806],{"class":166},[128,17744,6292],{"class":138},[128,17746,17747,17749,17751,17753,17755,17757],{"class":130,"line":540},[128,17748,16811],{"class":199},[128,17750,253],{"class":138},[128,17752,4196],{"class":166},[128,17754,4128],{"class":138},[128,17756,3806],{"class":166},[128,17758,6292],{"class":138},[128,17760,17761,17763,17765,17767,17770,17772],{"class":130,"line":555},[128,17762,16811],{"class":199},[128,17764,253],{"class":138},[128,17766,3806],{"class":166},[128,17768,17769],{"class":138}," , ",[128,17771,4196],{"class":166},[128,17773,6292],{"class":138},[128,17775,17776],{"class":130,"line":576},[128,17777,16736],{"class":138},[128,17779,17780,17782,17784,17786],{"class":130,"line":584},[128,17781,5888],{"class":199},[128,17783,253],{"class":138},[128,17785,5893],{"class":176},[128,17787,6292],{"class":138},[128,17789,17790],{"class":130,"line":593},[128,17791,160],{"emptyLinePlaceholder":159},[128,17793,17794,17796,17798],{"class":130,"line":598},[128,17795,587],{"class":134},[128,17797,7659],{"class":166},[128,17799,4905],{"class":138},[128,17801,17802],{"class":130,"line":603},[128,17803,2694],{"class":138},[19,17805,17806],{},"重点：函数返回值不可以作为函数重载条件！",[72,17808,17810],{"id":17809},"_732注意事项","7.3.2注意事项",[4752,17812,17813,17816],{},[29,17814,17815],{},"引用作为重载条件!!!",[29,17817,17818],{},"函数重载碰到函数默认参数",[106,17820,17822],{"className":3749,"code":17821,"language":3751,"meta":112,"style":112},"\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",[114,17823,17824,17829,17834,17838,17854,17858,17871,17875,17879,17897,17901,17914,17918,17922,17926,17931,17935,17959,17963,17976,17980,17984,17998,18002,18015,18019,18023,18031,18035,18047,18057,18070,18074,18078,18086,18090,18100,18104,18112],{"__ignoreMap":112},[128,17825,17826],{"class":130,"line":131},[128,17827,17828],{"class":3814},"\u002F\u002F函数重载注意事项\n",[128,17830,17831],{"class":130,"line":142},[128,17832,17833],{"class":3814},"\u002F\u002F1、引用作为重载条件\n",[128,17835,17836],{"class":130,"line":156},[128,17837,160],{"emptyLinePlaceholder":159},[128,17839,17840,17842,17844,17846,17848,17850,17852],{"class":130,"line":163},[128,17841,8922],{"class":134},[128,17843,14912],{"class":199},[128,17845,253],{"class":138},[128,17847,3763],{"class":134},[128,17849,14111],{"class":134},[128,17851,3989],{"class":266},[128,17853,180],{"class":138},[128,17855,17856],{"class":130,"line":183},[128,17857,5157],{"class":138},[128,17859,17860,17862,17864,17867,17869],{"class":130,"line":188},[128,17861,10086],{"class":138},[128,17863,4789],{"class":134},[128,17865,17866],{"class":176}," \"func (int &a) 调用 \"",[128,17868,5056],{"class":134},[128,17870,12386],{"class":138},[128,17872,17873],{"class":130,"line":193},[128,17874,2694],{"class":138},[128,17876,17877],{"class":130,"line":206},[128,17878,160],{"emptyLinePlaceholder":159},[128,17880,17881,17883,17885,17887,17889,17891,17893,17895],{"class":130,"line":221},[128,17882,8922],{"class":134},[128,17884,14912],{"class":199},[128,17886,253],{"class":138},[128,17888,10349],{"class":134},[128,17890,638],{"class":134},[128,17892,14111],{"class":134},[128,17894,3989],{"class":266},[128,17896,180],{"class":138},[128,17898,17899],{"class":130,"line":230},[128,17900,5157],{"class":138},[128,17902,17903,17905,17907,17910,17912],{"class":130,"line":235},[128,17904,10086],{"class":138},[128,17906,4789],{"class":134},[128,17908,17909],{"class":176}," \"func (const int &a) 调用 \"",[128,17911,5056],{"class":134},[128,17913,12386],{"class":138},[128,17915,17916],{"class":130,"line":244},[128,17917,2694],{"class":138},[128,17919,17920],{"class":130,"line":287},[128,17921,160],{"emptyLinePlaceholder":159},[128,17923,17924],{"class":130,"line":301},[128,17925,160],{"emptyLinePlaceholder":159},[128,17927,17928],{"class":130,"line":310},[128,17929,17930],{"class":3814},"\u002F\u002F2、函数重载碰到函数默认参数\n",[128,17932,17933],{"class":130,"line":323},[128,17934,160],{"emptyLinePlaceholder":159},[128,17936,17937,17939,17941,17943,17945,17947,17949,17951,17953,17955,17957],{"class":130,"line":330},[128,17938,8922],{"class":134},[128,17940,17143],{"class":199},[128,17942,253],{"class":138},[128,17944,3763],{"class":134},[128,17946,5010],{"class":266},[128,17948,258],{"class":138},[128,17950,3763],{"class":134},[128,17952,6406],{"class":266},[128,17954,170],{"class":134},[128,17956,5625],{"class":166},[128,17958,180],{"class":138},[128,17960,17961],{"class":130,"line":335},[128,17962,5157],{"class":138},[128,17964,17965,17967,17969,17972,17974],{"class":130,"line":340},[128,17966,10086],{"class":138},[128,17968,4789],{"class":134},[128,17970,17971],{"class":176}," \"func2(int a, int b = 10) 调用\"",[128,17973,5056],{"class":134},[128,17975,12386],{"class":138},[128,17977,17978],{"class":130,"line":351},[128,17979,2694],{"class":138},[128,17981,17982],{"class":130,"line":384},[128,17983,160],{"emptyLinePlaceholder":159},[128,17985,17986,17988,17990,17992,17994,17996],{"class":130,"line":414},[128,17987,8922],{"class":134},[128,17989,17143],{"class":199},[128,17991,253],{"class":138},[128,17993,3763],{"class":134},[128,17995,5010],{"class":266},[128,17997,180],{"class":138},[128,17999,18000],{"class":130,"line":419},[128,18001,5157],{"class":138},[128,18003,18004,18006,18008,18011,18013],{"class":130,"line":424},[128,18005,10086],{"class":138},[128,18007,4789],{"class":134},[128,18009,18010],{"class":176}," \"func2(int a) 调用\"",[128,18012,5056],{"class":134},[128,18014,12386],{"class":138},[128,18016,18017],{"class":130,"line":434},[128,18018,2694],{"class":138},[128,18020,18021],{"class":130,"line":447},[128,18022,160],{"emptyLinePlaceholder":159},[128,18024,18025,18027,18029],{"class":130,"line":459},[128,18026,3763],{"class":134},[128,18028,1575],{"class":199},[128,18030,14380],{"class":138},[128,18032,18033],{"class":130,"line":471},[128,18034,16736],{"class":138},[128,18036,18037,18039,18041,18043,18045],{"class":130,"line":483},[128,18038,5572],{"class":134},[128,18040,14396],{"class":138},[128,18042,270],{"class":134},[128,18044,5625],{"class":166},[128,18046,4905],{"class":138},[128,18048,18049,18051,18054],{"class":130,"line":495},[128,18050,16811],{"class":199},[128,18052,18053],{"class":138},"(a);",[128,18055,18056],{"class":3814}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[128,18058,18059,18061,18063,18065,18067],{"class":130,"line":507},[128,18060,16811],{"class":199},[128,18062,253],{"class":138},[128,18064,4196],{"class":166},[128,18066,9523],{"class":138},[128,18068,18069],{"class":3814},"\u002F\u002F调用有const   10是个常量\n",[128,18071,18072],{"class":130,"line":519},[128,18073,160],{"emptyLinePlaceholder":159},[128,18075,18076],{"class":130,"line":524},[128,18077,160],{"emptyLinePlaceholder":159},[128,18079,18080,18083],{"class":130,"line":529},[128,18081,18082],{"class":3814},"    \u002F\u002Ffunc2(10);",[128,18084,18085],{"class":3814}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[128,18087,18088],{"class":130,"line":540},[128,18089,160],{"emptyLinePlaceholder":159},[128,18091,18092,18094,18096,18098],{"class":130,"line":555},[128,18093,5888],{"class":199},[128,18095,253],{"class":138},[128,18097,5893],{"class":176},[128,18099,6292],{"class":138},[128,18101,18102],{"class":130,"line":576},[128,18103,160],{"emptyLinePlaceholder":159},[128,18105,18106,18108,18110],{"class":130,"line":584},[128,18107,587],{"class":134},[128,18109,7659],{"class":166},[128,18111,4905],{"class":138},[128,18113,18114],{"class":130,"line":593},[128,18115,2694],{"class":138},[3659,18117,18118],{},"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":112,"searchDepth":142,"depth":142,"links":18120},[18121,18122,18123],{"id":17055,"depth":142,"text":17056},{"id":17310,"depth":142,"text":17311},{"id":17432,"depth":142,"text":17433,"children":18124},[18125,18126],{"id":17439,"depth":156,"text":17440},{"id":17809,"depth":156,"text":17810},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":17047,"description":112},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":18133,"title":18134,"body":18135,"description":26852,"extension":3687,"meta":26853,"navigation":159,"path":26854,"seo":26855,"stem":26856,"__hash__":26857},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":18136,"toc":26833},[18137,18140,18146,18153,18158,18161,18164,18167,18171,18175,18178,18181,18189,18194,18197,18204,18209,18366,18369,18622,18625,18628,18631,18636,18639,18642,18653,18657,18893,18897,18907,18910,18918,19065,19069,19072,19075,19079,19522,19526,19534,19542,20422,20429,20434,21062,21065,21068,21071,21190,21193,21280,21283,21409,21412,21506,21509,21862,21866,21874,21878,21885,21888,21891,21902,21908,21913,21925,21933,21953,21961,21978,22164,22167,22171,22174,22177,22180,22183,22186,22189,22192,22652,22658,22662,22665,22676,23263,23266,23755,23759,23762,23765,23768,23771,23774,23782,24178,24182,24185,24188,24635,24638,24641,24646,24649,24654,24657,24661,24664,24666,24672,24675,24981,24991,25032,25036,25039,25041,25074,25077,25384,25386,25401,25404,25427,25436,25442,25445,25449,25452,25455,25460,25471,25476,25484,25489,25619,25622,25625,25800,25805,26017,26021,26024,26138,26143,26382,26386,26390,26393,26396,26401,26506,26509,26512,26515,26519,26630,26633,26636,26641,26693,26696,26699,26704,26750,26753,26758,26826,26828,26831],[10,18138,18134],{"id":18139},"_8类和对象",[19,18141,18142,18143],{},"C++面向对象的三大特性为",[3903,18144,18145],{},"封装、继承、多态",[19,18147,18148,18149,18152],{},"C++认为",[3903,18150,18151],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,18154,18155],{},[3903,18156,18157],{},"例如：",[19,18159,18160],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,18162,18163],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,18165,18166],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,18168,18170],{"id":18169},"_81封装","8.1封装",[72,18172,18174],{"id":18173},"_811封装的意义","8.1.1封装的意义",[19,18176,18177],{},"封装是C++面向对象三大特性之一",[19,18179,18180],{},"封装的意义：",[4752,18182,18183,18186],{},[29,18184,18185],{},"将属性和行为作为一个整体，表现生活中的事物",[29,18187,18188],{},"将属性和行为加以权限控制",[19,18190,18191],{},[3903,18192,18193],{},"封装意义一：",[19,18195,18196],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,18198,18199,17319,18201],{},[3903,18200,8743],{},[114,18202,18203],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[26,18205,18206],{},[29,18207,18208],{},"**示例1：**设计一个圆类，求圆的周长",[106,18210,18212],{"className":3749,"code":18211,"language":3751,"meta":112,"style":112},"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",[114,18213,18214,18221,18225,18230,18235,18240,18245,18252,18257,18267,18271,18288,18292,18296,18304,18308,18313,18318,18323,18328,18339,18362],{"__ignoreMap":112},[128,18215,18216,18218],{"class":130,"line":131},[128,18217,1901],{"class":134},[128,18219,18220],{"class":199}," Circle\n",[128,18222,18223],{"class":130,"line":142},[128,18224,5157],{"class":138},[128,18226,18227],{"class":130,"line":156},[128,18228,18229],{"class":3814},"    \u002F\u002F访问权限\n",[128,18231,18232],{"class":130,"line":163},[128,18233,18234],{"class":3814},"    \u002F\u002F公共权限\n",[128,18236,18237],{"class":130,"line":183},[128,18238,18239],{"class":134},"public:\n",[128,18241,18242],{"class":130,"line":188},[128,18243,18244],{"class":3814},"    \u002F\u002F属性\n",[128,18246,18247,18249],{"class":130,"line":193},[128,18248,5572],{"class":134},[128,18250,18251],{"class":138}," m_r;\n",[128,18253,18254],{"class":130,"line":206},[128,18255,18256],{"class":3814},"    \u002F\u002F行为\n",[128,18258,18259,18262,18265],{"class":130,"line":221},[128,18260,18261],{"class":134},"    double",[128,18263,18264],{"class":199}," calculateZC",[128,18266,5563],{"class":138},[128,18268,18269],{"class":130,"line":230},[128,18270,5617],{"class":138},[128,18272,18273,18275,18278,18280,18283,18285],{"class":130,"line":235},[128,18274,224],{"class":134},[128,18276,18277],{"class":166}," 2",[128,18279,4205],{"class":134},[128,18281,18282],{"class":138},"PI",[128,18284,4205],{"class":134},[128,18286,18287],{"class":138},"m_r;\n",[128,18289,18290],{"class":130,"line":244},[128,18291,5773],{"class":138},[128,18293,18294],{"class":130,"line":287},[128,18295,7562],{"class":138},[128,18297,18298,18300,18302],{"class":130,"line":301},[128,18299,3763],{"class":134},[128,18301,1575],{"class":199},[128,18303,5563],{"class":138},[128,18305,18306],{"class":130,"line":310},[128,18307,5157],{"class":138},[128,18309,18310],{"class":130,"line":323},[128,18311,18312],{"class":3814},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[128,18314,18315],{"class":130,"line":330},[128,18316,18317],{"class":3814},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[128,18319,18320],{"class":130,"line":335},[128,18321,18322],{"class":138},"    Circle c1;\n",[128,18324,18325],{"class":130,"line":340},[128,18326,18327],{"class":3814},"    \u002F\u002F给圆对象 的属性进行赋值\n",[128,18329,18330,18333,18335,18337],{"class":130,"line":351},[128,18331,18332],{"class":138},"    c1.m_r",[128,18334,270],{"class":134},[128,18336,4196],{"class":166},[128,18338,4905],{"class":138},[128,18340,18341,18343,18345,18348,18350,18353,18356,18358,18360],{"class":130,"line":384},[128,18342,5162],{"class":138},[128,18344,4789],{"class":134},[128,18346,18347],{"class":176},"\"圆的周长\"",[128,18349,4789],{"class":134},[128,18351,18352],{"class":138},"c1.",[128,18354,18355],{"class":199},"calculateZC",[128,18357,6010],{"class":138},[128,18359,4789],{"class":134},[128,18361,4811],{"class":138},[128,18363,18364],{"class":130,"line":414},[128,18365,2694],{"class":138},[19,18367,18368],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[106,18370,18372],{"className":3749,"code":18371,"language":3751,"meta":112,"style":112},"#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",[114,18373,18374,18380,18390,18396,18402,18406,18410,18415,18422,18427,18445,18449,18459,18463,18468,18484,18488,18498,18502,18507,18515,18519,18551,18555,18559,18567,18571,18576,18581,18595,18609,18618],{"__ignoreMap":112},[128,18375,18376,18378],{"class":130,"line":131},[128,18377,5538],{"class":134},[128,18379,5541],{"class":176},[128,18381,18382,18384,18386,18388],{"class":130,"line":142},[128,18383,5546],{"class":134},[128,18385,5549],{"class":134},[128,18387,5552],{"class":199},[128,18389,4905],{"class":138},[128,18391,18392,18394],{"class":130,"line":156},[128,18393,5538],{"class":134},[128,18395,11306],{"class":176},[128,18397,18398,18400],{"class":130,"line":163},[128,18399,1901],{"class":134},[128,18401,11319],{"class":199},[128,18403,18404],{"class":130,"line":183},[128,18405,5157],{"class":138},[128,18407,18408],{"class":130,"line":188},[128,18409,18239],{"class":134},[128,18411,18412],{"class":130,"line":193},[128,18413,18414],{"class":138},"    string m_name;\n",[128,18416,18417,18419],{"class":130,"line":206},[128,18418,5572],{"class":134},[128,18420,18421],{"class":138}," m_id;\n",[128,18423,18424],{"class":130,"line":221},[128,18425,18426],{"class":3814},"    \u002F\u002F赋值姓名\n",[128,18428,18429,18432,18435,18437,18440,18443],{"class":130,"line":230},[128,18430,18431],{"class":134},"    void",[128,18433,18434],{"class":199}," setName",[128,18436,253],{"class":138},[128,18438,18439],{"class":199},"string",[128,18441,18442],{"class":266}," name",[128,18444,180],{"class":138},[128,18446,18447],{"class":130,"line":235},[128,18448,5617],{"class":138},[128,18450,18451,18454,18456],{"class":130,"line":244},[128,18452,18453],{"class":138},"        m_name",[128,18455,270],{"class":134},[128,18457,18458],{"class":138},"name;\n",[128,18460,18461],{"class":130,"line":287},[128,18462,5773],{"class":138},[128,18464,18465],{"class":130,"line":301},[128,18466,18467],{"class":3814},"    \u002F\u002F赋值学号\n",[128,18469,18470,18472,18475,18477,18479,18482],{"class":130,"line":310},[128,18471,18431],{"class":134},[128,18473,18474],{"class":199}," setId",[128,18476,253],{"class":138},[128,18478,3763],{"class":134},[128,18480,18481],{"class":266}," id",[128,18483,180],{"class":138},[128,18485,18486],{"class":130,"line":323},[128,18487,5617],{"class":138},[128,18489,18490,18493,18495],{"class":130,"line":330},[128,18491,18492],{"class":138},"        m_id",[128,18494,270],{"class":134},[128,18496,18497],{"class":138},"id;\n",[128,18499,18500],{"class":130,"line":335},[128,18501,5773],{"class":138},[128,18503,18504],{"class":130,"line":340},[128,18505,18506],{"class":3814},"    \u002F\u002F打印学生信息\n",[128,18508,18509,18511,18513],{"class":130,"line":351},[128,18510,18431],{"class":134},[128,18512,13161],{"class":199},[128,18514,5563],{"class":138},[128,18516,18517],{"class":130,"line":384},[128,18518,5617],{"class":138},[128,18520,18521,18523,18525,18528,18530,18533,18535,18537,18539,18542,18544,18547,18549],{"class":130,"line":414},[128,18522,7019],{"class":138},[128,18524,4789],{"class":134},[128,18526,18527],{"class":176},"\"姓名：\"",[128,18529,4789],{"class":134},[128,18531,18532],{"class":138},"m_name",[128,18534,4789],{"class":134},[128,18536,7925],{"class":176},[128,18538,4789],{"class":134},[128,18540,18541],{"class":176},"\"学号：\"",[128,18543,4789],{"class":134},[128,18545,18546],{"class":138},"m_id",[128,18548,4789],{"class":134},[128,18550,4811],{"class":138},[128,18552,18553],{"class":130,"line":419},[128,18554,5773],{"class":138},[128,18556,18557],{"class":130,"line":424},[128,18558,7562],{"class":138},[128,18560,18561,18563,18565],{"class":130,"line":434},[128,18562,3763],{"class":134},[128,18564,1575],{"class":199},[128,18566,5563],{"class":138},[128,18568,18569],{"class":130,"line":447},[128,18570,5157],{"class":138},[128,18572,18573],{"class":130,"line":459},[128,18574,18575],{"class":3814},"    \u002F\u002F实例化\n",[128,18577,18578],{"class":130,"line":471},[128,18579,18580],{"class":138},"    Student s1;\n",[128,18582,18583,18586,18589,18591,18593],{"class":130,"line":483},[128,18584,18585],{"class":138},"    s1.",[128,18587,18588],{"class":199},"setName",[128,18590,253],{"class":138},[128,18592,11472],{"class":176},[128,18594,6292],{"class":138},[128,18596,18597,18599,18602,18604,18607],{"class":130,"line":495},[128,18598,18585],{"class":138},[128,18600,18601],{"class":199},"setId",[128,18603,253],{"class":138},[128,18605,18606],{"class":166},"123456",[128,18608,6292],{"class":138},[128,18610,18611,18613,18616],{"class":130,"line":507},[128,18612,18585],{"class":138},[128,18614,18615],{"class":199},"printInfo",[128,18617,9194],{"class":138},[128,18619,18620],{"class":130,"line":519},[128,18621,2694],{"class":138},[19,18623,18624],{},"类中的属性和行为统称为成员",[19,18626,18627],{},"属性：成员属性(成员变量)",[19,18629,18630],{},"方法：成员函数(成员方法)",[19,18632,18633],{},[3903,18634,18635],{},"封装意义二：",[19,18637,18638],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,18640,18641],{},"访问权限有三种：",[26,18643,18644,18647,18650],{},[29,18645,18646],{},"public        公共权限",[29,18648,18649],{},"protected 保护权限",[29,18651,18652],{},"private      私有权限",[19,18654,18655],{},[3903,18656,3488],{},[106,18658,18660],{"className":13468,"code":18659,"language":13470,"meta":112,"style":112},"\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",[114,18661,18662,18667,18672,18677,18682,18686,18693,18697,18702,18706,18711,18715,18720,18725,18730,18734,18739,18744,18751,18755,18759,18767,18771,18782,18794,18806,18810,18814,18818,18826,18830,18835,18847,18855,18863,18867,18877,18881,18889],{"__ignoreMap":112},[128,18663,18664],{"class":130,"line":131},[128,18665,18666],{"class":3814},"\u002F\u002F三种权限\n",[128,18668,18669],{"class":130,"line":142},[128,18670,18671],{"class":3814},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[128,18673,18674],{"class":130,"line":156},[128,18675,18676],{"class":3814},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[128,18678,18679],{"class":130,"line":163},[128,18680,18681],{"class":3814},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[128,18683,18684],{"class":130,"line":183},[128,18685,160],{"emptyLinePlaceholder":159},[128,18687,18688,18690],{"class":130,"line":188},[128,18689,1901],{"class":134},[128,18691,18692],{"class":199}," Person\n",[128,18694,18695],{"class":130,"line":193},[128,18696,5157],{"class":138},[128,18698,18699],{"class":130,"line":206},[128,18700,18701],{"class":3814},"    \u002F\u002F姓名  公共权限\n",[128,18703,18704],{"class":130,"line":221},[128,18705,18239],{"class":134},[128,18707,18708],{"class":130,"line":230},[128,18709,18710],{"class":138},"    string m_Name;\n",[128,18712,18713],{"class":130,"line":235},[128,18714,160],{"emptyLinePlaceholder":159},[128,18716,18717],{"class":130,"line":244},[128,18718,18719],{"class":3814},"    \u002F\u002F汽车  保护权限\n",[128,18721,18722],{"class":130,"line":287},[128,18723,18724],{"class":134},"protected:\n",[128,18726,18727],{"class":130,"line":301},[128,18728,18729],{"class":138},"    string m_Car;\n",[128,18731,18732],{"class":130,"line":310},[128,18733,160],{"emptyLinePlaceholder":159},[128,18735,18736],{"class":130,"line":323},[128,18737,18738],{"class":3814},"    \u002F\u002F银行卡密码  私有权限\n",[128,18740,18741],{"class":130,"line":330},[128,18742,18743],{"class":134},"private:\n",[128,18745,18746,18748],{"class":130,"line":335},[128,18747,5572],{"class":134},[128,18749,18750],{"class":138}," m_Password;\n",[128,18752,18753],{"class":130,"line":340},[128,18754,160],{"emptyLinePlaceholder":159},[128,18756,18757],{"class":130,"line":351},[128,18758,18239],{"class":134},[128,18760,18761,18763,18765],{"class":130,"line":384},[128,18762,18431],{"class":134},[128,18764,14912],{"class":199},[128,18766,5563],{"class":138},[128,18768,18769],{"class":130,"line":414},[128,18770,5617],{"class":138},[128,18772,18773,18776,18778,18780],{"class":130,"line":419},[128,18774,18775],{"class":138},"        m_Name ",[128,18777,270],{"class":134},[128,18779,12484],{"class":176},[128,18781,4905],{"class":138},[128,18783,18784,18787,18789,18792],{"class":130,"line":424},[128,18785,18786],{"class":138},"        m_Car ",[128,18788,270],{"class":134},[128,18790,18791],{"class":176}," \"拖拉机\"",[128,18793,4905],{"class":138},[128,18795,18796,18799,18801,18804],{"class":130,"line":434},[128,18797,18798],{"class":138},"        m_Password ",[128,18800,270],{"class":134},[128,18802,18803],{"class":166}," 123456",[128,18805,4905],{"class":138},[128,18807,18808],{"class":130,"line":447},[128,18809,5773],{"class":138},[128,18811,18812],{"class":130,"line":459},[128,18813,7562],{"class":138},[128,18815,18816],{"class":130,"line":471},[128,18817,160],{"emptyLinePlaceholder":159},[128,18819,18820,18822,18824],{"class":130,"line":483},[128,18821,3763],{"class":134},[128,18823,1575],{"class":199},[128,18825,14380],{"class":138},[128,18827,18828],{"class":130,"line":495},[128,18829,160],{"emptyLinePlaceholder":159},[128,18831,18832],{"class":130,"line":507},[128,18833,18834],{"class":138},"    Person p;\n",[128,18836,18837,18840,18842,18845],{"class":130,"line":519},[128,18838,18839],{"class":138},"    p.m_Name ",[128,18841,270],{"class":134},[128,18843,18844],{"class":176}," \"李四\"",[128,18846,4905],{"class":138},[128,18848,18849,18852],{"class":130,"line":524},[128,18850,18851],{"class":3814},"    \u002F\u002Fp.m_Car = \"奔驰\";",[128,18853,18854],{"class":3814},"  \u002F\u002F保护权限类外访问不到\n",[128,18856,18857,18860],{"class":130,"line":529},[128,18858,18859],{"class":3814},"    \u002F\u002Fp.m_Password = 123;",[128,18861,18862],{"class":3814}," \u002F\u002F私有权限类外访问不到\n",[128,18864,18865],{"class":130,"line":540},[128,18866,160],{"emptyLinePlaceholder":159},[128,18868,18869,18871,18873,18875],{"class":130,"line":555},[128,18870,5888],{"class":199},[128,18872,253],{"class":138},[128,18874,5893],{"class":176},[128,18876,6292],{"class":138},[128,18878,18879],{"class":130,"line":576},[128,18880,160],{"emptyLinePlaceholder":159},[128,18882,18883,18885,18887],{"class":130,"line":584},[128,18884,587],{"class":134},[128,18886,7659],{"class":166},[128,18888,4905],{"class":138},[128,18890,18891],{"class":130,"line":593},[128,18892,2694],{"class":138},[72,18894,18896],{"id":18895},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,18898,18899,18900,18903,18904],{},"在C++中 struct和class唯一的",[3903,18901,18902],{},"区别","就在于 ",[3903,18905,18906],{},"默认的访问权限不同",[19,18908,18909],{},"区别：",[4752,18911,18912,18915],{},[29,18913,18914],{},"struct 默认权限为公共",[29,18916,18917],{},"class   默认权限为私有",[106,18919,18921],{"className":13468,"code":18920,"language":13470,"meta":112,"style":112},"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",[114,18922,18923,18930,18934,18944,18948,18952,18959,18963,18973,18977,18981,18989,18993,18998,19012,19016,19021,19035,19039,19049,19053,19061],{"__ignoreMap":112},[128,18924,18925,18927],{"class":130,"line":131},[128,18926,1901],{"class":134},[128,18928,18929],{"class":199}," C1\n",[128,18931,18932],{"class":130,"line":142},[128,18933,5157],{"class":138},[128,18935,18936,18938,18941],{"class":130,"line":156},[128,18937,5572],{"class":134},[128,18939,18940],{"class":138},"  m_A;",[128,18942,18943],{"class":3814}," \u002F\u002F默认是私有权限\n",[128,18945,18946],{"class":130,"line":163},[128,18947,7562],{"class":138},[128,18949,18950],{"class":130,"line":183},[128,18951,160],{"emptyLinePlaceholder":159},[128,18953,18954,18956],{"class":130,"line":188},[128,18955,11316],{"class":134},[128,18957,18958],{"class":199}," C2\n",[128,18960,18961],{"class":130,"line":193},[128,18962,5157],{"class":138},[128,18964,18965,18967,18970],{"class":130,"line":206},[128,18966,5572],{"class":134},[128,18968,18969],{"class":138}," m_A;",[128,18971,18972],{"class":3814},"  \u002F\u002F默认是公共权限\n",[128,18974,18975],{"class":130,"line":221},[128,18976,7562],{"class":138},[128,18978,18979],{"class":130,"line":230},[128,18980,160],{"emptyLinePlaceholder":159},[128,18982,18983,18985,18987],{"class":130,"line":235},[128,18984,3763],{"class":134},[128,18986,1575],{"class":199},[128,18988,14380],{"class":138},[128,18990,18991],{"class":130,"line":244},[128,18992,160],{"emptyLinePlaceholder":159},[128,18994,18995],{"class":130,"line":287},[128,18996,18997],{"class":138},"    C1 c1;\n",[128,18999,19000,19003,19005,19007,19009],{"class":130,"line":301},[128,19001,19002],{"class":138},"    c1.m_A ",[128,19004,270],{"class":134},[128,19006,5625],{"class":166},[128,19008,3811],{"class":138},[128,19010,19011],{"class":3814}," \u002F\u002F错误，访问权限是私有\n",[128,19013,19014],{"class":130,"line":310},[128,19015,160],{"emptyLinePlaceholder":159},[128,19017,19018],{"class":130,"line":323},[128,19019,19020],{"class":138},"    C2 c2;\n",[128,19022,19023,19026,19028,19030,19032],{"class":130,"line":330},[128,19024,19025],{"class":138},"    c2.m_A ",[128,19027,270],{"class":134},[128,19029,5625],{"class":166},[128,19031,3811],{"class":138},[128,19033,19034],{"class":3814}," \u002F\u002F正确，访问权限是公共\n",[128,19036,19037],{"class":130,"line":335},[128,19038,160],{"emptyLinePlaceholder":159},[128,19040,19041,19043,19045,19047],{"class":130,"line":340},[128,19042,5888],{"class":199},[128,19044,253],{"class":138},[128,19046,5893],{"class":176},[128,19048,6292],{"class":138},[128,19050,19051],{"class":130,"line":351},[128,19052,160],{"emptyLinePlaceholder":159},[128,19054,19055,19057,19059],{"class":130,"line":384},[128,19056,587],{"class":134},[128,19058,7659],{"class":166},[128,19060,4905],{"class":138},[128,19062,19063],{"class":130,"line":414},[128,19064,2694],{"class":138},[72,19066,19068],{"id":19067},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,19070,19071],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,19073,19074],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,19076,19077],{},[3903,19078,3488],{},[106,19080,19082],{"className":13468,"code":19081,"language":13470,"meta":112,"style":112},"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",[114,19083,19084,19093,19097,19101,19106,19120,19129,19133,19143,19147,19154,19158,19162,19166,19171,19180,19187,19191,19196,19212,19235,19248,19254,19258,19267,19271,19275,19280,19296,19306,19310,19314,19318,19326,19330,19340,19344,19352,19356,19360,19368,19372,19376,19381,19394,19417,19421,19426,19439,19461,19465,19470,19484,19492,19496,19506,19510,19518],{"__ignoreMap":112},[128,19085,19086,19088,19091],{"class":130,"line":131},[128,19087,1901],{"class":134},[128,19089,19090],{"class":199}," Person",[128,19092,1959],{"class":138},[128,19094,19095],{"class":130,"line":142},[128,19096,18239],{"class":134},[128,19098,19099],{"class":130,"line":156},[128,19100,160],{"emptyLinePlaceholder":159},[128,19102,19103],{"class":130,"line":163},[128,19104,19105],{"class":3814},"    \u002F\u002F姓名设置可读可写\n",[128,19107,19108,19110,19112,19114,19116,19118],{"class":130,"line":183},[128,19109,18431],{"class":134},[128,19111,18434],{"class":199},[128,19113,253],{"class":138},[128,19115,18439],{"class":199},[128,19117,18442],{"class":266},[128,19119,15968],{"class":138},[128,19121,19122,19124,19126],{"class":130,"line":188},[128,19123,18775],{"class":138},[128,19125,270],{"class":134},[128,19127,19128],{"class":138}," name;\n",[128,19130,19131],{"class":130,"line":193},[128,19132,5773],{"class":138},[128,19134,19135,19138,19141],{"class":130,"line":206},[128,19136,19137],{"class":199},"    string",[128,19139,19140],{"class":199}," getName",[128,19142,5563],{"class":138},[128,19144,19145],{"class":130,"line":221},[128,19146,5617],{"class":138},[128,19148,19149,19151],{"class":130,"line":230},[128,19150,224],{"class":134},[128,19152,19153],{"class":138}," m_Name;\n",[128,19155,19156],{"class":130,"line":235},[128,19157,5773],{"class":138},[128,19159,19160],{"class":130,"line":244},[128,19161,160],{"emptyLinePlaceholder":159},[128,19163,19164],{"class":130,"line":287},[128,19165,160],{"emptyLinePlaceholder":159},[128,19167,19168],{"class":130,"line":301},[128,19169,19170],{"class":3814},"    \u002F\u002F获取年龄 \n",[128,19172,19173,19175,19178],{"class":130,"line":310},[128,19174,5572],{"class":134},[128,19176,19177],{"class":199}," getAge",[128,19179,14380],{"class":138},[128,19181,19182,19184],{"class":130,"line":323},[128,19183,224],{"class":134},[128,19185,19186],{"class":138}," m_Age;\n",[128,19188,19189],{"class":130,"line":330},[128,19190,5773],{"class":138},[128,19192,19193],{"class":130,"line":335},[128,19194,19195],{"class":3814},"    \u002F\u002F设置年龄\n",[128,19197,19198,19200,19203,19205,19207,19210],{"class":130,"line":340},[128,19199,18431],{"class":134},[128,19201,19202],{"class":199}," setAge",[128,19204,253],{"class":138},[128,19206,3763],{"class":134},[128,19208,19209],{"class":266}," age",[128,19211,15968],{"class":138},[128,19213,19214,19216,19219,19221,19223,19225,19228,19230,19233],{"class":130,"line":351},[128,19215,558],{"class":134},[128,19217,19218],{"class":138}," (age ",[128,19220,4657],{"class":134},[128,19222,7659],{"class":166},[128,19224,6824],{"class":134},[128,19226,19227],{"class":138}," age ",[128,19229,4705],{"class":134},[128,19231,19232],{"class":166}," 150",[128,19234,15968],{"class":138},[128,19236,19237,19239,19241,19244,19246],{"class":130,"line":384},[128,19238,13264],{"class":138},[128,19240,4789],{"class":134},[128,19242,19243],{"class":176}," \"你个老妖精!\"",[128,19245,5056],{"class":134},[128,19247,12386],{"class":138},[128,19249,19250,19252],{"class":130,"line":414},[128,19251,290],{"class":134},[128,19253,4905],{"class":138},[128,19255,19256],{"class":130,"line":419},[128,19257,2014],{"class":138},[128,19259,19260,19263,19265],{"class":130,"line":424},[128,19261,19262],{"class":138},"        m_Age ",[128,19264,270],{"class":134},[128,19266,11354],{"class":138},[128,19268,19269],{"class":130,"line":434},[128,19270,5773],{"class":138},[128,19272,19273],{"class":130,"line":447},[128,19274,160],{"emptyLinePlaceholder":159},[128,19276,19277],{"class":130,"line":459},[128,19278,19279],{"class":3814},"    \u002F\u002F情人设置为只写\n",[128,19281,19282,19284,19287,19289,19291,19294],{"class":130,"line":471},[128,19283,18431],{"class":134},[128,19285,19286],{"class":199}," setLover",[128,19288,253],{"class":138},[128,19290,18439],{"class":199},[128,19292,19293],{"class":266}," lover",[128,19295,15968],{"class":138},[128,19297,19298,19301,19303],{"class":130,"line":483},[128,19299,19300],{"class":138},"        m_Lover ",[128,19302,270],{"class":134},[128,19304,19305],{"class":138}," lover;\n",[128,19307,19308],{"class":130,"line":495},[128,19309,5773],{"class":138},[128,19311,19312],{"class":130,"line":507},[128,19313,160],{"emptyLinePlaceholder":159},[128,19315,19316],{"class":130,"line":519},[128,19317,18743],{"class":134},[128,19319,19320,19323],{"class":130,"line":524},[128,19321,19322],{"class":138},"    string m_Name;",[128,19324,19325],{"class":3814}," \u002F\u002F可读可写  姓名\n",[128,19327,19328],{"class":130,"line":529},[128,19329,16736],{"class":138},[128,19331,19332,19334,19337],{"class":130,"line":540},[128,19333,5572],{"class":134},[128,19335,19336],{"class":138}," m_Age;",[128,19338,19339],{"class":3814}," \u002F\u002F只读  年龄\n",[128,19341,19342],{"class":130,"line":555},[128,19343,160],{"emptyLinePlaceholder":159},[128,19345,19346,19349],{"class":130,"line":576},[128,19347,19348],{"class":138},"    string m_Lover;",[128,19350,19351],{"class":3814}," \u002F\u002F只写  情人\n",[128,19353,19354],{"class":130,"line":584},[128,19355,7562],{"class":138},[128,19357,19358],{"class":130,"line":593},[128,19359,160],{"emptyLinePlaceholder":159},[128,19361,19362,19364,19366],{"class":130,"line":598},[128,19363,3763],{"class":134},[128,19365,1575],{"class":199},[128,19367,14380],{"class":138},[128,19369,19370],{"class":130,"line":603},[128,19371,160],{"emptyLinePlaceholder":159},[128,19373,19374],{"class":130,"line":614},[128,19375,18834],{"class":138},[128,19377,19378],{"class":130,"line":625},[128,19379,19380],{"class":3814},"    \u002F\u002F姓名设置\n",[128,19382,19383,19386,19388,19390,19392],{"class":130,"line":633},[128,19384,19385],{"class":138},"    p.",[128,19387,18588],{"class":199},[128,19389,253],{"class":138},[128,19391,11472],{"class":176},[128,19393,6292],{"class":138},[128,19395,19396,19398,19400,19403,19405,19408,19411,19413,19415],{"class":130,"line":649},[128,19397,10086],{"class":138},[128,19399,4789],{"class":134},[128,19401,19402],{"class":176}," \"姓名： \"",[128,19404,5056],{"class":134},[128,19406,19407],{"class":138}," p.",[128,19409,19410],{"class":199},"getName",[128,19412,16576],{"class":138},[128,19414,4789],{"class":134},[128,19416,12386],{"class":138},[128,19418,19419],{"class":130,"line":660},[128,19420,160],{"emptyLinePlaceholder":159},[128,19422,19423],{"class":130,"line":673},[128,19424,19425],{"class":3814},"    \u002F\u002F年龄设置\n",[128,19427,19428,19430,19433,19435,19437],{"class":130,"line":678},[128,19429,19385],{"class":138},[128,19431,19432],{"class":199},"setAge",[128,19434,253],{"class":138},[128,19436,4405],{"class":166},[128,19438,6292],{"class":138},[128,19440,19441,19443,19445,19448,19450,19452,19455,19457,19459],{"class":130,"line":683},[128,19442,10086],{"class":138},[128,19444,4789],{"class":134},[128,19446,19447],{"class":176}," \"年龄： \"",[128,19449,5056],{"class":134},[128,19451,19407],{"class":138},[128,19453,19454],{"class":199},"getAge",[128,19456,16576],{"class":138},[128,19458,4789],{"class":134},[128,19460,12386],{"class":138},[128,19462,19463],{"class":130,"line":693},[128,19464,160],{"emptyLinePlaceholder":159},[128,19466,19467],{"class":130,"line":702},[128,19468,19469],{"class":3814},"    \u002F\u002F情人设置\n",[128,19471,19472,19474,19477,19479,19482],{"class":130,"line":709},[128,19473,19385],{"class":138},[128,19475,19476],{"class":199},"setLover",[128,19478,253],{"class":138},[128,19480,19481],{"class":176},"\"苍井\"",[128,19483,6292],{"class":138},[128,19485,19486,19489],{"class":130,"line":723},[128,19487,19488],{"class":3814},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[128,19490,19491],{"class":3814},"  \u002F\u002F只写属性，不可以读取\n",[128,19493,19494],{"class":130,"line":732},[128,19495,160],{"emptyLinePlaceholder":159},[128,19497,19498,19500,19502,19504],{"class":130,"line":744},[128,19499,5888],{"class":199},[128,19501,253],{"class":138},[128,19503,5893],{"class":176},[128,19505,6292],{"class":138},[128,19507,19508],{"class":130,"line":749},[128,19509,160],{"emptyLinePlaceholder":159},[128,19511,19512,19514,19516],{"class":130,"line":754},[128,19513,587],{"class":134},[128,19515,7659],{"class":166},[128,19517,4905],{"class":138},[128,19519,19520],{"class":130,"line":764},[128,19521,2694],{"class":138},[72,19523,19525],{"id":19524},"_814封装案例","8.1.4封装案例",[26,19527,19528],{},[29,19529,19530,19533],{},[3903,19531,19532],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[4752,19535,19536,19539],{},[29,19537,19538],{},"求出立方体的面积和体积",[29,19540,19541],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[106,19543,19545],{"className":3749,"code":19544,"language":3751,"meta":112,"style":112},"#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",[114,19546,19547,19553,19563,19570,19574,19578,19583,19613,19617,19627,19637,19647,19651,19660,19664,19700,19704,19713,19717,19733,19737,19742,19751,19755,19762,19766,19775,19779,19786,19790,19799,19803,19810,19814,19819,19836,19840,19886,19890,19899,19903,19907,19911,19920,19924,19928,19933,19937,19943,19949,19955,19959,19963,19968,19990,19994,20048,20052,20060,20064,20069,20074,20087,20094,20110,20121,20126,20148,20153,20175,20188,20207,20212,20222,20244,20265,20269,20274,20287,20299,20303,20316,20320,20325,20329,20342,20346,20350,20363,20374,20378,20390,20394,20398,20402,20414,20418],{"__ignoreMap":112},[128,19548,19549,19551],{"class":130,"line":131},[128,19550,5538],{"class":134},[128,19552,5541],{"class":176},[128,19554,19555,19557,19559,19561],{"class":130,"line":142},[128,19556,5546],{"class":134},[128,19558,5549],{"class":134},[128,19560,5552],{"class":199},[128,19562,4905],{"class":138},[128,19564,19565,19567],{"class":130,"line":156},[128,19566,1901],{"class":134},[128,19568,19569],{"class":199}," Cube\n",[128,19571,19572],{"class":130,"line":163},[128,19573,5157],{"class":138},[128,19575,19576],{"class":130,"line":183},[128,19577,18239],{"class":134},[128,19579,19580],{"class":130,"line":188},[128,19581,19582],{"class":3814},"    \u002F\u002F输入长宽高\n",[128,19584,19585,19587,19590,19592,19594,19597,19599,19601,19604,19606,19608,19611],{"class":130,"line":193},[128,19586,18431],{"class":134},[128,19588,19589],{"class":199}," setLwh",[128,19591,253],{"class":138},[128,19593,3763],{"class":134},[128,19595,19596],{"class":266}," l",[128,19598,4128],{"class":138},[128,19600,3763],{"class":134},[128,19602,19603],{"class":266}," w",[128,19605,4128],{"class":138},[128,19607,3763],{"class":134},[128,19609,19610],{"class":266}," h",[128,19612,180],{"class":138},[128,19614,19615],{"class":130,"line":206},[128,19616,5617],{"class":138},[128,19618,19619,19622,19624],{"class":130,"line":221},[128,19620,19621],{"class":138},"        m_L",[128,19623,270],{"class":134},[128,19625,19626],{"class":138},"l;\n",[128,19628,19629,19632,19634],{"class":130,"line":230},[128,19630,19631],{"class":138},"        m_W",[128,19633,270],{"class":134},[128,19635,19636],{"class":138},"w;\n",[128,19638,19639,19642,19644],{"class":130,"line":235},[128,19640,19641],{"class":138},"        m_H",[128,19643,270],{"class":134},[128,19645,19646],{"class":138},"h;\n",[128,19648,19649],{"class":130,"line":244},[128,19650,5773],{"class":138},[128,19652,19653,19655,19658],{"class":130,"line":287},[128,19654,5572],{"class":134},[128,19656,19657],{"class":199}," mianji",[128,19659,5563],{"class":138},[128,19661,19662],{"class":130,"line":301},[128,19663,5617],{"class":138},[128,19665,19666,19668,19670,19672,19675,19677,19680,19682,19685,19687,19690,19692,19695,19697],{"class":130,"line":310},[128,19667,224],{"class":134},[128,19669,18277],{"class":166},[128,19671,4205],{"class":134},[128,19673,19674],{"class":138},"(m_L",[128,19676,4205],{"class":134},[128,19678,19679],{"class":138},"m_W ",[128,19681,2457],{"class":134},[128,19683,19684],{"class":138}," m_L",[128,19686,4205],{"class":134},[128,19688,19689],{"class":138},"m_H ",[128,19691,2457],{"class":134},[128,19693,19694],{"class":138}," m_W",[128,19696,4205],{"class":134},[128,19698,19699],{"class":138},"m_H);\n",[128,19701,19702],{"class":130,"line":323},[128,19703,5773],{"class":138},[128,19705,19706,19708,19711],{"class":130,"line":330},[128,19707,5572],{"class":134},[128,19709,19710],{"class":199}," tiji",[128,19712,5563],{"class":138},[128,19714,19715],{"class":130,"line":335},[128,19716,5617],{"class":138},[128,19718,19719,19721,19723,19725,19728,19730],{"class":130,"line":340},[128,19720,224],{"class":134},[128,19722,19684],{"class":138},[128,19724,4205],{"class":134},[128,19726,19727],{"class":138},"m_W",[128,19729,4205],{"class":134},[128,19731,19732],{"class":138},"m_H;\n",[128,19734,19735],{"class":130,"line":351},[128,19736,5773],{"class":138},[128,19738,19739],{"class":130,"line":384},[128,19740,19741],{"class":3814},"    \u002F\u002F获取长宽高\n",[128,19743,19744,19746,19749],{"class":130,"line":414},[128,19745,5572],{"class":134},[128,19747,19748],{"class":199}," getLength",[128,19750,5563],{"class":138},[128,19752,19753],{"class":130,"line":419},[128,19754,5617],{"class":138},[128,19756,19757,19759],{"class":130,"line":424},[128,19758,224],{"class":134},[128,19760,19761],{"class":138}," m_L;\n",[128,19763,19764],{"class":130,"line":434},[128,19765,5773],{"class":138},[128,19767,19768,19770,19773],{"class":130,"line":447},[128,19769,5572],{"class":134},[128,19771,19772],{"class":199}," getWidth",[128,19774,5563],{"class":138},[128,19776,19777],{"class":130,"line":459},[128,19778,5617],{"class":138},[128,19780,19781,19783],{"class":130,"line":471},[128,19782,224],{"class":134},[128,19784,19785],{"class":138}," m_W;\n",[128,19787,19788],{"class":130,"line":483},[128,19789,5773],{"class":138},[128,19791,19792,19794,19797],{"class":130,"line":495},[128,19793,5572],{"class":134},[128,19795,19796],{"class":199}," getHeight",[128,19798,5563],{"class":138},[128,19800,19801],{"class":130,"line":507},[128,19802,5617],{"class":138},[128,19804,19805,19807],{"class":130,"line":519},[128,19806,224],{"class":134},[128,19808,19809],{"class":138}," m_H;\n",[128,19811,19812],{"class":130,"line":524},[128,19813,5773],{"class":138},[128,19815,19816],{"class":130,"line":529},[128,19817,19818],{"class":3814},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[128,19820,19821,19824,19827,19829,19832,19834],{"class":130,"line":540},[128,19822,19823],{"class":134},"    bool",[128,19825,19826],{"class":199}," isEqual",[128,19828,253],{"class":138},[128,19830,19831],{"class":199},"Cube",[128,19833,6422],{"class":266},[128,19835,180],{"class":138},[128,19837,19838],{"class":130,"line":555},[128,19839,5617],{"class":138},[128,19841,19842,19844,19847,19850,19852,19854,19857,19859,19862,19865,19867,19869,19872,19874,19876,19879,19881,19883],{"class":130,"line":576},[128,19843,558],{"class":134},[128,19845,19846],{"class":138}," (c.",[128,19848,19849],{"class":199},"getLength",[128,19851,16576],{"class":138},[128,19853,570],{"class":134},[128,19855,19856],{"class":138}," m_L ",[128,19858,5313],{"class":134},[128,19860,19861],{"class":138}," c.",[128,19863,19864],{"class":199},"getWidth",[128,19866,16576],{"class":138},[128,19868,570],{"class":134},[128,19870,19871],{"class":138}," m_W ",[128,19873,5313],{"class":134},[128,19875,19861],{"class":138},[128,19877,19878],{"class":199},"getHeight",[128,19880,16576],{"class":138},[128,19882,570],{"class":134},[128,19884,19885],{"class":138}," m_H)\n",[128,19887,19888],{"class":130,"line":584},[128,19889,6092],{"class":138},[128,19891,19892,19894,19897],{"class":130,"line":593},[128,19893,290],{"class":134},[128,19895,19896],{"class":166}," true",[128,19898,4905],{"class":138},[128,19900,19901],{"class":130,"line":598},[128,19902,2014],{"class":138},[128,19904,19905],{"class":130,"line":603},[128,19906,6150],{"class":134},[128,19908,19909],{"class":130,"line":614},[128,19910,6092],{"class":138},[128,19912,19913,19915,19918],{"class":130,"line":625},[128,19914,290],{"class":134},[128,19916,19917],{"class":166}," false",[128,19919,4905],{"class":138},[128,19921,19922],{"class":130,"line":633},[128,19923,2014],{"class":138},[128,19925,19926],{"class":130,"line":649},[128,19927,5773],{"class":138},[128,19929,19930],{"class":130,"line":660},[128,19931,19932],{"class":3814},"    \u002F\u002F私有属性\n",[128,19934,19935],{"class":130,"line":673},[128,19936,18743],{"class":134},[128,19938,19939,19941],{"class":130,"line":678},[128,19940,5572],{"class":134},[128,19942,19761],{"class":138},[128,19944,19945,19947],{"class":130,"line":683},[128,19946,5572],{"class":134},[128,19948,19785],{"class":138},[128,19950,19951,19953],{"class":130,"line":693},[128,19952,5572],{"class":134},[128,19954,19809],{"class":138},[128,19956,19957],{"class":130,"line":702},[128,19958,160],{"emptyLinePlaceholder":159},[128,19960,19961],{"class":130,"line":709},[128,19962,7562],{"class":138},[128,19964,19965],{"class":130,"line":723},[128,19966,19967],{"class":3814},"\u002F\u002F全局函数判断两个立方体是否相等\n",[128,19969,19970,19972,19974,19976,19978,19981,19983,19985,19988],{"class":130,"line":732},[128,19971,4966],{"class":134},[128,19973,19826],{"class":199},[128,19975,253],{"class":138},[128,19977,19831],{"class":199},[128,19979,19980],{"class":266}," c1",[128,19982,4128],{"class":138},[128,19984,19831],{"class":199},[128,19986,19987],{"class":266}," c2",[128,19989,180],{"class":138},[128,19991,19992],{"class":130,"line":744},[128,19993,5157],{"class":138},[128,19995,19996,19998,20001,20003,20005,20007,20010,20012,20015,20017,20019,20021,20023,20025,20027,20029,20031,20033,20035,20037,20039,20041,20043,20045],{"class":130,"line":749},[128,19997,587],{"class":134},[128,19999,20000],{"class":138}," (c1.",[128,20002,19849],{"class":199},[128,20004,16576],{"class":138},[128,20006,570],{"class":134},[128,20008,20009],{"class":138}," c2.",[128,20011,19849],{"class":199},[128,20013,20014],{"class":138},"()) ",[128,20016,5313],{"class":134},[128,20018,20000],{"class":138},[128,20020,19864],{"class":199},[128,20022,16576],{"class":138},[128,20024,570],{"class":134},[128,20026,20009],{"class":138},[128,20028,19864],{"class":199},[128,20030,20014],{"class":138},[128,20032,5313],{"class":134},[128,20034,20000],{"class":138},[128,20036,19878],{"class":199},[128,20038,16576],{"class":138},[128,20040,570],{"class":134},[128,20042,20009],{"class":138},[128,20044,19878],{"class":199},[128,20046,20047],{"class":138},"());\n",[128,20049,20050],{"class":130,"line":754},[128,20051,2694],{"class":138},[128,20053,20054,20056,20058],{"class":130,"line":764},[128,20055,3763],{"class":134},[128,20057,1575],{"class":199},[128,20059,5563],{"class":138},[128,20061,20062],{"class":130,"line":782},[128,20063,5157],{"class":138},[128,20065,20066],{"class":130,"line":787},[128,20067,20068],{"class":138},"    Cube c1;\n",[128,20070,20071],{"class":130,"line":795},[128,20072,20073],{"class":3814},"    \u002F\u002F输入立方体的长宽高\n",[128,20075,20076,20078,20080,20083,20085],{"class":130,"line":807},[128,20077,5162],{"class":138},[128,20079,4789],{"class":134},[128,20081,20082],{"class":176},"\"请输入第一个立方体的长、宽、高：\"",[128,20084,4789],{"class":134},[128,20086,4811],{"class":138},[128,20088,20089,20091],{"class":130,"line":813},[128,20090,5572],{"class":134},[128,20092,20093],{"class":138}," l,w,h,l1,w1,h1;\n",[128,20095,20096,20098,20100,20102,20104,20106,20108],{"class":130,"line":818},[128,20097,5599],{"class":138},[128,20099,5041],{"class":134},[128,20101,4267],{"class":138},[128,20103,5041],{"class":134},[128,20105,4544],{"class":138},[128,20107,5041],{"class":134},[128,20109,19646],{"class":138},[128,20111,20112,20115,20118],{"class":130,"line":835},[128,20113,20114],{"class":138},"    c1.",[128,20116,20117],{"class":199},"setLwh",[128,20119,20120],{"class":138},"(l,w,h);\n",[128,20122,20123],{"class":130,"line":851},[128,20124,20125],{"class":3814},"    \u002F\u002F面积\n",[128,20127,20128,20130,20132,20135,20137,20139,20142,20144,20146],{"class":130,"line":867},[128,20129,5162],{"class":138},[128,20131,4789],{"class":134},[128,20133,20134],{"class":176},"\"立方体的表面积为：\"",[128,20136,4789],{"class":134},[128,20138,18352],{"class":138},[128,20140,20141],{"class":199},"mianji",[128,20143,6010],{"class":138},[128,20145,4789],{"class":134},[128,20147,4811],{"class":138},[128,20149,20150],{"class":130,"line":872},[128,20151,20152],{"class":3814},"    \u002F\u002F体积\n",[128,20154,20155,20157,20159,20162,20164,20166,20169,20171,20173],{"class":130,"line":878},[128,20156,5162],{"class":138},[128,20158,4789],{"class":134},[128,20160,20161],{"class":176},"\"立方体的体积为：\"",[128,20163,4789],{"class":134},[128,20165,18352],{"class":138},[128,20167,20168],{"class":199},"tiji",[128,20170,6010],{"class":138},[128,20172,4789],{"class":134},[128,20174,4811],{"class":138},[128,20176,20177,20179,20181,20184,20186],{"class":130,"line":887},[128,20178,5162],{"class":138},[128,20180,4789],{"class":134},[128,20182,20183],{"class":176},"\"请输入第二个立方体的长、宽、高：\"",[128,20185,4789],{"class":134},[128,20187,4811],{"class":138},[128,20189,20190,20192,20194,20197,20199,20202,20204],{"class":130,"line":896},[128,20191,5599],{"class":138},[128,20193,5041],{"class":134},[128,20195,20196],{"class":138},"l1",[128,20198,5041],{"class":134},[128,20200,20201],{"class":138},"w1",[128,20203,5041],{"class":134},[128,20205,20206],{"class":138},"h1;\n",[128,20208,20209],{"class":130,"line":905},[128,20210,20211],{"class":138},"    Cube c2;\n",[128,20213,20214,20217,20219],{"class":130,"line":914},[128,20215,20216],{"class":138},"    c2.",[128,20218,20117],{"class":199},[128,20220,20221],{"class":138},"(l1,w1,h1);\n",[128,20223,20224,20226,20228,20231,20233,20236,20238,20240,20242],{"class":130,"line":920},[128,20225,5162],{"class":138},[128,20227,4789],{"class":134},[128,20229,20230],{"class":176},"\"第二个立方体的表面积为：\"",[128,20232,4789],{"class":134},[128,20234,20235],{"class":138},"c2.",[128,20237,20141],{"class":199},[128,20239,6010],{"class":138},[128,20241,4789],{"class":134},[128,20243,4811],{"class":138},[128,20245,20246,20248,20250,20253,20255,20257,20259,20261,20263],{"class":130,"line":926},[128,20247,5162],{"class":138},[128,20249,4789],{"class":134},[128,20251,20252],{"class":176},"\"第二个立方体的体积为：\"",[128,20254,4789],{"class":134},[128,20256,20235],{"class":138},[128,20258,20168],{"class":199},[128,20260,6010],{"class":138},[128,20262,4789],{"class":134},[128,20264,4811],{"class":138},[128,20266,20267],{"class":130,"line":938},[128,20268,160],{"emptyLinePlaceholder":159},[128,20270,20271],{"class":130,"line":943},[128,20272,20273],{"class":3814},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[128,20275,20276,20278,20280,20283,20285],{"class":130,"line":948},[128,20277,5162],{"class":138},[128,20279,4789],{"class":134},[128,20281,20282],{"class":176},"\"内部函数判断结果：\"",[128,20284,4789],{"class":134},[128,20286,4811],{"class":138},[128,20288,20289,20291,20293,20296],{"class":130,"line":958},[128,20290,209],{"class":134},[128,20292,20000],{"class":138},[128,20294,20295],{"class":199},"isEqual",[128,20297,20298],{"class":138},"(c2))\n",[128,20300,20301],{"class":130,"line":974},[128,20302,5617],{"class":138},[128,20304,20305,20307,20309,20312,20314],{"class":130,"line":985},[128,20306,7019],{"class":138},[128,20308,4789],{"class":134},[128,20310,20311],{"class":176},"\"两个立方体相等\"",[128,20313,4789],{"class":134},[128,20315,4811],{"class":138},[128,20317,20318],{"class":130,"line":990},[128,20319,5773],{"class":138},[128,20321,20322],{"class":130,"line":1005},[128,20323,20324],{"class":134},"    else\n",[128,20326,20327],{"class":130,"line":1017},[128,20328,5617],{"class":138},[128,20330,20331,20333,20335,20338,20340],{"class":130,"line":1022},[128,20332,7019],{"class":138},[128,20334,4789],{"class":134},[128,20336,20337],{"class":176},"\"两个立方体不相等\"",[128,20339,4789],{"class":134},[128,20341,4811],{"class":138},[128,20343,20344],{"class":130,"line":1027},[128,20345,5773],{"class":138},[128,20347,20348],{"class":130,"line":1033},[128,20349,160],{"emptyLinePlaceholder":159},[128,20351,20352,20354,20356,20359,20361],{"class":130,"line":1038},[128,20353,5162],{"class":138},[128,20355,4789],{"class":134},[128,20357,20358],{"class":176},"\"全局函数判断结果：\"",[128,20360,4789],{"class":134},[128,20362,4811],{"class":138},[128,20364,20365,20367,20369,20371],{"class":130,"line":1050},[128,20366,209],{"class":134},[128,20368,5260],{"class":138},[128,20370,20295],{"class":199},[128,20372,20373],{"class":138},"(c1, c2))\n",[128,20375,20376],{"class":130,"line":1055},[128,20377,5617],{"class":138},[128,20379,20380,20382,20384,20386,20388],{"class":130,"line":1060},[128,20381,7019],{"class":138},[128,20383,4789],{"class":134},[128,20385,20311],{"class":176},[128,20387,4789],{"class":134},[128,20389,4811],{"class":138},[128,20391,20392],{"class":130,"line":1070},[128,20393,5773],{"class":138},[128,20395,20396],{"class":130,"line":1086},[128,20397,20324],{"class":134},[128,20399,20400],{"class":130,"line":1095},[128,20401,5617],{"class":138},[128,20403,20404,20406,20408,20410,20412],{"class":130,"line":1100},[128,20405,7019],{"class":138},[128,20407,4789],{"class":134},[128,20409,20337],{"class":176},[128,20411,4789],{"class":134},[128,20413,4811],{"class":138},[128,20415,20416],{"class":130,"line":1113},[128,20417,5773],{"class":138},[128,20419,20420],{"class":130,"line":1124},[128,20421,2694],{"class":138},[26,20423,20424],{"start":142},[29,20425,20426],{},[3903,20427,20428],{},"练习案例2：点和圆的关系",[4752,20430,20431],{},[29,20432,20433],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[106,20435,20437],{"className":3749,"code":20436,"language":3751,"meta":112,"style":112},"#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",[114,20438,20439,20445,20455,20462,20469,20473,20477,20482,20516,20521,20537,20551,20555,20559,20566,20573,20577,20583,20587,20591,20595,20617,20640,20645,20659,20674,20678,20682,20688,20693,20698,20702,20728,20732,20762,20790,20818,20835,20839,20852,20856,20860,20864,20877,20881,20885,20893,20897,20901,20905,20910,20914,20925,20932,20941,20951,20962,20969,20982,20993,21003,21014,21021,21035,21040,21050,21058],{"__ignoreMap":112},[128,20440,20441,20443],{"class":130,"line":131},[128,20442,5538],{"class":134},[128,20444,5541],{"class":176},[128,20446,20447,20449,20451,20453],{"class":130,"line":142},[128,20448,5546],{"class":134},[128,20450,5549],{"class":134},[128,20452,5552],{"class":199},[128,20454,4905],{"class":138},[128,20456,20457,20459],{"class":130,"line":156},[128,20458,5538],{"class":134},[128,20460,20461],{"class":176},"\u003Ccmath>\n",[128,20463,20464,20466],{"class":130,"line":163},[128,20465,1901],{"class":134},[128,20467,20468],{"class":199}," Point\n",[128,20470,20471],{"class":130,"line":183},[128,20472,5157],{"class":138},[128,20474,20475],{"class":130,"line":188},[128,20476,18239],{"class":134},[128,20478,20479],{"class":130,"line":193},[128,20480,20481],{"class":3814},"    \u002F\u002F赋值\n",[128,20483,20484,20486,20489,20491,20493,20496,20498,20500,20503,20506,20508,20511,20513],{"class":130,"line":206},[128,20485,18431],{"class":134},[128,20487,20488],{"class":199}," setPoint",[128,20490,253],{"class":138},[128,20492,17561],{"class":134},[128,20494,20495],{"class":266}," x",[128,20497,258],{"class":138},[128,20499,17561],{"class":134},[128,20501,20502],{"class":266}," y",[128,20504,20505],{"class":138},") { m_x ",[128,20507,270],{"class":134},[128,20509,20510],{"class":138}," x; m_y ",[128,20512,270],{"class":134},[128,20514,20515],{"class":138}," y; }\n",[128,20517,20518],{"class":130,"line":221},[128,20519,20520],{"class":3814},"    \u002F\u002F获取坐标\n",[128,20522,20523,20525,20528,20531,20534],{"class":130,"line":230},[128,20524,18261],{"class":134},[128,20526,20527],{"class":199}," getX",[128,20529,20530],{"class":138},"() { ",[128,20532,20533],{"class":134},"return",[128,20535,20536],{"class":138}," m_x; }\n",[128,20538,20539,20541,20544,20546,20548],{"class":130,"line":235},[128,20540,18261],{"class":134},[128,20542,20543],{"class":199}," getY",[128,20545,20530],{"class":138},[128,20547,20533],{"class":134},[128,20549,20550],{"class":138}," m_y; }\n",[128,20552,20553],{"class":130,"line":244},[128,20554,160],{"emptyLinePlaceholder":159},[128,20556,20557],{"class":130,"line":287},[128,20558,18743],{"class":134},[128,20560,20561,20563],{"class":130,"line":301},[128,20562,18261],{"class":134},[128,20564,20565],{"class":138}," m_x;\n",[128,20567,20568,20570],{"class":130,"line":310},[128,20569,18261],{"class":134},[128,20571,20572],{"class":138}," m_y;\n",[128,20574,20575],{"class":130,"line":323},[128,20576,7562],{"class":138},[128,20578,20579,20581],{"class":130,"line":330},[128,20580,1901],{"class":134},[128,20582,18220],{"class":199},[128,20584,20585],{"class":130,"line":335},[128,20586,5157],{"class":138},[128,20588,20589],{"class":130,"line":340},[128,20590,18239],{"class":134},[128,20592,20593],{"class":130,"line":351},[128,20594,20481],{"class":3814},[128,20596,20597,20599,20602,20604,20606,20609,20612,20614],{"class":130,"line":384},[128,20598,18431],{"class":134},[128,20600,20601],{"class":199}," setRadius",[128,20603,253],{"class":138},[128,20605,17561],{"class":134},[128,20607,20608],{"class":266}," r",[128,20610,20611],{"class":138},") { m_r ",[128,20613,270],{"class":134},[128,20615,20616],{"class":138}," r; }\n",[128,20618,20619,20621,20624,20626,20629,20632,20635,20637],{"class":130,"line":414},[128,20620,18431],{"class":134},[128,20622,20623],{"class":199}," setCenter",[128,20625,253],{"class":138},[128,20627,20628],{"class":199},"Point",[128,20630,20631],{"class":266}," center",[128,20633,20634],{"class":138},") { m_center ",[128,20636,270],{"class":134},[128,20638,20639],{"class":138}," center; }\n",[128,20641,20642],{"class":130,"line":419},[128,20643,20644],{"class":3814},"    \u002F\u002F获取属性\n",[128,20646,20647,20649,20652,20654,20656],{"class":130,"line":424},[128,20648,18261],{"class":134},[128,20650,20651],{"class":199}," getRadius",[128,20653,20530],{"class":138},[128,20655,20533],{"class":134},[128,20657,20658],{"class":138}," m_r; }\n",[128,20660,20661,20664,20667,20669,20671],{"class":130,"line":434},[128,20662,20663],{"class":199},"    Point",[128,20665,20666],{"class":199}," getCenter",[128,20668,20530],{"class":138},[128,20670,20533],{"class":134},[128,20672,20673],{"class":138}," m_center; }\n",[128,20675,20676],{"class":130,"line":447},[128,20677,160],{"emptyLinePlaceholder":159},[128,20679,20680],{"class":130,"line":459},[128,20681,18743],{"class":134},[128,20683,20684,20686],{"class":130,"line":471},[128,20685,18261],{"class":134},[128,20687,18251],{"class":138},[128,20689,20690],{"class":130,"line":483},[128,20691,20692],{"class":3814},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[128,20694,20695],{"class":130,"line":495},[128,20696,20697],{"class":138},"    Point m_center;\n",[128,20699,20700],{"class":130,"line":507},[128,20701,7562],{"class":138},[128,20703,20704,20706,20709,20711,20714,20716,20718,20720,20722,20724,20726],{"class":130,"line":519},[128,20705,8922],{"class":134},[128,20707,20708],{"class":199}," isInCircle",[128,20710,253],{"class":138},[128,20712,20713],{"class":199},"Circle",[128,20715,14111],{"class":134},[128,20717,4038],{"class":266},[128,20719,4128],{"class":138},[128,20721,20628],{"class":199},[128,20723,14111],{"class":134},[128,20725,19],{"class":266},[128,20727,180],{"class":138},[128,20729,20730],{"class":130,"line":524},[128,20731,5157],{"class":138},[128,20733,20734,20736,20739,20741,20743,20746,20749,20752,20754,20756,20758,20760],{"class":130,"line":529},[128,20735,18261],{"class":134},[128,20737,20738],{"class":138}," dx ",[128,20740,270],{"class":134},[128,20742,19861],{"class":138},[128,20744,20745],{"class":199},"getCenter",[128,20747,20748],{"class":138},"().",[128,20750,20751],{"class":199},"getX",[128,20753,16576],{"class":138},[128,20755,4281],{"class":134},[128,20757,19407],{"class":138},[128,20759,20751],{"class":199},[128,20761,9194],{"class":138},[128,20763,20764,20766,20769,20771,20773,20775,20777,20780,20782,20784,20786,20788],{"class":130,"line":540},[128,20765,18261],{"class":134},[128,20767,20768],{"class":138}," dy ",[128,20770,270],{"class":134},[128,20772,19861],{"class":138},[128,20774,20745],{"class":199},[128,20776,20748],{"class":138},[128,20778,20779],{"class":199},"getY",[128,20781,16576],{"class":138},[128,20783,4281],{"class":134},[128,20785,19407],{"class":138},[128,20787,20779],{"class":199},[128,20789,9194],{"class":138},[128,20791,20792,20794,20797,20799,20802,20805,20807,20809,20811,20813,20815],{"class":130,"line":555},[128,20793,18261],{"class":134},[128,20795,20796],{"class":138}," distance ",[128,20798,270],{"class":134},[128,20800,20801],{"class":199}," sqrt",[128,20803,20804],{"class":138},"(dx ",[128,20806,4205],{"class":134},[128,20808,20738],{"class":138},[128,20810,2457],{"class":134},[128,20812,20768],{"class":138},[128,20814,4205],{"class":134},[128,20816,20817],{"class":138}," dy);\n",[128,20819,20820,20822,20825,20827,20829,20832],{"class":130,"line":576},[128,20821,209],{"class":134},[128,20823,20824],{"class":138}," (distance ",[128,20826,4657],{"class":134},[128,20828,19861],{"class":138},[128,20830,20831],{"class":199},"getRadius",[128,20833,20834],{"class":138},"())\n",[128,20836,20837],{"class":130,"line":584},[128,20838,5617],{"class":138},[128,20840,20841,20843,20845,20848,20850],{"class":130,"line":593},[128,20842,13215],{"class":138},[128,20844,4789],{"class":134},[128,20846,20847],{"class":176}," \"点在圆内\"",[128,20849,5056],{"class":134},[128,20851,12386],{"class":138},[128,20853,20854],{"class":130,"line":598},[128,20855,5773],{"class":138},[128,20857,20858],{"class":130,"line":603},[128,20859,20324],{"class":134},[128,20861,20862],{"class":130,"line":614},[128,20863,5617],{"class":138},[128,20865,20866,20868,20870,20873,20875],{"class":130,"line":625},[128,20867,13215],{"class":138},[128,20869,4789],{"class":134},[128,20871,20872],{"class":176}," \"点在圆外\"",[128,20874,5056],{"class":134},[128,20876,12386],{"class":138},[128,20878,20879],{"class":130,"line":633},[128,20880,5773],{"class":138},[128,20882,20883],{"class":130,"line":649},[128,20884,2694],{"class":138},[128,20886,20887,20889,20891],{"class":130,"line":660},[128,20888,3763],{"class":134},[128,20890,1575],{"class":199},[128,20892,5563],{"class":138},[128,20894,20895],{"class":130,"line":673},[128,20896,5157],{"class":138},[128,20898,20899],{"class":130,"line":678},[128,20900,18575],{"class":3814},[128,20902,20903],{"class":130,"line":683},[128,20904,18322],{"class":138},[128,20906,20907],{"class":130,"line":693},[128,20908,20909],{"class":138},"    Point p1;\n",[128,20911,20912],{"class":130,"line":702},[128,20913,20481],{"class":3814},[128,20915,20916,20918,20920,20923],{"class":130,"line":709},[128,20917,5162],{"class":138},[128,20919,4789],{"class":134},[128,20921,20922],{"class":176},"\"请输入圆的半径：\"",[128,20924,4905],{"class":138},[128,20926,20927,20929],{"class":130,"line":723},[128,20928,18261],{"class":134},[128,20930,20931],{"class":138}," r;\n",[128,20933,20934,20936,20938],{"class":130,"line":732},[128,20935,5599],{"class":138},[128,20937,5041],{"class":134},[128,20939,20940],{"class":138},"r;\n",[128,20942,20943,20945,20948],{"class":130,"line":744},[128,20944,20114],{"class":138},[128,20946,20947],{"class":199},"setRadius",[128,20949,20950],{"class":138},"(r);\n",[128,20952,20953,20955,20957,20960],{"class":130,"line":749},[128,20954,5162],{"class":138},[128,20956,4789],{"class":134},[128,20958,20959],{"class":176},"\"请输入圆心坐标：\"",[128,20961,4905],{"class":138},[128,20963,20964,20966],{"class":130,"line":754},[128,20965,18261],{"class":134},[128,20967,20968],{"class":138}," x, y;\n",[128,20970,20971,20973,20975,20977,20979],{"class":130,"line":764},[128,20972,5599],{"class":138},[128,20974,5041],{"class":134},[128,20976,4568],{"class":138},[128,20978,5041],{"class":134},[128,20980,20981],{"class":138},"y;\n",[128,20983,20984,20987,20990],{"class":130,"line":782},[128,20985,20986],{"class":138},"    p1.",[128,20988,20989],{"class":199},"setPoint",[128,20991,20992],{"class":138},"(x, y);\n",[128,20994,20995,20997,21000],{"class":130,"line":787},[128,20996,20114],{"class":138},[128,20998,20999],{"class":199},"setCenter",[128,21001,21002],{"class":138},"(p1);\n",[128,21004,21005,21007,21009,21012],{"class":130,"line":795},[128,21006,5162],{"class":138},[128,21008,4789],{"class":134},[128,21010,21011],{"class":176},"\"请输入测试点坐标：\"",[128,21013,4905],{"class":138},[128,21015,21016,21018],{"class":130,"line":807},[128,21017,18261],{"class":134},[128,21019,21020],{"class":138}," x1, y1;\n",[128,21022,21023,21025,21027,21030,21032],{"class":130,"line":813},[128,21024,5599],{"class":138},[128,21026,5041],{"class":134},[128,21028,21029],{"class":138},"x1",[128,21031,5041],{"class":134},[128,21033,21034],{"class":138},"y1;\n",[128,21036,21037],{"class":130,"line":818},[128,21038,21039],{"class":138},"    Point p2;\n",[128,21041,21042,21045,21047],{"class":130,"line":835},[128,21043,21044],{"class":138},"    p2.",[128,21046,20989],{"class":199},[128,21048,21049],{"class":138},"(x1, y1);\n",[128,21051,21052,21055],{"class":130,"line":851},[128,21053,21054],{"class":199},"    isInCircle",[128,21056,21057],{"class":138},"(c1, p2);\n",[128,21059,21060],{"class":130,"line":867},[128,21061,2694],{"class":138},[19,21063,21064],{},"在类中可以让另一个类作为本来的成员",[19,21066,21067],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,21069,21070],{},"创建point.h",[106,21072,21074],{"className":3749,"code":21073,"language":3751,"meta":112,"style":112},"#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",[114,21075,21076,21087,21093,21103,21109,21113,21118,21122,21126,21146,21150,21158,21166,21170,21174,21180,21186],{"__ignoreMap":112},[128,21077,21078,21081,21084],{"class":130,"line":131},[128,21079,21080],{"class":134},"#pragma",[128,21082,21083],{"class":199}," once",[128,21085,21086],{"class":3814}," \u002F\u002F防止头文件重复包含\n",[128,21088,21089,21091],{"class":130,"line":142},[128,21090,5538],{"class":134},[128,21092,5541],{"class":176},[128,21094,21095,21097,21099,21101],{"class":130,"line":156},[128,21096,5546],{"class":134},[128,21098,5549],{"class":134},[128,21100,5552],{"class":199},[128,21102,4905],{"class":138},[128,21104,21105,21107],{"class":130,"line":163},[128,21106,1901],{"class":134},[128,21108,20468],{"class":199},[128,21110,21111],{"class":130,"line":183},[128,21112,5157],{"class":138},[128,21114,21115],{"class":130,"line":188},[128,21116,21117],{"class":3814},"\u002F\u002F做好声明与变量定义就可以\n",[128,21119,21120],{"class":130,"line":193},[128,21121,18239],{"class":134},[128,21123,21124],{"class":130,"line":206},[128,21125,20481],{"class":3814},[128,21127,21128,21130,21132,21134,21136,21138,21140,21142,21144],{"class":130,"line":221},[128,21129,18431],{"class":134},[128,21131,20488],{"class":199},[128,21133,253],{"class":138},[128,21135,17561],{"class":134},[128,21137,20495],{"class":266},[128,21139,258],{"class":138},[128,21141,17561],{"class":134},[128,21143,20502],{"class":266},[128,21145,6292],{"class":138},[128,21147,21148],{"class":130,"line":230},[128,21149,20520],{"class":3814},[128,21151,21152,21154,21156],{"class":130,"line":235},[128,21153,18261],{"class":134},[128,21155,20527],{"class":199},[128,21157,9194],{"class":138},[128,21159,21160,21162,21164],{"class":130,"line":244},[128,21161,18261],{"class":134},[128,21163,20543],{"class":199},[128,21165,9194],{"class":138},[128,21167,21168],{"class":130,"line":287},[128,21169,160],{"emptyLinePlaceholder":159},[128,21171,21172],{"class":130,"line":301},[128,21173,18743],{"class":134},[128,21175,21176,21178],{"class":130,"line":310},[128,21177,18261],{"class":134},[128,21179,20565],{"class":138},[128,21181,21182,21184],{"class":130,"line":323},[128,21183,18261],{"class":134},[128,21185,20572],{"class":138},[128,21187,21188],{"class":130,"line":330},[128,21189,7562],{"class":138},[19,21191,21192],{},"创建point.cpp",[106,21194,21196],{"className":3749,"code":21195,"language":3751,"meta":112,"style":112},"#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",[114,21197,21198,21205,21210,21244,21248,21264],{"__ignoreMap":112},[128,21199,21200,21202],{"class":130,"line":131},[128,21201,5538],{"class":134},[128,21203,21204],{"class":176},"\u003Cpoint.h>\n",[128,21206,21207],{"class":130,"line":142},[128,21208,21209],{"class":3814},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[128,21211,21212,21214,21217,21220,21222,21224,21226,21228,21230,21232,21234,21236,21238,21240,21242],{"class":130,"line":156},[128,21213,18431],{"class":134},[128,21215,21216],{"class":199}," Point",[128,21218,21219],{"class":138},"::",[128,21221,20989],{"class":199},[128,21223,253],{"class":138},[128,21225,17561],{"class":134},[128,21227,20495],{"class":266},[128,21229,258],{"class":138},[128,21231,17561],{"class":134},[128,21233,20502],{"class":266},[128,21235,20505],{"class":138},[128,21237,270],{"class":134},[128,21239,20510],{"class":138},[128,21241,270],{"class":134},[128,21243,20515],{"class":138},[128,21245,21246],{"class":130,"line":163},[128,21247,20520],{"class":3814},[128,21249,21250,21252,21254,21256,21258,21260,21262],{"class":130,"line":183},[128,21251,18261],{"class":134},[128,21253,21216],{"class":199},[128,21255,21219],{"class":138},[128,21257,20751],{"class":199},[128,21259,20530],{"class":138},[128,21261,20533],{"class":134},[128,21263,20536],{"class":138},[128,21265,21266,21268,21270,21272,21274,21276,21278],{"class":130,"line":188},[128,21267,18261],{"class":134},[128,21269,21216],{"class":199},[128,21271,21219],{"class":138},[128,21273,20779],{"class":199},[128,21275,20530],{"class":138},[128,21277,20533],{"class":134},[128,21279,20550],{"class":138},[19,21281,21282],{},"创建circle.h",[106,21284,21286],{"className":3749,"code":21285,"language":3751,"meta":112,"style":112},"#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",[114,21287,21288,21295,21301,21311,21317,21323,21327,21331,21335,21349,21363,21367,21375,21383,21387,21391,21397,21401,21405],{"__ignoreMap":112},[128,21289,21290,21292],{"class":130,"line":131},[128,21291,21080],{"class":134},[128,21293,21294],{"class":199}," once\n",[128,21296,21297,21299],{"class":130,"line":142},[128,21298,5538],{"class":134},[128,21300,5541],{"class":176},[128,21302,21303,21305,21307,21309],{"class":130,"line":156},[128,21304,5546],{"class":134},[128,21306,5549],{"class":134},[128,21308,5552],{"class":199},[128,21310,4905],{"class":138},[128,21312,21313,21315],{"class":130,"line":163},[128,21314,5538],{"class":134},[128,21316,21204],{"class":176},[128,21318,21319,21321],{"class":130,"line":183},[128,21320,1901],{"class":134},[128,21322,18220],{"class":199},[128,21324,21325],{"class":130,"line":188},[128,21326,5157],{"class":138},[128,21328,21329],{"class":130,"line":193},[128,21330,18239],{"class":134},[128,21332,21333],{"class":130,"line":206},[128,21334,20481],{"class":3814},[128,21336,21337,21339,21341,21343,21345,21347],{"class":130,"line":221},[128,21338,18431],{"class":134},[128,21340,20601],{"class":199},[128,21342,253],{"class":138},[128,21344,17561],{"class":134},[128,21346,20608],{"class":266},[128,21348,6292],{"class":138},[128,21350,21351,21353,21355,21357,21359,21361],{"class":130,"line":230},[128,21352,18431],{"class":134},[128,21354,20623],{"class":199},[128,21356,253],{"class":138},[128,21358,20628],{"class":199},[128,21360,20631],{"class":266},[128,21362,6292],{"class":138},[128,21364,21365],{"class":130,"line":235},[128,21366,20644],{"class":3814},[128,21368,21369,21371,21373],{"class":130,"line":244},[128,21370,18261],{"class":134},[128,21372,20651],{"class":199},[128,21374,9194],{"class":138},[128,21376,21377,21379,21381],{"class":130,"line":287},[128,21378,20663],{"class":199},[128,21380,20666],{"class":199},[128,21382,9194],{"class":138},[128,21384,21385],{"class":130,"line":301},[128,21386,160],{"emptyLinePlaceholder":159},[128,21388,21389],{"class":130,"line":310},[128,21390,18743],{"class":134},[128,21392,21393,21395],{"class":130,"line":323},[128,21394,18261],{"class":134},[128,21396,18251],{"class":138},[128,21398,21399],{"class":130,"line":330},[128,21400,20692],{"class":3814},[128,21402,21403],{"class":130,"line":335},[128,21404,20697],{"class":138},[128,21406,21407],{"class":130,"line":340},[128,21408,7562],{"class":138},[19,21410,21411],{},"创建circle.cpp",[106,21413,21415],{"className":3749,"code":21414,"language":3751,"meta":112,"style":112},"#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",[114,21416,21417,21424,21447,21469,21474,21490],{"__ignoreMap":112},[128,21418,21419,21421],{"class":130,"line":131},[128,21420,5538],{"class":134},[128,21422,21423],{"class":176},"\u003Ccircle.h>\n",[128,21425,21426,21428,21431,21433,21435,21437,21439,21441,21443,21445],{"class":130,"line":142},[128,21427,8922],{"class":134},[128,21429,21430],{"class":199}," Circle",[128,21432,21219],{"class":138},[128,21434,20947],{"class":199},[128,21436,253],{"class":138},[128,21438,17561],{"class":134},[128,21440,20608],{"class":266},[128,21442,20611],{"class":138},[128,21444,270],{"class":134},[128,21446,20616],{"class":138},[128,21448,21449,21451,21453,21455,21457,21459,21461,21463,21465,21467],{"class":130,"line":156},[128,21450,8922],{"class":134},[128,21452,21430],{"class":199},[128,21454,21219],{"class":138},[128,21456,20999],{"class":199},[128,21458,253],{"class":138},[128,21460,20628],{"class":199},[128,21462,20631],{"class":266},[128,21464,20634],{"class":138},[128,21466,270],{"class":134},[128,21468,20639],{"class":138},[128,21470,21471],{"class":130,"line":163},[128,21472,21473],{"class":3814},"\u002F\u002F获取属性\n",[128,21475,21476,21478,21480,21482,21484,21486,21488],{"class":130,"line":183},[128,21477,17561],{"class":134},[128,21479,21430],{"class":199},[128,21481,21219],{"class":138},[128,21483,20831],{"class":199},[128,21485,20530],{"class":138},[128,21487,20533],{"class":134},[128,21489,20658],{"class":138},[128,21491,21492,21494,21496,21498,21500,21502,21504],{"class":130,"line":188},[128,21493,20628],{"class":199},[128,21495,21430],{"class":199},[128,21497,21219],{"class":138},[128,21499,20745],{"class":199},[128,21501,20530],{"class":138},[128,21503,20533],{"class":134},[128,21505,20673],{"class":138},[19,21507,21508],{},"使用封装的类",[106,21510,21512],{"className":3749,"code":21511,"language":3751,"meta":112,"style":112},"#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",[114,21513,21514,21520,21530,21536,21542,21566,21570,21596,21622,21646,21660,21664,21676,21680,21684,21688,21700,21704,21708,21716,21720,21724,21728,21732,21736,21746,21752,21760,21768,21778,21784,21796,21804,21812,21822,21828,21840,21844,21852,21858],{"__ignoreMap":112},[128,21515,21516,21518],{"class":130,"line":131},[128,21517,5538],{"class":134},[128,21519,5541],{"class":176},[128,21521,21522,21524,21526,21528],{"class":130,"line":142},[128,21523,5546],{"class":134},[128,21525,5549],{"class":134},[128,21527,5552],{"class":199},[128,21529,4905],{"class":138},[128,21531,21532,21534],{"class":130,"line":156},[128,21533,5538],{"class":134},[128,21535,21423],{"class":176},[128,21537,21538,21540],{"class":130,"line":163},[128,21539,5538],{"class":134},[128,21541,21204],{"class":176},[128,21543,21544,21546,21548,21550,21552,21554,21556,21558,21560,21562,21564],{"class":130,"line":183},[128,21545,8922],{"class":134},[128,21547,20708],{"class":199},[128,21549,253],{"class":138},[128,21551,20713],{"class":199},[128,21553,14111],{"class":134},[128,21555,4038],{"class":266},[128,21557,4128],{"class":138},[128,21559,20628],{"class":199},[128,21561,14111],{"class":134},[128,21563,19],{"class":266},[128,21565,180],{"class":138},[128,21567,21568],{"class":130,"line":188},[128,21569,5157],{"class":138},[128,21571,21572,21574,21576,21578,21580,21582,21584,21586,21588,21590,21592,21594],{"class":130,"line":193},[128,21573,18261],{"class":134},[128,21575,20738],{"class":138},[128,21577,270],{"class":134},[128,21579,19861],{"class":138},[128,21581,20745],{"class":199},[128,21583,20748],{"class":138},[128,21585,20751],{"class":199},[128,21587,16576],{"class":138},[128,21589,4281],{"class":134},[128,21591,19407],{"class":138},[128,21593,20751],{"class":199},[128,21595,9194],{"class":138},[128,21597,21598,21600,21602,21604,21606,21608,21610,21612,21614,21616,21618,21620],{"class":130,"line":206},[128,21599,18261],{"class":134},[128,21601,20768],{"class":138},[128,21603,270],{"class":134},[128,21605,19861],{"class":138},[128,21607,20745],{"class":199},[128,21609,20748],{"class":138},[128,21611,20779],{"class":199},[128,21613,16576],{"class":138},[128,21615,4281],{"class":134},[128,21617,19407],{"class":138},[128,21619,20779],{"class":199},[128,21621,9194],{"class":138},[128,21623,21624,21626,21628,21630,21632,21634,21636,21638,21640,21642,21644],{"class":130,"line":221},[128,21625,18261],{"class":134},[128,21627,20796],{"class":138},[128,21629,270],{"class":134},[128,21631,20801],{"class":199},[128,21633,20804],{"class":138},[128,21635,4205],{"class":134},[128,21637,20738],{"class":138},[128,21639,2457],{"class":134},[128,21641,20768],{"class":138},[128,21643,4205],{"class":134},[128,21645,20817],{"class":138},[128,21647,21648,21650,21652,21654,21656,21658],{"class":130,"line":230},[128,21649,209],{"class":134},[128,21651,20824],{"class":138},[128,21653,4657],{"class":134},[128,21655,19861],{"class":138},[128,21657,20831],{"class":199},[128,21659,20834],{"class":138},[128,21661,21662],{"class":130,"line":235},[128,21663,5617],{"class":138},[128,21665,21666,21668,21670,21672,21674],{"class":130,"line":244},[128,21667,13215],{"class":138},[128,21669,4789],{"class":134},[128,21671,20847],{"class":176},[128,21673,5056],{"class":134},[128,21675,12386],{"class":138},[128,21677,21678],{"class":130,"line":287},[128,21679,5773],{"class":138},[128,21681,21682],{"class":130,"line":301},[128,21683,20324],{"class":134},[128,21685,21686],{"class":130,"line":310},[128,21687,5617],{"class":138},[128,21689,21690,21692,21694,21696,21698],{"class":130,"line":323},[128,21691,13215],{"class":138},[128,21693,4789],{"class":134},[128,21695,20872],{"class":176},[128,21697,5056],{"class":134},[128,21699,12386],{"class":138},[128,21701,21702],{"class":130,"line":330},[128,21703,5773],{"class":138},[128,21705,21706],{"class":130,"line":335},[128,21707,2694],{"class":138},[128,21709,21710,21712,21714],{"class":130,"line":340},[128,21711,3763],{"class":134},[128,21713,1575],{"class":199},[128,21715,5563],{"class":138},[128,21717,21718],{"class":130,"line":351},[128,21719,5157],{"class":138},[128,21721,21722],{"class":130,"line":384},[128,21723,18575],{"class":3814},[128,21725,21726],{"class":130,"line":414},[128,21727,18322],{"class":138},[128,21729,21730],{"class":130,"line":419},[128,21731,20909],{"class":138},[128,21733,21734],{"class":130,"line":424},[128,21735,20481],{"class":3814},[128,21737,21738,21740,21742,21744],{"class":130,"line":434},[128,21739,5162],{"class":138},[128,21741,4789],{"class":134},[128,21743,20922],{"class":176},[128,21745,4905],{"class":138},[128,21747,21748,21750],{"class":130,"line":447},[128,21749,18261],{"class":134},[128,21751,20931],{"class":138},[128,21753,21754,21756,21758],{"class":130,"line":459},[128,21755,5599],{"class":138},[128,21757,5041],{"class":134},[128,21759,20940],{"class":138},[128,21761,21762,21764,21766],{"class":130,"line":471},[128,21763,20114],{"class":138},[128,21765,20947],{"class":199},[128,21767,20950],{"class":138},[128,21769,21770,21772,21774,21776],{"class":130,"line":483},[128,21771,5162],{"class":138},[128,21773,4789],{"class":134},[128,21775,20959],{"class":176},[128,21777,4905],{"class":138},[128,21779,21780,21782],{"class":130,"line":495},[128,21781,18261],{"class":134},[128,21783,20968],{"class":138},[128,21785,21786,21788,21790,21792,21794],{"class":130,"line":507},[128,21787,5599],{"class":138},[128,21789,5041],{"class":134},[128,21791,4568],{"class":138},[128,21793,5041],{"class":134},[128,21795,20981],{"class":138},[128,21797,21798,21800,21802],{"class":130,"line":519},[128,21799,20986],{"class":138},[128,21801,20989],{"class":199},[128,21803,20992],{"class":138},[128,21805,21806,21808,21810],{"class":130,"line":524},[128,21807,20114],{"class":138},[128,21809,20999],{"class":199},[128,21811,21002],{"class":138},[128,21813,21814,21816,21818,21820],{"class":130,"line":529},[128,21815,5162],{"class":138},[128,21817,4789],{"class":134},[128,21819,21011],{"class":176},[128,21821,4905],{"class":138},[128,21823,21824,21826],{"class":130,"line":540},[128,21825,18261],{"class":134},[128,21827,21020],{"class":138},[128,21829,21830,21832,21834,21836,21838],{"class":130,"line":555},[128,21831,5599],{"class":138},[128,21833,5041],{"class":134},[128,21835,21029],{"class":138},[128,21837,5041],{"class":134},[128,21839,21034],{"class":138},[128,21841,21842],{"class":130,"line":576},[128,21843,21039],{"class":138},[128,21845,21846,21848,21850],{"class":130,"line":584},[128,21847,21044],{"class":138},[128,21849,20989],{"class":199},[128,21851,21049],{"class":138},[128,21853,21854,21856],{"class":130,"line":593},[128,21855,21054],{"class":199},[128,21857,21057],{"class":138},[128,21859,21860],{"class":130,"line":598},[128,21861,2694],{"class":138},[14,21863,21865],{"id":21864},"_82对象的初始化清理","8.2对象的初始化清理",[4752,21867,21868,21871],{},[29,21869,21870],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[29,21872,21873],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[72,21875,21877],{"id":21876},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,21879,21880,21881,21884],{},"对象的",[3903,21882,21883],{},"初始化和清理","也是两个非常重要的安全问题",[19,21886,21887],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,21889,21890],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,21892,21893,21894,21897,21898,21901],{},"c++利用了",[3903,21895,21896],{},"构造函数","和",[3903,21899,21900],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,21903,21904,21905],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[3903,21906,21907],{},"我们不提供构造和析构，编译器会提供",[19,21909,21910],{},[3903,21911,21912],{},"编译器提供的构造函数和析构函数是空实现。",[4752,21914,21915,21918],{},[29,21916,21917],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[29,21919,21920,21921,21924],{},"析构函数：主要作用在于对象",[3903,21922,21923],{},"销毁前","系统自动调用，执行一些清理工作。",[19,21926,21927,21930],{},[3903,21928,21929],{},"构造函数语法：",[114,21931,21932],{},"类名(){}",[26,21934,21935,21938,21941,21944,21947],{},[29,21936,21937],{},"构造函数，没有返回值也不写void",[29,21939,21940],{},"函数名称与类名相同",[29,21942,21943],{},"构造函数可以有参数，因此可以发生重载",[29,21945,21946],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[29,21948,21949,21950,4179],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[114,21951,21952],{},"Person(){}",[19,21954,21955,17319,21958],{},[3903,21956,21957],{},"析构函数语法：",[114,21959,21960],{},"~类名(){}",[26,21962,21963,21966,21969,21975],{},[29,21964,21965],{},"析构函数，没有返回值也不写void",[29,21967,21968],{},"函数名称与类名相同,在名称前加上符号  ~",[29,21970,21971,21972],{},"析构函数不可以有参数，因此",[3903,21973,21974],{},"不可以发生重载",[29,21976,21977],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[106,21979,21981],{"className":3749,"code":21980,"language":3751,"meta":112,"style":112},"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",[114,21982,21983,21989,21993,21997,22002,22009,22013,22026,22030,22035,22042,22046,22059,22063,22067,22071,22075,22083,22087,22095,22099,22103,22111,22115,22120,22124,22131,22135,22148,22152,22160],{"__ignoreMap":112},[128,21984,21985,21987],{"class":130,"line":131},[128,21986,1901],{"class":134},[128,21988,18692],{"class":199},[128,21990,21991],{"class":130,"line":142},[128,21992,5157],{"class":138},[128,21994,21995],{"class":130,"line":156},[128,21996,18239],{"class":134},[128,21998,21999],{"class":130,"line":163},[128,22000,22001],{"class":3814},"    \u002F\u002F构造函数\n",[128,22003,22004,22007],{"class":130,"line":183},[128,22005,22006],{"class":199},"    Person",[128,22008,5563],{"class":138},[128,22010,22011],{"class":130,"line":188},[128,22012,5617],{"class":138},[128,22014,22015,22017,22019,22022,22024],{"class":130,"line":193},[128,22016,13215],{"class":138},[128,22018,4789],{"class":134},[128,22020,22021],{"class":176}," \"Person的构造函数调用\"",[128,22023,5056],{"class":134},[128,22025,12386],{"class":138},[128,22027,22028],{"class":130,"line":206},[128,22029,5773],{"class":138},[128,22031,22032],{"class":130,"line":221},[128,22033,22034],{"class":3814},"    \u002F\u002F析构函数\n",[128,22036,22037,22040],{"class":130,"line":230},[128,22038,22039],{"class":199},"    ~Person",[128,22041,5563],{"class":138},[128,22043,22044],{"class":130,"line":235},[128,22045,5617],{"class":138},[128,22047,22048,22050,22052,22055,22057],{"class":130,"line":244},[128,22049,13215],{"class":138},[128,22051,4789],{"class":134},[128,22053,22054],{"class":176}," \"Person的析构函数调用\"",[128,22056,5056],{"class":134},[128,22058,12386],{"class":138},[128,22060,22061],{"class":130,"line":287},[128,22062,5773],{"class":138},[128,22064,22065],{"class":130,"line":301},[128,22066,160],{"emptyLinePlaceholder":159},[128,22068,22069],{"class":130,"line":310},[128,22070,7562],{"class":138},[128,22072,22073],{"class":130,"line":323},[128,22074,160],{"emptyLinePlaceholder":159},[128,22076,22077,22079,22081],{"class":130,"line":330},[128,22078,8922],{"class":134},[128,22080,9146],{"class":199},[128,22082,5563],{"class":138},[128,22084,22085],{"class":130,"line":335},[128,22086,5157],{"class":138},[128,22088,22089,22092],{"class":130,"line":340},[128,22090,22091],{"class":138},"    Person p;",[128,22093,22094],{"class":3814},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[128,22096,22097],{"class":130,"line":351},[128,22098,2694],{"class":138},[128,22100,22101],{"class":130,"line":384},[128,22102,160],{"emptyLinePlaceholder":159},[128,22104,22105,22107,22109],{"class":130,"line":414},[128,22106,3763],{"class":134},[128,22108,1575],{"class":199},[128,22110,14380],{"class":138},[128,22112,22113],{"class":130,"line":419},[128,22114,16736],{"class":138},[128,22116,22117],{"class":130,"line":424},[128,22118,22119],{"class":3814},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[128,22121,22122],{"class":130,"line":434},[128,22123,160],{"emptyLinePlaceholder":159},[128,22125,22126,22128],{"class":130,"line":447},[128,22127,22091],{"class":138},[128,22129,22130],{"class":3814},"\u002F\u002F只有构造函数\n",[128,22132,22133],{"class":130,"line":459},[128,22134,160],{"emptyLinePlaceholder":159},[128,22136,22137,22139,22141,22143,22145],{"class":130,"line":471},[128,22138,5888],{"class":199},[128,22140,253],{"class":138},[128,22142,5893],{"class":176},[128,22144,9523],{"class":138},[128,22146,22147],{"class":3814},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[128,22149,22150],{"class":130,"line":483},[128,22151,160],{"emptyLinePlaceholder":159},[128,22153,22154,22156,22158],{"class":130,"line":495},[128,22155,587],{"class":134},[128,22157,7659],{"class":166},[128,22159,4905],{"class":138},[128,22161,22162],{"class":130,"line":507},[128,22163,2694],{"class":138},[19,22165,22166],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[72,22168,22170],{"id":22169},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,22172,22173],{},"两种分类方式：",[19,22175,22176],{},"​\t按参数分为： 有参构造和无参构造",[19,22178,22179],{},"​\t按类型分为： 普通构造和拷贝构造",[19,22181,22182],{},"三种调用方式：",[19,22184,22185],{},"​\t括号法",[19,22187,22188],{},"​\t显示法",[19,22190,22191],{},"​\t隐式转换法",[106,22193,22195],{"className":3749,"code":22194,"language":3751,"meta":112,"style":112},"#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",[114,22196,22197,22203,22213,22218,22223,22228,22233,22237,22245,22249,22253,22257,22263,22267,22280,22284,22296,22300,22309,22322,22326,22330,22336,22340,22353,22357,22362,22378,22382,22387,22396,22409,22413,22419,22423,22428,22436,22440,22445,22449,22457,22461,22466,22471,22476,22481,22486,22490,22495,22500,22505,22510,22514,22519,22524,22540,22552,22557,22561,22566,22571,22576,22580,22585,22599,22612,22616,22624,22628,22634,22640,22648],{"__ignoreMap":112},[128,22198,22199,22201],{"class":130,"line":131},[128,22200,5538],{"class":134},[128,22202,5541],{"class":176},[128,22204,22205,22207,22209,22211],{"class":130,"line":142},[128,22206,5546],{"class":134},[128,22208,5549],{"class":134},[128,22210,5552],{"class":199},[128,22212,4905],{"class":138},[128,22214,22215],{"class":130,"line":156},[128,22216,22217],{"class":3814},"\u002F\u002F1.构造函数的分类及调用\n",[128,22219,22220],{"class":130,"line":163},[128,22221,22222],{"class":3814},"\u002F\u002F分类\n",[128,22224,22225],{"class":130,"line":183},[128,22226,22227],{"class":3814},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[128,22229,22230],{"class":130,"line":188},[128,22231,22232],{"class":3814},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[128,22234,22235],{"class":130,"line":193},[128,22236,160],{"emptyLinePlaceholder":159},[128,22238,22239,22241,22243],{"class":130,"line":206},[128,22240,1901],{"class":134},[128,22242,19090],{"class":199},[128,22244,6247],{"class":138},[128,22246,22247],{"class":130,"line":221},[128,22248,5157],{"class":138},[128,22250,22251],{"class":130,"line":230},[128,22252,18239],{"class":134},[128,22254,22255],{"class":130,"line":235},[128,22256,22001],{"class":3814},[128,22258,22259,22261],{"class":130,"line":244},[128,22260,22006],{"class":199},[128,22262,5563],{"class":138},[128,22264,22265],{"class":130,"line":287},[128,22266,5617],{"class":138},[128,22268,22269,22271,22273,22276,22278],{"class":130,"line":301},[128,22270,7019],{"class":138},[128,22272,4789],{"class":134},[128,22274,22275],{"class":176},"\"Person构造函数无参构造\"",[128,22277,4789],{"class":134},[128,22279,4811],{"class":138},[128,22281,22282],{"class":130,"line":310},[128,22283,5773],{"class":138},[128,22285,22286,22288,22290,22292,22294],{"class":130,"line":323},[128,22287,22006],{"class":199},[128,22289,253],{"class":138},[128,22291,3763],{"class":134},[128,22293,5010],{"class":266},[128,22295,180],{"class":138},[128,22297,22298],{"class":130,"line":330},[128,22299,5617],{"class":138},[128,22301,22302,22305,22307],{"class":130,"line":335},[128,22303,22304],{"class":138},"        age",[128,22306,270],{"class":134},[128,22308,9754],{"class":138},[128,22310,22311,22313,22315,22318,22320],{"class":130,"line":340},[128,22312,7019],{"class":138},[128,22314,4789],{"class":134},[128,22316,22317],{"class":176},"\"Person构造函数有参构造\"",[128,22319,4789],{"class":134},[128,22321,4811],{"class":138},[128,22323,22324],{"class":130,"line":351},[128,22325,5773],{"class":138},[128,22327,22328],{"class":130,"line":384},[128,22329,22034],{"class":3814},[128,22331,22332,22334],{"class":130,"line":414},[128,22333,22039],{"class":199},[128,22335,5563],{"class":138},[128,22337,22338],{"class":130,"line":419},[128,22339,5617],{"class":138},[128,22341,22342,22344,22346,22349,22351],{"class":130,"line":424},[128,22343,7019],{"class":138},[128,22345,4789],{"class":134},[128,22347,22348],{"class":176},"\"Person析构函数被调用\"",[128,22350,4789],{"class":134},[128,22352,4811],{"class":138},[128,22354,22355],{"class":130,"line":434},[128,22356,5773],{"class":138},[128,22358,22359],{"class":130,"line":447},[128,22360,22361],{"class":3814},"    \u002F\u002F拷贝构造函数\n",[128,22363,22364,22366,22368,22370,22372,22374,22376],{"class":130,"line":459},[128,22365,22006],{"class":199},[128,22367,253],{"class":138},[128,22369,10349],{"class":134},[128,22371,19090],{"class":199},[128,22373,14111],{"class":134},[128,22375,19],{"class":266},[128,22377,180],{"class":138},[128,22379,22380],{"class":130,"line":471},[128,22381,5617],{"class":138},[128,22383,22384],{"class":130,"line":483},[128,22385,22386],{"class":3814},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[128,22388,22389,22391,22393],{"class":130,"line":495},[128,22390,22304],{"class":138},[128,22392,270],{"class":134},[128,22394,22395],{"class":138},"p.age;\n",[128,22397,22398,22400,22402,22405,22407],{"class":130,"line":507},[128,22399,7019],{"class":138},[128,22401,4789],{"class":134},[128,22403,22404],{"class":176},"\"Person拷贝构造函数被调用\"",[128,22406,4789],{"class":134},[128,22408,4811],{"class":138},[128,22410,22411],{"class":130,"line":519},[128,22412,5773],{"class":138},[128,22414,22415,22417],{"class":130,"line":524},[128,22416,5572],{"class":134},[128,22418,11354],{"class":138},[128,22420,22421],{"class":130,"line":529},[128,22422,7562],{"class":138},[128,22424,22425],{"class":130,"line":540},[128,22426,22427],{"class":3814},"\u002F\u002F调用\n",[128,22429,22430,22432,22434],{"class":130,"line":555},[128,22431,8922],{"class":134},[128,22433,9146],{"class":199},[128,22435,5563],{"class":138},[128,22437,22438],{"class":130,"line":576},[128,22439,5157],{"class":138},[128,22441,22442],{"class":130,"line":584},[128,22443,22444],{"class":3814},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[128,22446,22447],{"class":130,"line":593},[128,22448,2694],{"class":138},[128,22450,22451,22453,22455],{"class":130,"line":598},[128,22452,8922],{"class":134},[128,22454,9215],{"class":199},[128,22456,5563],{"class":138},[128,22458,22459],{"class":130,"line":603},[128,22460,5157],{"class":138},[128,22462,22463],{"class":130,"line":614},[128,22464,22465],{"class":3814},"    \u002F\u002F1.括号法\n",[128,22467,22468],{"class":130,"line":625},[128,22469,22470],{"class":3814},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[128,22472,22473],{"class":130,"line":633},[128,22474,22475],{"class":3814},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[128,22477,22478],{"class":130,"line":649},[128,22479,22480],{"class":3814},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[128,22482,22483],{"class":130,"line":660},[128,22484,22485],{"class":3814},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[128,22487,22488],{"class":130,"line":673},[128,22489,160],{"emptyLinePlaceholder":159},[128,22491,22492],{"class":130,"line":678},[128,22493,22494],{"class":3814},"    \u002F\u002F注意事项\n",[128,22496,22497],{"class":130,"line":683},[128,22498,22499],{"class":3814},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[128,22501,22502],{"class":130,"line":693},[128,22503,22504],{"class":3814},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[128,22506,22507],{"class":130,"line":702},[128,22508,22509],{"class":3814},"    \u002F\u002F Person p4();\n",[128,22511,22512],{"class":130,"line":709},[128,22513,160],{"emptyLinePlaceholder":159},[128,22515,22516],{"class":130,"line":723},[128,22517,22518],{"class":3814},"    \u002F\u002F2.显示法\n",[128,22520,22521],{"class":130,"line":732},[128,22522,22523],{"class":138},"    Person p1;\n",[128,22525,22526,22529,22531,22534,22536,22538],{"class":130,"line":744},[128,22527,22528],{"class":138},"    Person p2",[128,22530,270],{"class":134},[128,22532,22533],{"class":199},"Person",[128,22535,253],{"class":138},[128,22537,4196],{"class":166},[128,22539,6292],{"class":138},[128,22541,22542,22545,22547,22549],{"class":130,"line":749},[128,22543,22544],{"class":138},"    Person p3",[128,22546,270],{"class":134},[128,22548,22533],{"class":199},[128,22550,22551],{"class":138},"(p2);\n",[128,22553,22554],{"class":130,"line":754},[128,22555,22556],{"class":3814},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[128,22558,22559],{"class":130,"line":764},[128,22560,160],{"emptyLinePlaceholder":159},[128,22562,22563],{"class":130,"line":782},[128,22564,22565],{"class":3814},"    \u002F\u002F 注意事项2\n",[128,22567,22568],{"class":130,"line":787},[128,22569,22570],{"class":3814},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[128,22572,22573],{"class":130,"line":795},[128,22574,22575],{"class":3814},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[128,22577,22578],{"class":130,"line":807},[128,22579,160],{"emptyLinePlaceholder":159},[128,22581,22582],{"class":130,"line":813},[128,22583,22584],{"class":3814},"    \u002F\u002F3.隐士转换法\n",[128,22586,22587,22590,22592,22594,22596],{"class":130,"line":818},[128,22588,22589],{"class":138},"    Person p4",[128,22591,270],{"class":134},[128,22593,4196],{"class":166},[128,22595,3811],{"class":138},[128,22597,22598],{"class":3814},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[128,22600,22601,22604,22606,22609],{"class":130,"line":835},[128,22602,22603],{"class":138},"    Person p5",[128,22605,270],{"class":134},[128,22607,22608],{"class":138},"p4;",[128,22610,22611],{"class":3814}," \u002F\u002F 这里会调用拷贝构造函数\n",[128,22613,22614],{"class":130,"line":851},[128,22615,2694],{"class":138},[128,22617,22618,22620,22622],{"class":130,"line":867},[128,22619,3763],{"class":134},[128,22621,1575],{"class":199},[128,22623,5563],{"class":138},[128,22625,22626],{"class":130,"line":872},[128,22627,5157],{"class":138},[128,22629,22630,22632],{"class":130,"line":878},[128,22631,9191],{"class":199},[128,22633,9194],{"class":138},[128,22635,22636,22638],{"class":130,"line":887},[128,22637,9260],{"class":199},[128,22639,9194],{"class":138},[128,22641,22642,22644,22646],{"class":130,"line":896},[128,22643,587],{"class":134},[128,22645,7659],{"class":166},[128,22647,4905],{"class":138},[128,22649,22650],{"class":130,"line":905},[128,22651,2694],{"class":138},[19,22653,22654,22657],{},[3903,22655,22656],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[72,22659,22661],{"id":22660},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,22663,22664],{},"C++中拷贝构造函数调用时机通常有三种情况",[4752,22666,22667,22670,22673],{},[29,22668,22669],{},"使用一个已经创建完毕的对象来初始化一个新对象",[29,22671,22672],{},"值传递的方式给函数参数传值",[29,22674,22675],{},"以值方式返回局部对象",[106,22677,22679],{"className":3749,"code":22678,"language":3751,"meta":112,"style":112},"#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",[114,22680,22681,22687,22697,22701,22706,22710,22715,22720,22725,22731,22735,22739,22745,22749,22762,22766,22771,22783,22787,22795,22808,22812,22816,22832,22836,22845,22858,22862,22868,22872,22884,22888,22894,22898,22902,22910,22914,22927,22935,22953,22957,22962,22967,22982,22986,22999,23003,23011,23015,23019,23027,23031,23036,23045,23049,23053,23078,23088,23092,23100,23104,23115,23140,23144,23148,23152,23160,23164,23169,23174,23181,23186,23191,23196,23201,23205,23210,23214,23219,23223,23228,23233,23237,23241,23246,23251,23259],{"__ignoreMap":112},[128,22682,22683,22685],{"class":130,"line":131},[128,22684,5538],{"class":134},[128,22686,5541],{"class":176},[128,22688,22689,22691,22693,22695],{"class":130,"line":142},[128,22690,5546],{"class":134},[128,22692,5549],{"class":134},[128,22694,5552],{"class":199},[128,22696,4905],{"class":138},[128,22698,22699],{"class":130,"line":156},[128,22700,160],{"emptyLinePlaceholder":159},[128,22702,22703],{"class":130,"line":163},[128,22704,22705],{"class":3814},"\u002F\u002F拷贝构造函数调用时机\n",[128,22707,22708],{"class":130,"line":183},[128,22709,160],{"emptyLinePlaceholder":159},[128,22711,22712],{"class":130,"line":188},[128,22713,22714],{"class":3814},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[128,22716,22717],{"class":130,"line":193},[128,22718,22719],{"class":3814},"\u002F\u002F2.值传递的方式给函数参数传值\n",[128,22721,22722],{"class":130,"line":206},[128,22723,22724],{"class":3814},"\u002F\u002F3.以值方式返回局部对象\n",[128,22726,22727,22729],{"class":130,"line":221},[128,22728,1901],{"class":134},[128,22730,18692],{"class":199},[128,22732,22733],{"class":130,"line":230},[128,22734,5157],{"class":138},[128,22736,22737],{"class":130,"line":235},[128,22738,18239],{"class":134},[128,22740,22741,22743],{"class":130,"line":244},[128,22742,22006],{"class":199},[128,22744,5563],{"class":138},[128,22746,22747],{"class":130,"line":287},[128,22748,5617],{"class":138},[128,22750,22751,22753,22755,22758,22760],{"class":130,"line":301},[128,22752,13215],{"class":138},[128,22754,4789],{"class":134},[128,22756,22757],{"class":176}," \"Person的默认构造函数调用\"",[128,22759,5056],{"class":134},[128,22761,12386],{"class":138},[128,22763,22764],{"class":130,"line":310},[128,22765,5773],{"class":138},[128,22767,22768],{"class":130,"line":323},[128,22769,22770],{"class":3814},"    \u002F\u002F有参构造\n",[128,22772,22773,22775,22777,22779,22781],{"class":130,"line":330},[128,22774,22006],{"class":199},[128,22776,253],{"class":138},[128,22778,3763],{"class":134},[128,22780,19209],{"class":266},[128,22782,180],{"class":138},[128,22784,22785],{"class":130,"line":335},[128,22786,5617],{"class":138},[128,22788,22789,22791,22793],{"class":130,"line":340},[128,22790,19262],{"class":138},[128,22792,270],{"class":134},[128,22794,11354],{"class":138},[128,22796,22797,22799,22801,22804,22806],{"class":130,"line":351},[128,22798,13215],{"class":138},[128,22800,4789],{"class":134},[128,22802,22803],{"class":176}," \"Person的有参构造函数调用\"",[128,22805,5056],{"class":134},[128,22807,12386],{"class":138},[128,22809,22810],{"class":130,"line":384},[128,22811,5773],{"class":138},[128,22813,22814],{"class":130,"line":414},[128,22815,22361],{"class":3814},[128,22817,22818,22820,22822,22824,22826,22828,22830],{"class":130,"line":419},[128,22819,22006],{"class":199},[128,22821,253],{"class":138},[128,22823,10349],{"class":134},[128,22825,19090],{"class":199},[128,22827,14111],{"class":134},[128,22829,19],{"class":266},[128,22831,180],{"class":138},[128,22833,22834],{"class":130,"line":424},[128,22835,5617],{"class":138},[128,22837,22838,22840,22842],{"class":130,"line":434},[128,22839,19262],{"class":138},[128,22841,270],{"class":134},[128,22843,22844],{"class":138}," p.m_Age;\n",[128,22846,22847,22849,22851,22854,22856],{"class":130,"line":447},[128,22848,13215],{"class":138},[128,22850,4789],{"class":134},[128,22852,22853],{"class":176}," \"Person的拷贝构造函数调用\"",[128,22855,5056],{"class":134},[128,22857,12386],{"class":138},[128,22859,22860],{"class":130,"line":459},[128,22861,5773],{"class":138},[128,22863,22864,22866],{"class":130,"line":471},[128,22865,22039],{"class":199},[128,22867,5563],{"class":138},[128,22869,22870],{"class":130,"line":483},[128,22871,5617],{"class":138},[128,22873,22874,22876,22878,22880,22882],{"class":130,"line":495},[128,22875,13215],{"class":138},[128,22877,4789],{"class":134},[128,22879,22054],{"class":176},[128,22881,5056],{"class":134},[128,22883,12386],{"class":138},[128,22885,22886],{"class":130,"line":507},[128,22887,5773],{"class":138},[128,22889,22890,22892],{"class":130,"line":519},[128,22891,5572],{"class":134},[128,22893,19186],{"class":138},[128,22895,22896],{"class":130,"line":524},[128,22897,7562],{"class":138},[128,22899,22900],{"class":130,"line":529},[128,22901,22714],{"class":3814},[128,22903,22904,22906,22908],{"class":130,"line":540},[128,22905,8922],{"class":134},[128,22907,9146],{"class":199},[128,22909,5563],{"class":138},[128,22911,22912],{"class":130,"line":555},[128,22913,5157],{"class":138},[128,22915,22916,22919,22921,22923,22925],{"class":130,"line":576},[128,22917,22918],{"class":138},"    Person ",[128,22920,10687],{"class":199},[128,22922,253],{"class":138},[128,22924,4449],{"class":166},[128,22926,6292],{"class":138},[128,22928,22929,22931,22933],{"class":130,"line":584},[128,22930,22918],{"class":138},[128,22932,10590],{"class":199},[128,22934,21002],{"class":138},[128,22936,22937,22939,22941,22944,22946,22949,22951],{"class":130,"line":593},[128,22938,5162],{"class":138},[128,22940,4789],{"class":134},[128,22942,22943],{"class":176},"\"P2的年龄为：\"",[128,22945,4789],{"class":134},[128,22947,22948],{"class":138},"p2.m_Age",[128,22950,4789],{"class":134},[128,22952,4811],{"class":138},[128,22954,22955],{"class":130,"line":598},[128,22956,2694],{"class":138},[128,22958,22959],{"class":130,"line":603},[128,22960,22961],{"class":3814},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[128,22963,22964],{"class":130,"line":614},[128,22965,22966],{"class":3814},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[128,22968,22969,22971,22974,22976,22978,22980],{"class":130,"line":625},[128,22970,8922],{"class":134},[128,22972,22973],{"class":199}," doWork",[128,22975,253],{"class":138},[128,22977,22533],{"class":199},[128,22979,10382],{"class":266},[128,22981,180],{"class":138},[128,22983,22984],{"class":130,"line":633},[128,22985,5157],{"class":138},[128,22987,22988,22990,22992,22995,22997],{"class":130,"line":649},[128,22989,10086],{"class":138},[128,22991,4789],{"class":134},[128,22993,22994],{"class":176}," \"doWork函数调用\"",[128,22996,5056],{"class":134},[128,22998,12386],{"class":138},[128,23000,23001],{"class":130,"line":660},[128,23002,2694],{"class":138},[128,23004,23005,23007,23009],{"class":130,"line":673},[128,23006,8922],{"class":134},[128,23008,9215],{"class":199},[128,23010,5563],{"class":138},[128,23012,23013],{"class":130,"line":678},[128,23014,5157],{"class":138},[128,23016,23017],{"class":130,"line":683},[128,23018,18834],{"class":138},[128,23020,23021,23024],{"class":130,"line":693},[128,23022,23023],{"class":199},"    doWork",[128,23025,23026],{"class":138},"(p);\n",[128,23028,23029],{"class":130,"line":702},[128,23030,2694],{"class":138},[128,23032,23033],{"class":130,"line":709},[128,23034,23035],{"class":3814},"\u002F\u002F 3.以值方式返回局部对象\n",[128,23037,23038,23040,23043],{"class":130,"line":723},[128,23039,22533],{"class":199},[128,23041,23042],{"class":199}," doWork2",[128,23044,5563],{"class":138},[128,23046,23047],{"class":130,"line":732},[128,23048,5157],{"class":138},[128,23050,23051],{"class":130,"line":744},[128,23052,22523],{"class":138},[128,23054,23055,23057,23059,23061,23063,23065,23067,23069,23071,23073,23075],{"class":130,"line":749},[128,23056,5162],{"class":138},[128,23058,4789],{"class":134},[128,23060,253],{"class":138},[128,23062,3763],{"class":134},[128,23064,10075],{"class":134},[128,23066,4179],{"class":138},[128,23068,4103],{"class":134},[128,23070,10687],{"class":138},[128,23072,4789],{"class":134},[128,23074,4853],{"class":138},[128,23076,23077],{"class":3814},"\u002F\u002F打印p1的地址\n",[128,23079,23080,23082,23085],{"class":130,"line":754},[128,23081,587],{"class":134},[128,23083,23084],{"class":138}," p1;",[128,23086,23087],{"class":3814},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[128,23089,23090],{"class":130,"line":764},[128,23091,2694],{"class":138},[128,23093,23094,23096,23098],{"class":130,"line":782},[128,23095,8922],{"class":134},[128,23097,9287],{"class":199},[128,23099,5563],{"class":138},[128,23101,23102],{"class":130,"line":787},[128,23103,5157],{"class":138},[128,23105,23106,23109,23111,23113],{"class":130,"line":795},[128,23107,23108],{"class":138},"    Person p ",[128,23110,270],{"class":134},[128,23112,23042],{"class":199},[128,23114,9194],{"class":138},[128,23116,23117,23119,23121,23123,23125,23127,23129,23131,23133,23135,23137],{"class":130,"line":807},[128,23118,5162],{"class":138},[128,23120,4789],{"class":134},[128,23122,253],{"class":138},[128,23124,3763],{"class":134},[128,23126,10075],{"class":134},[128,23128,4179],{"class":138},[128,23130,4103],{"class":134},[128,23132,19],{"class":138},[128,23134,4789],{"class":134},[128,23136,4853],{"class":138},[128,23138,23139],{"class":3814},"\u002F\u002F打印p的地址\n",[128,23141,23142],{"class":130,"line":813},[128,23143,2694],{"class":138},[128,23145,23146],{"class":130,"line":818},[128,23147,160],{"emptyLinePlaceholder":159},[128,23149,23150],{"class":130,"line":835},[128,23151,160],{"emptyLinePlaceholder":159},[128,23153,23154,23156,23158],{"class":130,"line":851},[128,23155,3763],{"class":134},[128,23157,1575],{"class":199},[128,23159,5563],{"class":138},[128,23161,23162],{"class":130,"line":867},[128,23163,5157],{"class":138},[128,23165,23166],{"class":130,"line":872},[128,23167,23168],{"class":3814},"    \u002F\u002F test01();\n",[128,23170,23171],{"class":130,"line":878},[128,23172,23173],{"class":3814},"    \u002F\u002F test02();\n",[128,23175,23176,23179],{"class":130,"line":887},[128,23177,23178],{"class":199},"    test03",[128,23180,9194],{"class":138},[128,23182,23183],{"class":130,"line":896},[128,23184,23185],{"class":3814},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[128,23187,23188],{"class":130,"line":905},[128,23189,23190],{"class":3814},"\u002F\u002F 输出结果如下：\n",[128,23192,23193],{"class":130,"line":914},[128,23194,23195],{"class":3814},"\u002F\u002F Person的默认构造函数调用\n",[128,23197,23198],{"class":130,"line":920},[128,23199,23200],{"class":3814},"\u002F\u002F 0x7fffffffceec\n",[128,23202,23203],{"class":130,"line":926},[128,23204,23200],{"class":3814},[128,23206,23207],{"class":130,"line":938},[128,23208,23209],{"class":3814},"\u002F\u002F Person的析构函数调用\n",[128,23211,23212],{"class":130,"line":943},[128,23213,160],{"emptyLinePlaceholder":159},[128,23215,23216],{"class":130,"line":948},[128,23217,23218],{"class":3814},"\u002F\u002F 之前的输出结果如下：\n",[128,23220,23221],{"class":130,"line":958},[128,23222,23195],{"class":3814},[128,23224,23225],{"class":130,"line":974},[128,23226,23227],{"class":3814},"\u002F\u002F 地址\n",[128,23229,23230],{"class":130,"line":985},[128,23231,23232],{"class":3814},"\u002F\u002F Person的拷贝构造函数调用\n",[128,23234,23235],{"class":130,"line":990},[128,23236,23209],{"class":3814},[128,23238,23239],{"class":130,"line":1005},[128,23240,23227],{"class":3814},[128,23242,23243],{"class":130,"line":1017},[128,23244,23245],{"class":3814},"\u002F\u002F (这两次输出的地址也是不同的) \n",[128,23247,23248],{"class":130,"line":1022},[128,23249,23250],{"class":3814},"\u002F\u002F Person的析构函数调用     \n",[128,23252,23253,23255,23257],{"class":130,"line":1027},[128,23254,587],{"class":134},[128,23256,7659],{"class":166},[128,23258,4905],{"class":138},[128,23260,23261],{"class":130,"line":1033},[128,23262,2694],{"class":138},[19,23264,23265],{},"简化版理解",[106,23267,23269],{"className":3749,"code":23268,"language":3751,"meta":112,"style":112},"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",[114,23270,23271,23279,23283,23289,23302,23313,23317,23329,23342,23350,23354,23370,23383,23392,23396,23401,23407,23420,23424,23428,23435,23439,23443,23448,23456,23460,23476,23489,23502,23506,23511,23519,23523,23527,23532,23537,23553,23561,23568,23574,23578,23582,23587,23595,23599,23603,23626,23633,23637,23641,23649,23653,23663,23685,23689,23693,23697,23705,23709,23714,23719,23725,23729,23739,23743,23751],{"__ignoreMap":112},[128,23272,23273,23275,23277],{"class":130,"line":131},[128,23274,1901],{"class":134},[128,23276,19090],{"class":199},[128,23278,1959],{"class":138},[128,23280,23281],{"class":130,"line":142},[128,23282,18239],{"class":134},[128,23284,23285,23287],{"class":130,"line":156},[128,23286,22006],{"class":199},[128,23288,14380],{"class":138},[128,23290,23291,23293,23295,23298,23300],{"class":130,"line":163},[128,23292,13215],{"class":138},[128,23294,4789],{"class":134},[128,23296,23297],{"class":176}," \"无参构造函数!\"",[128,23299,5056],{"class":134},[128,23301,12386],{"class":138},[128,23303,23304,23307,23309,23311],{"class":130,"line":183},[128,23305,23306],{"class":138},"        mAge ",[128,23308,270],{"class":134},[128,23310,7659],{"class":166},[128,23312,4905],{"class":138},[128,23314,23315],{"class":130,"line":188},[128,23316,5773],{"class":138},[128,23318,23319,23321,23323,23325,23327],{"class":130,"line":193},[128,23320,22006],{"class":199},[128,23322,253],{"class":138},[128,23324,3763],{"class":134},[128,23326,19209],{"class":266},[128,23328,15968],{"class":138},[128,23330,23331,23333,23335,23338,23340],{"class":130,"line":206},[128,23332,13215],{"class":138},[128,23334,4789],{"class":134},[128,23336,23337],{"class":176}," \"有参构造函数!\"",[128,23339,5056],{"class":134},[128,23341,12386],{"class":138},[128,23343,23344,23346,23348],{"class":130,"line":221},[128,23345,23306],{"class":138},[128,23347,270],{"class":134},[128,23349,11354],{"class":138},[128,23351,23352],{"class":130,"line":230},[128,23353,5773],{"class":138},[128,23355,23356,23358,23360,23362,23364,23366,23368],{"class":130,"line":235},[128,23357,22006],{"class":199},[128,23359,253],{"class":138},[128,23361,10349],{"class":134},[128,23363,19090],{"class":199},[128,23365,4103],{"class":134},[128,23367,10382],{"class":266},[128,23369,15968],{"class":138},[128,23371,23372,23374,23376,23379,23381],{"class":130,"line":244},[128,23373,13215],{"class":138},[128,23375,4789],{"class":134},[128,23377,23378],{"class":176}," \"拷贝构造函数!\"",[128,23380,5056],{"class":134},[128,23382,12386],{"class":138},[128,23384,23385,23387,23389],{"class":130,"line":287},[128,23386,23306],{"class":138},[128,23388,270],{"class":134},[128,23390,23391],{"class":138}," p.mAge;\n",[128,23393,23394],{"class":130,"line":301},[128,23395,5773],{"class":138},[128,23397,23398],{"class":130,"line":310},[128,23399,23400],{"class":3814},"    \u002F\u002F析构函数在释放内存之前调用\n",[128,23402,23403,23405],{"class":130,"line":323},[128,23404,22039],{"class":199},[128,23406,14380],{"class":138},[128,23408,23409,23411,23413,23416,23418],{"class":130,"line":330},[128,23410,13215],{"class":138},[128,23412,4789],{"class":134},[128,23414,23415],{"class":176}," \"析构函数!\"",[128,23417,5056],{"class":134},[128,23419,12386],{"class":138},[128,23421,23422],{"class":130,"line":335},[128,23423,5773],{"class":138},[128,23425,23426],{"class":130,"line":340},[128,23427,18239],{"class":134},[128,23429,23430,23432],{"class":130,"line":351},[128,23431,5572],{"class":134},[128,23433,23434],{"class":138}," mAge;\n",[128,23436,23437],{"class":130,"line":384},[128,23438,7562],{"class":138},[128,23440,23441],{"class":130,"line":414},[128,23442,160],{"emptyLinePlaceholder":159},[128,23444,23445],{"class":130,"line":419},[128,23446,23447],{"class":3814},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[128,23449,23450,23452,23454],{"class":130,"line":424},[128,23451,8922],{"class":134},[128,23453,9146],{"class":199},[128,23455,14380],{"class":138},[128,23457,23458],{"class":130,"line":434},[128,23459,160],{"emptyLinePlaceholder":159},[128,23461,23462,23464,23467,23469,23471,23473],{"class":130,"line":447},[128,23463,22918],{"class":138},[128,23465,23466],{"class":199},"man",[128,23468,253],{"class":138},[128,23470,4061],{"class":166},[128,23472,9523],{"class":138},[128,23474,23475],{"class":3814}," \u002F\u002Fp对象已经创建完毕\n",[128,23477,23478,23480,23483,23486],{"class":130,"line":459},[128,23479,22918],{"class":138},[128,23481,23482],{"class":199},"newman",[128,23484,23485],{"class":138},"(man);",[128,23487,23488],{"class":3814}," \u002F\u002F调用拷贝构造函数\n",[128,23490,23491,23494,23496,23499],{"class":130,"line":471},[128,23492,23493],{"class":138},"    Person newman2 ",[128,23495,270],{"class":134},[128,23497,23498],{"class":138}," man;",[128,23500,23501],{"class":3814}," \u002F\u002F拷贝构造\n",[128,23503,23504],{"class":130,"line":483},[128,23505,160],{"emptyLinePlaceholder":159},[128,23507,23508],{"class":130,"line":495},[128,23509,23510],{"class":3814},"    \u002F\u002FPerson newman3;\n",[128,23512,23513,23516],{"class":130,"line":507},[128,23514,23515],{"class":3814},"    \u002F\u002Fnewman3 = man;",[128,23517,23518],{"class":3814}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[128,23520,23521],{"class":130,"line":519},[128,23522,2694],{"class":138},[128,23524,23525],{"class":130,"line":524},[128,23526,160],{"emptyLinePlaceholder":159},[128,23528,23529],{"class":130,"line":529},[128,23530,23531],{"class":3814},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[128,23533,23534],{"class":130,"line":540},[128,23535,23536],{"class":3814},"\u002F\u002F相当于Person p1 = p;\n",[128,23538,23539,23541,23543,23545,23547,23550],{"class":130,"line":555},[128,23540,8922],{"class":134},[128,23542,22973],{"class":199},[128,23544,253],{"class":138},[128,23546,22533],{"class":199},[128,23548,23549],{"class":266}," p1",[128,23551,23552],{"class":138},") {}\n",[128,23554,23555,23557,23559],{"class":130,"line":576},[128,23556,8922],{"class":134},[128,23558,9215],{"class":199},[128,23560,14380],{"class":138},[128,23562,23563,23565],{"class":130,"line":584},[128,23564,22091],{"class":138},[128,23566,23567],{"class":3814}," \u002F\u002F无参构造函数\n",[128,23569,23570,23572],{"class":130,"line":593},[128,23571,23023],{"class":199},[128,23573,23026],{"class":138},[128,23575,23576],{"class":130,"line":598},[128,23577,2694],{"class":138},[128,23579,23580],{"class":130,"line":603},[128,23581,160],{"emptyLinePlaceholder":159},[128,23583,23584],{"class":130,"line":614},[128,23585,23586],{"class":3814},"\u002F\u002F3. 以值方式返回局部对象\n",[128,23588,23589,23591,23593],{"class":130,"line":625},[128,23590,22533],{"class":199},[128,23592,23042],{"class":199},[128,23594,5563],{"class":138},[128,23596,23597],{"class":130,"line":633},[128,23598,5157],{"class":138},[128,23600,23601],{"class":130,"line":649},[128,23602,22523],{"class":138},[128,23604,23605,23607,23609,23611,23613,23615,23617,23619,23622,23624],{"class":130,"line":660},[128,23606,10086],{"class":138},[128,23608,4789],{"class":134},[128,23610,5260],{"class":138},[128,23612,3763],{"class":134},[128,23614,10075],{"class":134},[128,23616,4179],{"class":138},[128,23618,4103],{"class":134},[128,23620,23621],{"class":138},"p1 ",[128,23623,4789],{"class":134},[128,23625,12386],{"class":138},[128,23627,23628,23630],{"class":130,"line":673},[128,23629,587],{"class":134},[128,23631,23632],{"class":138}," p1;\n",[128,23634,23635],{"class":130,"line":678},[128,23636,2694],{"class":138},[128,23638,23639],{"class":130,"line":683},[128,23640,160],{"emptyLinePlaceholder":159},[128,23642,23643,23645,23647],{"class":130,"line":693},[128,23644,8922],{"class":134},[128,23646,9287],{"class":199},[128,23648,5563],{"class":138},[128,23650,23651],{"class":130,"line":702},[128,23652,5157],{"class":138},[128,23654,23655,23657,23659,23661],{"class":130,"line":709},[128,23656,23108],{"class":138},[128,23658,270],{"class":134},[128,23660,23042],{"class":199},[128,23662,9194],{"class":138},[128,23664,23665,23667,23669,23671,23673,23675,23677,23679,23681,23683],{"class":130,"line":723},[128,23666,10086],{"class":138},[128,23668,4789],{"class":134},[128,23670,5260],{"class":138},[128,23672,3763],{"class":134},[128,23674,10075],{"class":134},[128,23676,4179],{"class":138},[128,23678,4103],{"class":134},[128,23680,14975],{"class":138},[128,23682,4789],{"class":134},[128,23684,12386],{"class":138},[128,23686,23687],{"class":130,"line":732},[128,23688,2694],{"class":138},[128,23690,23691],{"class":130,"line":744},[128,23692,160],{"emptyLinePlaceholder":159},[128,23694,23695],{"class":130,"line":749},[128,23696,160],{"emptyLinePlaceholder":159},[128,23698,23699,23701,23703],{"class":130,"line":754},[128,23700,3763],{"class":134},[128,23702,1575],{"class":199},[128,23704,14380],{"class":138},[128,23706,23707],{"class":130,"line":764},[128,23708,160],{"emptyLinePlaceholder":159},[128,23710,23711],{"class":130,"line":782},[128,23712,23713],{"class":3814},"    \u002F\u002Ftest01();\n",[128,23715,23716],{"class":130,"line":787},[128,23717,23718],{"class":3814},"    \u002F\u002Ftest02();\n",[128,23720,23721,23723],{"class":130,"line":795},[128,23722,23178],{"class":199},[128,23724,9194],{"class":138},[128,23726,23727],{"class":130,"line":807},[128,23728,160],{"emptyLinePlaceholder":159},[128,23730,23731,23733,23735,23737],{"class":130,"line":813},[128,23732,5888],{"class":199},[128,23734,253],{"class":138},[128,23736,5893],{"class":176},[128,23738,6292],{"class":138},[128,23740,23741],{"class":130,"line":818},[128,23742,160],{"emptyLinePlaceholder":159},[128,23744,23745,23747,23749],{"class":130,"line":835},[128,23746,587],{"class":134},[128,23748,7659],{"class":166},[128,23750,4905],{"class":138},[128,23752,23753],{"class":130,"line":851},[128,23754,2694],{"class":138},[72,23756,23758],{"id":23757},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,23760,23761],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,23763,23764],{},"1．默认构造函数(无参，函数体为空)",[19,23766,23767],{},"2．默认析构函数(无参，函数体为空)",[19,23769,23770],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,23772,23773],{},"构造函数调用规则如下：",[4752,23775,23776,23779],{},[29,23777,23778],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[29,23780,23781],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[106,23783,23785],{"className":3749,"code":23784,"language":3751,"meta":112,"style":112},"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",[114,23786,23787,23795,23799,23804,23810,23822,23826,23831,23843,23852,23864,23868,23872,23888,23897,23909,23913,23917,23923,23935,23939,23943,23949,23953,23957,23965,23969,23981,23986,23994,23998,24016,24020,24024,24032,24036,24041,24049,24064,24077,24081,24086,24093,24109,24122,24126,24130,24138,24142,24148,24152,24162,24166,24174],{"__ignoreMap":112},[128,23788,23789,23791,23793],{"class":130,"line":131},[128,23790,1901],{"class":134},[128,23792,19090],{"class":199},[128,23794,1959],{"class":138},[128,23796,23797],{"class":130,"line":142},[128,23798,18239],{"class":134},[128,23800,23801],{"class":130,"line":156},[128,23802,23803],{"class":3814},"    \u002F\u002F无参（默认）构造函数\n",[128,23805,23806,23808],{"class":130,"line":163},[128,23807,22006],{"class":199},[128,23809,14380],{"class":138},[128,23811,23812,23814,23816,23818,23820],{"class":130,"line":183},[128,23813,13215],{"class":138},[128,23815,4789],{"class":134},[128,23817,23297],{"class":176},[128,23819,5056],{"class":134},[128,23821,12386],{"class":138},[128,23823,23824],{"class":130,"line":188},[128,23825,5773],{"class":138},[128,23827,23828],{"class":130,"line":193},[128,23829,23830],{"class":3814},"    \u002F\u002F有参构造函数\n",[128,23832,23833,23835,23837,23839,23841],{"class":130,"line":206},[128,23834,22006],{"class":199},[128,23836,253],{"class":138},[128,23838,3763],{"class":134},[128,23840,5010],{"class":266},[128,23842,15968],{"class":138},[128,23844,23845,23848,23850],{"class":130,"line":221},[128,23846,23847],{"class":138},"        age ",[128,23849,270],{"class":134},[128,23851,5044],{"class":138},[128,23853,23854,23856,23858,23860,23862],{"class":130,"line":230},[128,23855,13215],{"class":138},[128,23857,4789],{"class":134},[128,23859,23337],{"class":176},[128,23861,5056],{"class":134},[128,23863,12386],{"class":138},[128,23865,23866],{"class":130,"line":235},[128,23867,5773],{"class":138},[128,23869,23870],{"class":130,"line":244},[128,23871,22361],{"class":3814},[128,23873,23874,23876,23878,23880,23882,23884,23886],{"class":130,"line":287},[128,23875,22006],{"class":199},[128,23877,253],{"class":138},[128,23879,10349],{"class":134},[128,23881,19090],{"class":199},[128,23883,4103],{"class":134},[128,23885,10382],{"class":266},[128,23887,15968],{"class":138},[128,23889,23890,23892,23894],{"class":130,"line":301},[128,23891,23847],{"class":138},[128,23893,270],{"class":134},[128,23895,23896],{"class":138}," p.age;\n",[128,23898,23899,23901,23903,23905,23907],{"class":130,"line":310},[128,23900,13215],{"class":138},[128,23902,4789],{"class":134},[128,23904,23378],{"class":176},[128,23906,5056],{"class":134},[128,23908,12386],{"class":138},[128,23910,23911],{"class":130,"line":323},[128,23912,5773],{"class":138},[128,23914,23915],{"class":130,"line":330},[128,23916,22034],{"class":3814},[128,23918,23919,23921],{"class":130,"line":335},[128,23920,22039],{"class":199},[128,23922,14380],{"class":138},[128,23924,23925,23927,23929,23931,23933],{"class":130,"line":340},[128,23926,13215],{"class":138},[128,23928,4789],{"class":134},[128,23930,23415],{"class":176},[128,23932,5056],{"class":134},[128,23934,12386],{"class":138},[128,23936,23937],{"class":130,"line":351},[128,23938,5773],{"class":138},[128,23940,23941],{"class":130,"line":384},[128,23942,18239],{"class":134},[128,23944,23945,23947],{"class":130,"line":414},[128,23946,5572],{"class":134},[128,23948,11354],{"class":138},[128,23950,23951],{"class":130,"line":419},[128,23952,7562],{"class":138},[128,23954,23955],{"class":130,"line":424},[128,23956,160],{"emptyLinePlaceholder":159},[128,23958,23959,23961,23963],{"class":130,"line":434},[128,23960,8922],{"class":134},[128,23962,9146],{"class":199},[128,23964,5563],{"class":138},[128,23966,23967],{"class":130,"line":447},[128,23968,5157],{"class":138},[128,23970,23971,23973,23975,23977,23979],{"class":130,"line":459},[128,23972,22918],{"class":138},[128,23974,10687],{"class":199},[128,23976,253],{"class":138},[128,23978,4399],{"class":166},[128,23980,6292],{"class":138},[128,23982,23983],{"class":130,"line":471},[128,23984,23985],{"class":3814},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[128,23987,23988,23990,23992],{"class":130,"line":483},[128,23989,22918],{"class":138},[128,23991,10590],{"class":199},[128,23993,21002],{"class":138},[128,23995,23996],{"class":130,"line":495},[128,23997,160],{"emptyLinePlaceholder":159},[128,23999,24000,24002,24004,24007,24009,24012,24014],{"class":130,"line":507},[128,24001,10086],{"class":138},[128,24003,4789],{"class":134},[128,24005,24006],{"class":176}," \"p2的年龄为： \"",[128,24008,5056],{"class":134},[128,24010,24011],{"class":138}," p2.age ",[128,24013,4789],{"class":134},[128,24015,12386],{"class":138},[128,24017,24018],{"class":130,"line":519},[128,24019,2694],{"class":138},[128,24021,24022],{"class":130,"line":524},[128,24023,160],{"emptyLinePlaceholder":159},[128,24025,24026,24028,24030],{"class":130,"line":529},[128,24027,8922],{"class":134},[128,24029,9215],{"class":199},[128,24031,5563],{"class":138},[128,24033,24034],{"class":130,"line":540},[128,24035,5157],{"class":138},[128,24037,24038],{"class":130,"line":555},[128,24039,24040],{"class":3814},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[128,24042,24043,24046],{"class":130,"line":576},[128,24044,24045],{"class":138},"    Person p1;",[128,24047,24048],{"class":3814}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[128,24050,24051,24053,24055,24057,24059,24061],{"class":130,"line":584},[128,24052,22918],{"class":138},[128,24054,10590],{"class":199},[128,24056,253],{"class":138},[128,24058,4196],{"class":166},[128,24060,9523],{"class":138},[128,24062,24063],{"class":3814}," \u002F\u002F用户提供的有参\n",[128,24065,24066,24068,24071,24074],{"class":130,"line":593},[128,24067,22918],{"class":138},[128,24069,24070],{"class":199},"p3",[128,24072,24073],{"class":138},"(p2);",[128,24075,24076],{"class":3814}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[128,24078,24079],{"class":130,"line":598},[128,24080,160],{"emptyLinePlaceholder":159},[128,24082,24083],{"class":130,"line":603},[128,24084,24085],{"class":3814},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[128,24087,24088,24091],{"class":130,"line":614},[128,24089,24090],{"class":138},"    Person p4;",[128,24092,24048],{"class":3814},[128,24094,24095,24097,24100,24102,24104,24106],{"class":130,"line":625},[128,24096,22918],{"class":138},[128,24098,24099],{"class":199},"p5",[128,24101,253],{"class":138},[128,24103,4196],{"class":166},[128,24105,9523],{"class":138},[128,24107,24108],{"class":3814}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[128,24110,24111,24113,24116,24119],{"class":130,"line":633},[128,24112,22918],{"class":138},[128,24114,24115],{"class":199},"p6",[128,24117,24118],{"class":138},"(p5);",[128,24120,24121],{"class":3814}," \u002F\u002F用户自己提供拷贝构造\n",[128,24123,24124],{"class":130,"line":649},[128,24125,2694],{"class":138},[128,24127,24128],{"class":130,"line":660},[128,24129,160],{"emptyLinePlaceholder":159},[128,24131,24132,24134,24136],{"class":130,"line":673},[128,24133,3763],{"class":134},[128,24135,1575],{"class":199},[128,24137,14380],{"class":138},[128,24139,24140],{"class":130,"line":678},[128,24141,160],{"emptyLinePlaceholder":159},[128,24143,24144,24146],{"class":130,"line":683},[128,24145,9191],{"class":199},[128,24147,9194],{"class":138},[128,24149,24150],{"class":130,"line":693},[128,24151,160],{"emptyLinePlaceholder":159},[128,24153,24154,24156,24158,24160],{"class":130,"line":702},[128,24155,5888],{"class":199},[128,24157,253],{"class":138},[128,24159,5893],{"class":176},[128,24161,6292],{"class":138},[128,24163,24164],{"class":130,"line":709},[128,24165,160],{"emptyLinePlaceholder":159},[128,24167,24168,24170,24172],{"class":130,"line":723},[128,24169,587],{"class":134},[128,24171,7659],{"class":166},[128,24173,4905],{"class":138},[128,24175,24176],{"class":130,"line":732},[128,24177,2694],{"class":138},[72,24179,24181],{"id":24180},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,24183,24184],{},"浅拷贝：简单的赋值拷贝操作",[19,24186,24187],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[106,24189,24191],{"className":3749,"code":24190,"language":3751,"meta":112,"style":112},"#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",[114,24192,24193,24199,24209,24215,24219,24223,24228,24234,24238,24251,24255,24259,24266,24270,24280,24295,24308,24312,24317,24322,24338,24342,24355,24360,24365,24370,24379,24384,24399,24403,24407,24411,24417,24421,24426,24441,24445,24456,24470,24474,24483,24487,24493,24505,24509,24517,24521,24538,24569,24577,24605,24609,24613,24621,24625,24631],{"__ignoreMap":112},[128,24194,24195,24197],{"class":130,"line":131},[128,24196,5538],{"class":134},[128,24198,5541],{"class":176},[128,24200,24201,24203,24205,24207],{"class":130,"line":142},[128,24202,5546],{"class":134},[128,24204,5549],{"class":134},[128,24206,5552],{"class":199},[128,24208,4905],{"class":138},[128,24210,24211,24213],{"class":130,"line":156},[128,24212,1901],{"class":134},[128,24214,18692],{"class":199},[128,24216,24217],{"class":130,"line":163},[128,24218,5157],{"class":138},[128,24220,24221],{"class":130,"line":183},[128,24222,18239],{"class":134},[128,24224,24225],{"class":130,"line":188},[128,24226,24227],{"class":3814},"    \u002F\u002F默认构造函数\n",[128,24229,24230,24232],{"class":130,"line":193},[128,24231,22006],{"class":199},[128,24233,5563],{"class":138},[128,24235,24236],{"class":130,"line":206},[128,24237,5617],{"class":138},[128,24239,24240,24242,24244,24247,24249],{"class":130,"line":221},[128,24241,7019],{"class":138},[128,24243,4789],{"class":134},[128,24245,24246],{"class":176},"\"默认构造函数\"",[128,24248,4789],{"class":134},[128,24250,4811],{"class":138},[128,24252,24253],{"class":130,"line":230},[128,24254,5773],{"class":138},[128,24256,24257],{"class":130,"line":235},[128,24258,23830],{"class":3814},[128,24260,24261,24263],{"class":130,"line":244},[128,24262,22039],{"class":199},[128,24264,24265],{"class":138},"(int age,int height)\n",[128,24267,24268],{"class":130,"line":287},[128,24269,5617],{"class":138},[128,24271,24272,24275,24277],{"class":130,"line":301},[128,24273,24274],{"class":138},"        m_Age",[128,24276,270],{"class":134},[128,24278,24279],{"class":138},"age;\n",[128,24281,24282,24285,24287,24289,24292],{"class":130,"line":310},[128,24283,24284],{"class":138},"        m_Height",[128,24286,15244],{"class":134},[128,24288,638],{"class":134},[128,24290,24291],{"class":138},"(height);",[128,24293,24294],{"class":3814},"\u002F\u002F放到堆区\n",[128,24296,24297,24299,24301,24304,24306],{"class":130,"line":323},[128,24298,7019],{"class":138},[128,24300,4789],{"class":134},[128,24302,24303],{"class":176},"\"有参构造函数\"",[128,24305,4789],{"class":134},[128,24307,4811],{"class":138},[128,24309,24310],{"class":130,"line":330},[128,24311,5773],{"class":138},[128,24313,24314],{"class":130,"line":335},[128,24315,24316],{"class":3814},"    \u002F\u002F深拷贝解决上述问题\n",[128,24318,24319],{"class":130,"line":340},[128,24320,24321],{"class":3814},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[128,24323,24324,24326,24328,24330,24332,24334,24336],{"class":130,"line":351},[128,24325,22006],{"class":199},[128,24327,253],{"class":138},[128,24329,10349],{"class":134},[128,24331,19090],{"class":199},[128,24333,14111],{"class":134},[128,24335,19],{"class":266},[128,24337,180],{"class":138},[128,24339,24340],{"class":130,"line":384},[128,24341,5617],{"class":138},[128,24343,24344,24346,24348,24351,24353],{"class":130,"line":414},[128,24345,7019],{"class":138},[128,24347,4789],{"class":134},[128,24349,24350],{"class":176},"\"拷贝构造函数\"",[128,24352,4789],{"class":134},[128,24354,4811],{"class":138},[128,24356,24357],{"class":130,"line":419},[128,24358,24359],{"class":3814},"        \u002F\u002F编译器默认的写如下注释部分\n",[128,24361,24362],{"class":130,"line":424},[128,24363,24364],{"class":3814},"        \u002F\u002Fm_Age=p.m_Age;\n",[128,24366,24367],{"class":130,"line":434},[128,24368,24369],{"class":3814},"        \u002F\u002Fm_Height=p.m_Height;\n",[128,24371,24372,24374,24376],{"class":130,"line":447},[128,24373,24274],{"class":138},[128,24375,270],{"class":134},[128,24377,24378],{"class":138},"p.m_Age;\n",[128,24380,24381],{"class":130,"line":459},[128,24382,24383],{"class":3814},"        \u002F\u002F深拷贝操作\n",[128,24385,24386,24388,24390,24392,24394,24396],{"class":130,"line":471},[128,24387,24284],{"class":138},[128,24389,15244],{"class":134},[128,24391,638],{"class":134},[128,24393,253],{"class":138},[128,24395,4205],{"class":134},[128,24397,24398],{"class":138},"p.m_Height);\n",[128,24400,24401],{"class":130,"line":483},[128,24402,5773],{"class":138},[128,24404,24405],{"class":130,"line":495},[128,24406,160],{"emptyLinePlaceholder":159},[128,24408,24409],{"class":130,"line":507},[128,24410,22034],{"class":3814},[128,24412,24413,24415],{"class":130,"line":519},[128,24414,22039],{"class":199},[128,24416,5563],{"class":138},[128,24418,24419],{"class":130,"line":524},[128,24420,5617],{"class":138},[128,24422,24423],{"class":130,"line":529},[128,24424,24425],{"class":3814},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[128,24427,24428,24430,24433,24436,24439],{"class":130,"line":540},[128,24429,558],{"class":134},[128,24431,24432],{"class":138},"(m_Height ",[128,24434,24435],{"class":134},"!=",[128,24437,24438],{"class":166}," NULL",[128,24440,180],{"class":138},[128,24442,24443],{"class":130,"line":555},[128,24444,6092],{"class":138},[128,24446,24447,24450,24453],{"class":130,"line":576},[128,24448,24449],{"class":134},"            delete",[128,24451,24452],{"class":138}," m_Height;",[128,24454,24455],{"class":3814}," \u002F\u002F释放堆区内存\n",[128,24457,24458,24461,24463,24465,24467],{"class":130,"line":584},[128,24459,24460],{"class":138},"            m_Height",[128,24462,270],{"class":134},[128,24464,5976],{"class":166},[128,24466,3811],{"class":138},[128,24468,24469],{"class":3814}," \u002F\u002F防止野指针\n",[128,24471,24472],{"class":130,"line":593},[128,24473,2014],{"class":138},[128,24475,24476,24478,24480],{"class":130,"line":598},[128,24477,7019],{"class":138},[128,24479,4789],{"class":134},[128,24481,24482],{"class":176},"\"Person的析构函数调用\"\n",[128,24484,24485],{"class":130,"line":603},[128,24486,5773],{"class":138},[128,24488,24489,24491],{"class":130,"line":614},[128,24490,5572],{"class":134},[128,24492,19186],{"class":138},[128,24494,24495,24497,24499,24502],{"class":130,"line":625},[128,24496,5572],{"class":134},[128,24498,10075],{"class":134},[128,24500,24501],{"class":138},"m_Height;",[128,24503,24504],{"class":3814}," \u002F\u002F定义一个指针，指向身高\n",[128,24506,24507],{"class":130,"line":633},[128,24508,7562],{"class":138},[128,24510,24511,24513,24515],{"class":130,"line":649},[128,24512,8922],{"class":134},[128,24514,9146],{"class":199},[128,24516,5563],{"class":138},[128,24518,24519],{"class":130,"line":660},[128,24520,5157],{"class":138},[128,24522,24523,24525,24527,24529,24531,24533,24536],{"class":130,"line":673},[128,24524,22918],{"class":138},[128,24526,10687],{"class":199},[128,24528,253],{"class":138},[128,24530,4399],{"class":166},[128,24532,4128],{"class":138},[128,24534,24535],{"class":166},"160",[128,24537,6292],{"class":138},[128,24539,24540,24542,24544,24547,24549,24552,24554,24557,24559,24562,24564,24566],{"class":130,"line":678},[128,24541,5162],{"class":138},[128,24543,4789],{"class":134},[128,24545,24546],{"class":176},"\"p1的年龄为:\"",[128,24548,4789],{"class":134},[128,24550,24551],{"class":138},"p1.m_Age",[128,24553,4789],{"class":134},[128,24555,24556],{"class":176},"\"身高为：\"",[128,24558,9976],{"class":134},[128,24560,24561],{"class":138},"p1.m_Height",[128,24563,4789],{"class":134},[128,24565,4853],{"class":138},[128,24567,24568],{"class":3814},"  \u002F\u002F18\n",[128,24570,24571,24573,24575],{"class":130,"line":683},[128,24572,22918],{"class":138},[128,24574,10590],{"class":199},[128,24576,21002],{"class":138},[128,24578,24579,24581,24583,24586,24588,24590,24592,24594,24596,24599,24601,24603],{"class":130,"line":693},[128,24580,5162],{"class":138},[128,24582,4789],{"class":134},[128,24584,24585],{"class":176},"\"p2的年龄为：\"",[128,24587,4789],{"class":134},[128,24589,22948],{"class":138},[128,24591,4789],{"class":134},[128,24593,24556],{"class":176},[128,24595,9976],{"class":134},[128,24597,24598],{"class":138},"p2.m_Height",[128,24600,4789],{"class":134},[128,24602,4853],{"class":138},[128,24604,24568],{"class":3814},[128,24606,24607],{"class":130,"line":702},[128,24608,16736],{"class":138},[128,24610,24611],{"class":130,"line":709},[128,24612,2694],{"class":138},[128,24614,24615,24617,24619],{"class":130,"line":723},[128,24616,3763],{"class":134},[128,24618,1575],{"class":199},[128,24620,5563],{"class":138},[128,24622,24623],{"class":130,"line":732},[128,24624,5157],{"class":138},[128,24626,24627,24629],{"class":130,"line":744},[128,24628,9191],{"class":199},[128,24630,9194],{"class":138},[128,24632,24633],{"class":130,"line":749},[128,24634,2694],{"class":138},[19,24636,24637],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,24639,24640],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,24642,24643],{},[5074,24644],{"alt":112,"src":24645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,24647,24648],{},"浅拷贝问题要使用深拷贝来解决",[19,24650,24651],{},[5074,24652],{"alt":112,"src":24653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,24655,24656],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[72,24658,24660],{"id":24659},"_826初始化列表","8.2.6初始化列表",[19,24662,24663],{},"作用：初始化属性",[19,24665,8743],{},[106,24667,24670],{"className":24668,"code":24669,"language":111},[109],"构造函数():属性1(值1),属性2(值2).....{}\n",[114,24671,24669],{"__ignoreMap":112},[19,24673,24674],{},"例子",[106,24676,24678],{"className":3749,"code":24677,"language":3751,"meta":112,"style":112},"#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",[114,24679,24680,24686,24696,24702,24706,24711,24715,24720,24725,24730,24735,24740,24745,24749,24754,24759,24802,24811,24829,24847,24865,24869,24873,24880,24887,24894,24898,24902,24910,24914,24918,24938,24947,24951,24955,24965,24969,24977],{"__ignoreMap":112},[128,24681,24682,24684],{"class":130,"line":131},[128,24683,5538],{"class":134},[128,24685,5541],{"class":176},[128,24687,24688,24690,24692,24694],{"class":130,"line":142},[128,24689,5546],{"class":134},[128,24691,5549],{"class":134},[128,24693,5552],{"class":199},[128,24695,4905],{"class":138},[128,24697,24698,24700],{"class":130,"line":156},[128,24699,1901],{"class":134},[128,24701,18692],{"class":199},[128,24703,24704],{"class":130,"line":163},[128,24705,5157],{"class":138},[128,24707,24708],{"class":130,"line":183},[128,24709,24710],{"class":134},"    public:\n",[128,24712,24713],{"class":130,"line":188},[128,24714,160],{"emptyLinePlaceholder":159},[128,24716,24717],{"class":130,"line":193},[128,24718,24719],{"class":3814},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[128,24721,24722],{"class":130,"line":206},[128,24723,24724],{"class":3814},"    \u002F\u002FPerson(int a, int b, int c) {\n",[128,24726,24727],{"class":130,"line":221},[128,24728,24729],{"class":3814},"    \u002F\u002F  m_A = a;\n",[128,24731,24732],{"class":130,"line":230},[128,24733,24734],{"class":3814},"    \u002F\u002F  m_B = b;\n",[128,24736,24737],{"class":130,"line":235},[128,24738,24739],{"class":3814},"    \u002F\u002F  m_C = c;\n",[128,24741,24742],{"class":130,"line":244},[128,24743,24744],{"class":3814},"    \u002F\u002F}\n",[128,24746,24747],{"class":130,"line":287},[128,24748,160],{"emptyLinePlaceholder":159},[128,24750,24751],{"class":130,"line":301},[128,24752,24753],{"class":3814},"    \u002F\u002F初始化列表方式初始化\n",[128,24755,24756],{"class":130,"line":310},[128,24757,24758],{"class":3814},"    \u002F\u002F使用有参构造函数\n",[128,24760,24761,24763,24765,24767,24769,24771,24773,24775,24777,24779,24781,24784,24787,24790,24793,24796,24799],{"class":130,"line":323},[128,24762,22006],{"class":199},[128,24764,253],{"class":138},[128,24766,3763],{"class":134},[128,24768,5010],{"class":266},[128,24770,258],{"class":138},[128,24772,3763],{"class":134},[128,24774,6406],{"class":266},[128,24776,258],{"class":138},[128,24778,3763],{"class":134},[128,24780,6422],{"class":266},[128,24782,24783],{"class":138},") :",[128,24785,24786],{"class":199},"m_A",[128,24788,24789],{"class":138},"(a), ",[128,24791,24792],{"class":199},"m_B",[128,24794,24795],{"class":138},"(b), ",[128,24797,24798],{"class":199},"m_C",[128,24800,24801],{"class":138},"(c) {}\n",[128,24803,24804,24806,24809],{"class":130,"line":330},[128,24805,18431],{"class":134},[128,24807,24808],{"class":199}," PrintPerson",[128,24810,14380],{"class":138},[128,24812,24813,24815,24817,24820,24822,24825,24827],{"class":130,"line":335},[128,24814,13215],{"class":138},[128,24816,4789],{"class":134},[128,24818,24819],{"class":176}," \"mA:\"",[128,24821,5056],{"class":134},[128,24823,24824],{"class":138}," m_A ",[128,24826,4789],{"class":134},[128,24828,12386],{"class":138},[128,24830,24831,24833,24835,24838,24840,24843,24845],{"class":130,"line":340},[128,24832,13215],{"class":138},[128,24834,4789],{"class":134},[128,24836,24837],{"class":176}," \"mB:\"",[128,24839,5056],{"class":134},[128,24841,24842],{"class":138}," m_B ",[128,24844,4789],{"class":134},[128,24846,12386],{"class":138},[128,24848,24849,24851,24853,24856,24858,24861,24863],{"class":130,"line":351},[128,24850,13215],{"class":138},[128,24852,4789],{"class":134},[128,24854,24855],{"class":176}," \"mC:\"",[128,24857,5056],{"class":134},[128,24859,24860],{"class":138}," m_C ",[128,24862,4789],{"class":134},[128,24864,12386],{"class":138},[128,24866,24867],{"class":130,"line":384},[128,24868,5773],{"class":138},[128,24870,24871],{"class":130,"line":414},[128,24872,18743],{"class":134},[128,24874,24875,24877],{"class":130,"line":419},[128,24876,5572],{"class":134},[128,24878,24879],{"class":138}," m_A;\n",[128,24881,24882,24884],{"class":130,"line":424},[128,24883,5572],{"class":134},[128,24885,24886],{"class":138}," m_B;\n",[128,24888,24889,24891],{"class":130,"line":434},[128,24890,5572],{"class":134},[128,24892,24893],{"class":138}," m_C;\n",[128,24895,24896],{"class":130,"line":447},[128,24897,7562],{"class":138},[128,24899,24900],{"class":130,"line":459},[128,24901,160],{"emptyLinePlaceholder":159},[128,24903,24904,24906,24908],{"class":130,"line":471},[128,24905,3763],{"class":134},[128,24907,1575],{"class":199},[128,24909,9535],{"class":138},[128,24911,24912],{"class":130,"line":483},[128,24913,5157],{"class":138},[128,24915,24916],{"class":130,"line":495},[128,24917,160],{"emptyLinePlaceholder":159},[128,24919,24920,24922,24924,24926,24928,24930,24932,24934,24936],{"class":130,"line":507},[128,24921,22918],{"class":138},[128,24923,19],{"class":199},[128,24925,253],{"class":138},[128,24927,2592],{"class":166},[128,24929,258],{"class":138},[128,24931,409],{"class":166},[128,24933,258],{"class":138},[128,24935,3827],{"class":166},[128,24937,6292],{"class":138},[128,24939,24940,24942,24945],{"class":130,"line":519},[128,24941,19385],{"class":138},[128,24943,24944],{"class":199},"PrintPerson",[128,24946,9194],{"class":138},[128,24948,24949],{"class":130,"line":524},[128,24950,160],{"emptyLinePlaceholder":159},[128,24952,24953],{"class":130,"line":529},[128,24954,160],{"emptyLinePlaceholder":159},[128,24956,24957,24959,24961,24963],{"class":130,"line":540},[128,24958,5888],{"class":199},[128,24960,253],{"class":138},[128,24962,5893],{"class":176},[128,24964,6292],{"class":138},[128,24966,24967],{"class":130,"line":555},[128,24968,160],{"emptyLinePlaceholder":159},[128,24970,24971,24973,24975],{"class":130,"line":576},[128,24972,587],{"class":134},[128,24974,7659],{"class":166},[128,24976,4905],{"class":138},[128,24978,24979],{"class":130,"line":584},[128,24980,2694],{"class":138},[19,24982,24983,24984,24987,24988],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[3903,24985,24986],{},"参数名就是定义的对象属性","，",[3903,24989,24990],{},"属性后面的值为有参构造函数的形参",[106,24992,24994],{"className":3749,"code":24993,"language":3751,"meta":112,"style":112},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[114,24995,24996],{"__ignoreMap":112},[128,24997,24998,25000,25002,25004,25007,25009,25012,25014,25017,25019,25022,25024,25027,25029],{"class":130,"line":131},[128,24999,22533],{"class":199},[128,25001,253],{"class":138},[128,25003,3763],{"class":134},[128,25005,25006],{"class":138}," a.",[128,25008,3763],{"class":134},[128,25010,25011],{"class":138}," b,",[128,25013,3763],{"class":134},[128,25015,25016],{"class":138}," b):",[128,25018,24786],{"class":199},[128,25020,25021],{"class":138},"(a),",[128,25023,24792],{"class":199},[128,25025,25026],{"class":138},"(c),",[128,25028,24798],{"class":199},[128,25030,25031],{"class":138},"(b) {}\n",[72,25033,25035],{"id":25034},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,25037,25038],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,25040,18157],{},[106,25042,25044],{"className":3749,"code":25043,"language":3751,"meta":112,"style":112},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[114,25045,25046,25051,25056,25060,25065,25069],{"__ignoreMap":112},[128,25047,25048],{"class":130,"line":131},[128,25049,25050],{"class":138},"A{};\n",[128,25052,25053],{"class":130,"line":142},[128,25054,25055],{"class":138},"B\n",[128,25057,25058],{"class":130,"line":156},[128,25059,5157],{"class":138},[128,25061,25062],{"class":130,"line":163},[128,25063,25064],{"class":138},"    A a;\n",[128,25066,25067],{"class":130,"line":183},[128,25068,2694],{"class":138},[128,25070,25071],{"class":130,"line":188},[128,25072,25073],{"class":3814},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,25075,25076],{},"案例",[106,25078,25080],{"className":3749,"code":25079,"language":3751,"meta":112,"style":112},"\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",[114,25081,25082,25087,25094,25098,25103,25108,25122,25126,25136,25147,25151,25158,25162,25175,25179,25184,25189,25193,25199,25203,25207,25211,25242,25246,25257,25261,25267,25271,25284,25288,25292,25296,25301,25306,25310,25318,25322,25339,25358,25362,25370,25374,25380],{"__ignoreMap":112},[128,25083,25084],{"class":130,"line":131},[128,25085,25086],{"class":3814},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[128,25088,25089,25091],{"class":130,"line":142},[128,25090,1901],{"class":134},[128,25092,25093],{"class":199}," Phone\n",[128,25095,25096],{"class":130,"line":156},[128,25097,5157],{"class":138},[128,25099,25100],{"class":130,"line":163},[128,25101,25102],{"class":138},"public：\n",[128,25104,25105],{"class":130,"line":183},[128,25106,25107],{"class":3814},"    \u002F\u002F 赋值(构造函数)\n",[128,25109,25110,25113,25115,25117,25120],{"class":130,"line":188},[128,25111,25112],{"class":199},"    Phone",[128,25114,253],{"class":138},[128,25116,18439],{"class":199},[128,25118,25119],{"class":266}," pName",[128,25121,180],{"class":138},[128,25123,25124],{"class":130,"line":193},[128,25125,5617],{"class":138},[128,25127,25128,25131,25133],{"class":130,"line":206},[128,25129,25130],{"class":138},"        m_pName",[128,25132,270],{"class":134},[128,25134,25135],{"class":138},"pName;\n",[128,25137,25138,25140,25142,25145],{"class":130,"line":221},[128,25139,7019],{"class":138},[128,25141,4789],{"class":134},[128,25143,25144],{"class":176},"\"Phone的构造函数调用\"",[128,25146,4905],{"class":138},[128,25148,25149],{"class":130,"line":230},[128,25150,5773],{"class":138},[128,25152,25153,25156],{"class":130,"line":235},[128,25154,25155],{"class":199},"    ~Phone",[128,25157,5563],{"class":138},[128,25159,25160],{"class":130,"line":244},[128,25161,5617],{"class":138},[128,25163,25164,25166,25168,25171,25173],{"class":130,"line":287},[128,25165,7019],{"class":138},[128,25167,4789],{"class":134},[128,25169,25170],{"class":176},"\"Phone析构函数调用\"",[128,25172,4789],{"class":134},[128,25174,4811],{"class":138},[128,25176,25177],{"class":130,"line":301},[128,25178,5773],{"class":138},[128,25180,25181],{"class":130,"line":310},[128,25182,25183],{"class":3814},"    \u002F\u002F\n",[128,25185,25186],{"class":130,"line":323},[128,25187,25188],{"class":138},"    string m_PName;\n",[128,25190,25191],{"class":130,"line":330},[128,25192,7562],{"class":138},[128,25194,25195,25197],{"class":130,"line":335},[128,25196,1901],{"class":134},[128,25198,18692],{"class":199},[128,25200,25201],{"class":130,"line":340},[128,25202,5157],{"class":138},[128,25204,25205],{"class":130,"line":351},[128,25206,18239],{"class":134},[128,25208,25209],{"class":130,"line":384},[128,25210,20481],{"class":3814},[128,25212,25213,25215,25217,25219,25221,25223,25225,25228,25231,25233,25236,25239],{"class":130,"line":414},[128,25214,22006],{"class":199},[128,25216,253],{"class":138},[128,25218,18439],{"class":199},[128,25220,18442],{"class":266},[128,25222,4128],{"class":138},[128,25224,18439],{"class":199},[128,25226,25227],{"class":266}," pname",[128,25229,25230],{"class":138},"):",[128,25232,18532],{"class":199},[128,25234,25235],{"class":138},"(name),m_phone.",[128,25237,25238],{"class":199},"m_PName",[128,25240,25241],{"class":138},"(pname) \n",[128,25243,25244],{"class":130,"line":419},[128,25245,5617],{"class":138},[128,25247,25248,25250,25252,25255],{"class":130,"line":424},[128,25249,7019],{"class":138},[128,25251,4789],{"class":134},[128,25253,25254],{"class":176},"\"Person的构造函数调用\"",[128,25256,4905],{"class":138},[128,25258,25259],{"class":130,"line":434},[128,25260,5773],{"class":138},[128,25262,25263,25265],{"class":130,"line":447},[128,25264,22039],{"class":199},[128,25266,5563],{"class":138},[128,25268,25269],{"class":130,"line":459},[128,25270,5617],{"class":138},[128,25272,25273,25275,25277,25280,25282],{"class":130,"line":471},[128,25274,7019],{"class":138},[128,25276,4789],{"class":134},[128,25278,25279],{"class":176},"\"Person析构函数调用\"",[128,25281,4789],{"class":134},[128,25283,4811],{"class":138},[128,25285,25286],{"class":130,"line":483},[128,25287,5773],{"class":138},[128,25289,25290],{"class":130,"line":495},[128,25291,11337],{"class":3814},[128,25293,25294],{"class":130,"line":507},[128,25295,18414],{"class":138},[128,25297,25298],{"class":130,"line":519},[128,25299,25300],{"class":3814},"    \u002F\u002F手机\n",[128,25302,25303],{"class":130,"line":524},[128,25304,25305],{"class":138},"    Phone m_Phone;\n",[128,25307,25308],{"class":130,"line":529},[128,25309,7562],{"class":138},[128,25311,25312,25314,25316],{"class":130,"line":540},[128,25313,8922],{"class":134},[128,25315,9146],{"class":199},[128,25317,5563],{"class":138},[128,25319,25320],{"class":130,"line":555},[128,25321,5157],{"class":138},[128,25323,25324,25326,25328,25330,25332,25334,25337],{"class":130,"line":576},[128,25325,22918],{"class":138},[128,25327,19],{"class":199},[128,25329,253],{"class":138},[128,25331,11472],{"class":176},[128,25333,4128],{"class":138},[128,25335,25336],{"class":176},"\"安卓\"",[128,25338,6292],{"class":138},[128,25340,25341,25343,25345,25348,25350,25353,25355],{"class":130,"line":584},[128,25342,5162],{"class":138},[128,25344,4789],{"class":134},[128,25346,25347],{"class":138},"p.Name",[128,25349,4789],{"class":134},[128,25351,25352],{"class":176},"\"拿着：\"",[128,25354,4789],{"class":134},[128,25356,25357],{"class":138},"p.m_phone.m_PName;\n",[128,25359,25360],{"class":130,"line":593},[128,25361,2694],{"class":138},[128,25363,25364,25366,25368],{"class":130,"line":598},[128,25365,3763],{"class":134},[128,25367,1575],{"class":199},[128,25369,5563],{"class":138},[128,25371,25372],{"class":130,"line":603},[128,25373,5157],{"class":138},[128,25375,25376,25378],{"class":130,"line":614},[128,25377,9191],{"class":199},[128,25379,9194],{"class":138},[128,25381,25382],{"class":130,"line":625},[128,25383,2694],{"class":138},[19,25385,12571],{},[106,25387,25389],{"className":3749,"code":25388,"language":3751,"meta":112,"style":112},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[114,25390,25391,25396],{"__ignoreMap":112},[128,25392,25393],{"class":130,"line":131},[128,25394,25395],{"class":3814},"    \u002F\u002F不需要写这个：\n",[128,25397,25398],{"class":130,"line":142},[128,25399,25400],{"class":3814},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,25402,25403],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[106,25405,25407],{"className":3749,"code":25406,"language":3751,"meta":112,"style":112},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[114,25408,25409],{"__ignoreMap":112},[128,25410,25411,25413,25416,25418,25421,25424],{"class":130,"line":131},[128,25412,22533],{"class":199},[128,25414,25415],{"class":138},"(string name.string pname):",[128,25417,18532],{"class":199},[128,25419,25420],{"class":138},"(name),",[128,25422,25423],{"class":199},"m_phone",[128,25425,25426],{"class":138},"(pname) {}\n",[19,25428,25429,25430,270,25433],{},"采用的是隐式转换法，实际为如下：\n",[114,25431,25432],{},"m_phone(pname)",[114,25434,25435],{},"Phone m_phone=pname",[19,25437,25438,25441],{},[3903,25439,25440],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,25443,25444],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[72,25446,25448],{"id":25447},"_828静态对象","8.2.8静态对象",[19,25450,25451],{},"静态对象在成员对象前static，称为静态对象",[19,25453,25454],{},"静态对象分为两类：",[26,25456,25457],{},[29,25458,25459],{},"静态成员变量",[4752,25461,25462,25465,25468],{},[29,25463,25464],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[29,25466,25467],{},"②在编译阶段分配内存",[29,25469,25470],{},"③类内声明，类外初始化",[26,25472,25473],{"start":142},[29,25474,25475],{},"静态成员函数",[4752,25477,25478,25481],{},[29,25479,25480],{},"①所有对象共享同一个函数",[29,25482,25483],{},"②静态成员函数只能访问静态成员变量",[25485,25486,25488],"h4",{"id":25487},"_8281静态成员变量","8.2.8.1静态成员变量",[106,25490,25492],{"className":3749,"code":25491,"language":3751,"meta":112,"style":112},"#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",[114,25493,25494,25500,25510,25516,25520,25524,25529,25534,25539,25547,25551,25555,25559,25567,25571,25575,25580,25593,25597,25605,25609,25615],{"__ignoreMap":112},[128,25495,25496,25498],{"class":130,"line":131},[128,25497,5538],{"class":134},[128,25499,5541],{"class":176},[128,25501,25502,25504,25506,25508],{"class":130,"line":142},[128,25503,5546],{"class":134},[128,25505,5549],{"class":134},[128,25507,5552],{"class":199},[128,25509,4905],{"class":138},[128,25511,25512,25514],{"class":130,"line":156},[128,25513,1901],{"class":134},[128,25515,18692],{"class":199},[128,25517,25518],{"class":130,"line":163},[128,25519,5157],{"class":138},[128,25521,25522],{"class":130,"line":183},[128,25523,18239],{"class":134},[128,25525,25526],{"class":130,"line":188},[128,25527,25528],{"class":3814},"    \u002F\u002F非静态成员变量\n",[128,25530,25531],{"class":130,"line":193},[128,25532,25533],{"class":3814},"    \u002F\u002F int m_A;\n",[128,25535,25536],{"class":130,"line":206},[128,25537,25538],{"class":3814},"    \u002F\u002F定义静态成员变量\n",[128,25540,25541,25543,25545],{"class":130,"line":221},[128,25542,14547],{"class":134},[128,25544,638],{"class":134},[128,25546,24879],{"class":138},[128,25548,25549],{"class":130,"line":230},[128,25550,160],{"emptyLinePlaceholder":159},[128,25552,25553],{"class":130,"line":235},[128,25554,160],{"emptyLinePlaceholder":159},[128,25556,25557],{"class":130,"line":244},[128,25558,7562],{"class":138},[128,25560,25561,25563,25565],{"class":130,"line":287},[128,25562,8922],{"class":134},[128,25564,9146],{"class":199},[128,25566,5563],{"class":138},[128,25568,25569],{"class":130,"line":301},[128,25570,5157],{"class":138},[128,25572,25573],{"class":130,"line":310},[128,25574,18834],{"class":138},[128,25576,25577],{"class":130,"line":323},[128,25578,25579],{"class":3814},"    \u002F\u002F输出类成员变量这块内存\n",[128,25581,25582,25584,25586,25589,25591],{"class":130,"line":330},[128,25583,5162],{"class":138},[128,25585,4789],{"class":134},[128,25587,25588],{"class":138},"p.m_A",[128,25590,4789],{"class":134},[128,25592,4811],{"class":138},[128,25594,25595],{"class":130,"line":335},[128,25596,2694],{"class":138},[128,25598,25599,25601,25603],{"class":130,"line":340},[128,25600,3763],{"class":134},[128,25602,1575],{"class":199},[128,25604,5563],{"class":138},[128,25606,25607],{"class":130,"line":351},[128,25608,5157],{"class":138},[128,25610,25611,25613],{"class":130,"line":384},[128,25612,9191],{"class":199},[128,25614,5563],{"class":138},[128,25616,25617],{"class":130,"line":414},[128,25618,2694],{"class":138},[19,25620,25621],{},"此时输出是报错的：无法解析外部命令",[19,25623,25624],{},"解决这一问题：必须用到类内声明，类外初始化操作",[106,25626,25628],{"className":3749,"code":25627,"language":3751,"meta":112,"style":112},"#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",[114,25629,25630,25636,25646,25652,25656,25660,25665,25673,25677,25682,25697,25705,25709,25713,25718,25723,25735,25740,25751,25756,25761,25774,25778,25786,25790,25796],{"__ignoreMap":112},[128,25631,25632,25634],{"class":130,"line":131},[128,25633,5538],{"class":134},[128,25635,5541],{"class":176},[128,25637,25638,25640,25642,25644],{"class":130,"line":142},[128,25639,5546],{"class":134},[128,25641,5549],{"class":134},[128,25643,5552],{"class":199},[128,25645,4905],{"class":138},[128,25647,25648,25650],{"class":130,"line":156},[128,25649,1901],{"class":134},[128,25651,18692],{"class":199},[128,25653,25654],{"class":130,"line":163},[128,25655,5157],{"class":138},[128,25657,25658],{"class":130,"line":183},[128,25659,18239],{"class":134},[128,25661,25662],{"class":130,"line":188},[128,25663,25664],{"class":3814},"    \u002F\u002F类内声明\n",[128,25666,25667,25669,25671],{"class":130,"line":193},[128,25668,14547],{"class":134},[128,25670,638],{"class":134},[128,25672,24879],{"class":138},[128,25674,25675],{"class":130,"line":206},[128,25676,7562],{"class":138},[128,25678,25679],{"class":130,"line":221},[128,25680,25681],{"class":3814},"\u002F\u002F类外初始化\n",[128,25683,25684,25686,25688,25691,25693,25695],{"class":130,"line":230},[128,25685,3763],{"class":134},[128,25687,19090],{"class":199},[128,25689,25690],{"class":138},"::m_A",[128,25692,270],{"class":134},[128,25694,4196],{"class":166},[128,25696,4905],{"class":138},[128,25698,25699,25701,25703],{"class":130,"line":235},[128,25700,8922],{"class":134},[128,25702,9146],{"class":199},[128,25704,5563],{"class":138},[128,25706,25707],{"class":130,"line":244},[128,25708,5157],{"class":138},[128,25710,25711],{"class":130,"line":287},[128,25712,18834],{"class":138},[128,25714,25715],{"class":130,"line":301},[128,25716,25717],{"class":3814},"    \u002F\u002F访问变量的原内存空间\n",[128,25719,25720],{"class":130,"line":310},[128,25721,25722],{"class":3814},"    \u002F\u002F100\n",[128,25724,25725,25727,25729,25731,25733],{"class":130,"line":323},[128,25726,5162],{"class":138},[128,25728,4789],{"class":134},[128,25730,25588],{"class":138},[128,25732,4789],{"class":134},[128,25734,4811],{"class":138},[128,25736,25737],{"class":130,"line":330},[128,25738,25739],{"class":138},"    Person p2;\n",[128,25741,25742,25745,25747,25749],{"class":130,"line":335},[128,25743,25744],{"class":138},"    p2.m_A",[128,25746,270],{"class":134},[128,25748,3143],{"class":166},[128,25750,4905],{"class":138},[128,25752,25753],{"class":130,"line":340},[128,25754,25755],{"class":3814},"    \u002F\u002F继续访问这片空间\n",[128,25757,25758],{"class":130,"line":351},[128,25759,25760],{"class":3814},"    \u002F\u002F200\n",[128,25762,25763,25765,25767,25770,25772],{"class":130,"line":384},[128,25764,5162],{"class":138},[128,25766,4789],{"class":134},[128,25768,25769],{"class":138},"p2.m_A",[128,25771,4789],{"class":134},[128,25773,4811],{"class":138},[128,25775,25776],{"class":130,"line":414},[128,25777,2694],{"class":138},[128,25779,25780,25782,25784],{"class":130,"line":419},[128,25781,3763],{"class":134},[128,25783,1575],{"class":199},[128,25785,5563],{"class":138},[128,25787,25788],{"class":130,"line":424},[128,25789,5157],{"class":138},[128,25791,25792,25794],{"class":130,"line":434},[128,25793,9191],{"class":199},[128,25795,9194],{"class":138},[128,25797,25798],{"class":130,"line":447},[128,25799,2694],{"class":138},[19,25801,25802],{},[3903,25803,25804],{},"静态变量的访问",[106,25806,25808],{"className":3749,"code":25807,"language":3751,"meta":112,"style":112},"#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",[114,25809,25810,25816,25826,25832,25836,25840,25844,25852,25856,25861,25869,25873,25877,25891,25906,25914,25918,25923,25928,25933,25938,25950,25955,25960,25974,25991,25995,26003,26007,26013],{"__ignoreMap":112},[128,25811,25812,25814],{"class":130,"line":131},[128,25813,5538],{"class":134},[128,25815,5541],{"class":176},[128,25817,25818,25820,25822,25824],{"class":130,"line":142},[128,25819,5546],{"class":134},[128,25821,5549],{"class":134},[128,25823,5552],{"class":199},[128,25825,4905],{"class":138},[128,25827,25828,25830],{"class":130,"line":156},[128,25829,1901],{"class":134},[128,25831,18692],{"class":199},[128,25833,25834],{"class":130,"line":163},[128,25835,5157],{"class":138},[128,25837,25838],{"class":130,"line":183},[128,25839,18239],{"class":134},[128,25841,25842],{"class":130,"line":188},[128,25843,25664],{"class":3814},[128,25845,25846,25848,25850],{"class":130,"line":193},[128,25847,14547],{"class":134},[128,25849,638],{"class":134},[128,25851,24879],{"class":138},[128,25853,25854],{"class":130,"line":206},[128,25855,18743],{"class":134},[128,25857,25858],{"class":130,"line":221},[128,25859,25860],{"class":3814},"    \u002F\u002F静态成员变量也是有访问权限的\n",[128,25862,25863,25865,25867],{"class":130,"line":230},[128,25864,14547],{"class":134},[128,25866,638],{"class":134},[128,25868,24886],{"class":138},[128,25870,25871],{"class":130,"line":235},[128,25872,7562],{"class":138},[128,25874,25875],{"class":130,"line":244},[128,25876,25681],{"class":3814},[128,25878,25879,25881,25883,25885,25887,25889],{"class":130,"line":287},[128,25880,3763],{"class":134},[128,25882,19090],{"class":199},[128,25884,25690],{"class":138},[128,25886,270],{"class":134},[128,25888,4196],{"class":166},[128,25890,4905],{"class":138},[128,25892,25893,25895,25897,25900,25902,25904],{"class":130,"line":301},[128,25894,3763],{"class":134},[128,25896,19090],{"class":199},[128,25898,25899],{"class":138},"::m_B",[128,25901,270],{"class":134},[128,25903,4449],{"class":166},[128,25905,4905],{"class":138},[128,25907,25908,25910,25912],{"class":130,"line":310},[128,25909,8922],{"class":134},[128,25911,9215],{"class":199},[128,25913,5563],{"class":138},[128,25915,25916],{"class":130,"line":323},[128,25917,5157],{"class":138},[128,25919,25920],{"class":130,"line":330},[128,25921,25922],{"class":3814},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[128,25924,25925],{"class":130,"line":335},[128,25926,25927],{"class":3814},"    \u002F\u002F静态成员变量有两种访问方式：\n",[128,25929,25930],{"class":130,"line":340},[128,25931,25932],{"class":3814},"    \u002F\u002F1.通过对象进行访问\n",[128,25934,25935],{"class":130,"line":351},[128,25936,25937],{"class":138},"    Person p;  \n",[128,25939,25940,25942,25944,25946,25948],{"class":130,"line":384},[128,25941,5162],{"class":138},[128,25943,4789],{"class":134},[128,25945,25588],{"class":138},[128,25947,4789],{"class":134},[128,25949,4811],{"class":138},[128,25951,25952],{"class":130,"line":414},[128,25953,25954],{"class":3814},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[128,25956,25957],{"class":130,"line":419},[128,25958,25959],{"class":3814},"    \u002F\u002F2.通过类名进行访问\n",[128,25961,25962,25964,25966,25968,25970,25972],{"class":130,"line":424},[128,25963,5162],{"class":138},[128,25965,4789],{"class":134},[128,25967,22533],{"class":199},[128,25969,25690],{"class":138},[128,25971,4789],{"class":134},[128,25973,4811],{"class":138},[128,25975,25976,25978,25980,25982,25984,25986,25988],{"class":130,"line":434},[128,25977,5162],{"class":138},[128,25979,4789],{"class":134},[128,25981,22533],{"class":199},[128,25983,25899],{"class":138},[128,25985,4789],{"class":134},[128,25987,4853],{"class":138},[128,25989,25990],{"class":3814}," \u002F\u002F没有访问权限，报错\n",[128,25992,25993],{"class":130,"line":447},[128,25994,2694],{"class":138},[128,25996,25997,25999,26001],{"class":130,"line":459},[128,25998,3763],{"class":134},[128,26000,1575],{"class":199},[128,26002,5563],{"class":138},[128,26004,26005],{"class":130,"line":471},[128,26006,5157],{"class":138},[128,26008,26009,26011],{"class":130,"line":483},[128,26010,9260],{"class":199},[128,26012,9194],{"class":138},[128,26014,26015],{"class":130,"line":495},[128,26016,2694],{"class":138},[25485,26018,26020],{"id":26019},"_8282静态成员函数","8.2.8.2静态成员函数",[19,26022,26023],{},"1.静态成员函数定义与访问",[106,26025,26027],{"className":3749,"code":26026,"language":3751,"meta":112,"style":112},"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",[114,26028,26029,26035,26039,26043,26048,26059,26063,26077,26081,26085,26093,26097,26102,26107,26111,26119,26124,26134],{"__ignoreMap":112},[128,26030,26031,26033],{"class":130,"line":131},[128,26032,1901],{"class":134},[128,26034,18692],{"class":199},[128,26036,26037],{"class":130,"line":142},[128,26038,5157],{"class":138},[128,26040,26041],{"class":130,"line":156},[128,26042,18239],{"class":134},[128,26044,26045],{"class":130,"line":163},[128,26046,26047],{"class":3814},"    \u002F\u002F在公共权限下定义静态成员函数\n",[128,26049,26050,26052,26055,26057],{"class":130,"line":183},[128,26051,14547],{"class":134},[128,26053,26054],{"class":134}," void",[128,26056,14912],{"class":199},[128,26058,5563],{"class":138},[128,26060,26061],{"class":130,"line":188},[128,26062,5617],{"class":138},[128,26064,26065,26068,26070,26073,26075],{"class":130,"line":193},[128,26066,26067],{"class":138},"        coout",[128,26069,4789],{"class":134},[128,26071,26072],{"class":176},"\"静态成员函数的调用\"",[128,26074,4789],{"class":134},[128,26076,4811],{"class":138},[128,26078,26079],{"class":130,"line":206},[128,26080,5773],{"class":138},[128,26082,26083],{"class":130,"line":221},[128,26084,7562],{"class":138},[128,26086,26087,26089,26091],{"class":130,"line":230},[128,26088,8922],{"class":134},[128,26090,9146],{"class":199},[128,26092,5563],{"class":138},[128,26094,26095],{"class":130,"line":235},[128,26096,5157],{"class":138},[128,26098,26099],{"class":130,"line":244},[128,26100,26101],{"class":3814},"    \u002F\u002F静态成员函数的调用方式:\n",[128,26103,26104],{"class":130,"line":287},[128,26105,26106],{"class":3814},"    \u002F\u002F1.通过对象访问\n",[128,26108,26109],{"class":130,"line":301},[128,26110,18834],{"class":138},[128,26112,26113,26115,26117],{"class":130,"line":310},[128,26114,19385],{"class":138},[128,26116,15078],{"class":199},[128,26118,9194],{"class":138},[128,26120,26121],{"class":130,"line":323},[128,26122,26123],{"class":3814},"    \u002F\u002F2.通过类名访问\n",[128,26125,26126,26128,26130,26132],{"class":130,"line":330},[128,26127,22006],{"class":199},[128,26129,21219],{"class":138},[128,26131,15078],{"class":199},[128,26133,9194],{"class":138},[128,26135,26136],{"class":130,"line":335},[128,26137,2694],{"class":138},[26,26139,26140],{"start":142},[29,26141,26142],{},"静态成员函数只能访问静态成员变量",[106,26144,26146],{"className":3749,"code":26145,"language":3751,"meta":112,"style":112},"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",[114,26147,26148,26154,26158,26162,26166,26176,26180,26194,26199,26211,26215,26226,26236,26240,26244,26248,26258,26262,26275,26279,26283,26287,26291,26305,26313,26317,26321,26325,26329,26337,26341,26351,26356,26360,26368,26372,26378],{"__ignoreMap":112},[128,26149,26150,26152],{"class":130,"line":131},[128,26151,1901],{"class":134},[128,26153,18692],{"class":199},[128,26155,26156],{"class":130,"line":142},[128,26157,5157],{"class":138},[128,26159,26160],{"class":130,"line":156},[128,26161,18239],{"class":134},[128,26163,26164],{"class":130,"line":163},[128,26165,26047],{"class":3814},[128,26167,26168,26170,26172,26174],{"class":130,"line":183},[128,26169,14547],{"class":134},[128,26171,26054],{"class":134},[128,26173,14912],{"class":199},[128,26175,5563],{"class":138},[128,26177,26178],{"class":130,"line":188},[128,26179,5617],{"class":138},[128,26181,26182,26185,26187,26189,26191],{"class":130,"line":193},[128,26183,26184],{"class":138},"        m_A",[128,26186,270],{"class":134},[128,26188,4061],{"class":166},[128,26190,3811],{"class":138},[128,26192,26193],{"class":3814}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[128,26195,26196],{"class":130,"line":206},[128,26197,26198],{"class":3814},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[128,26200,26201,26203,26205,26207,26209],{"class":130,"line":221},[128,26202,26067],{"class":138},[128,26204,4789],{"class":134},[128,26206,26072],{"class":176},[128,26208,4789],{"class":134},[128,26210,4811],{"class":138},[128,26212,26213],{"class":130,"line":230},[128,26214,5773],{"class":138},[128,26216,26217,26219,26221,26223],{"class":130,"line":235},[128,26218,14547],{"class":134},[128,26220,638],{"class":134},[128,26222,18969],{"class":138},[128,26224,26225],{"class":3814}," \u002F\u002F静态成员变量\n",[128,26227,26228,26230,26233],{"class":130,"line":244},[128,26229,5572],{"class":134},[128,26231,26232],{"class":138}," m_B;",[128,26234,26235],{"class":3814}," \u002F\u002F非静态成员变量\n",[128,26237,26238],{"class":130,"line":287},[128,26239,160],{"emptyLinePlaceholder":159},[128,26241,26242],{"class":130,"line":301},[128,26243,18743],{"class":134},[128,26245,26246],{"class":130,"line":310},[128,26247,25860],{"class":3814},[128,26249,26250,26252,26254,26256],{"class":130,"line":323},[128,26251,14547],{"class":134},[128,26253,26054],{"class":134},[128,26255,17143],{"class":199},[128,26257,5563],{"class":138},[128,26259,26260],{"class":130,"line":330},[128,26261,5617],{"class":138},[128,26263,26264,26266,26268,26271,26273],{"class":130,"line":335},[128,26265,7019],{"class":138},[128,26267,4789],{"class":134},[128,26269,26270],{"class":176},"\"这是私有权限下的静态函数调用\"",[128,26272,4789],{"class":134},[128,26274,4811],{"class":138},[128,26276,26277],{"class":130,"line":340},[128,26278,5773],{"class":138},[128,26280,26281],{"class":130,"line":351},[128,26282,160],{"emptyLinePlaceholder":159},[128,26284,26285],{"class":130,"line":384},[128,26286,160],{"emptyLinePlaceholder":159},[128,26288,26289],{"class":130,"line":414},[128,26290,7562],{"class":138},[128,26292,26293,26295,26297,26299,26301,26303],{"class":130,"line":419},[128,26294,3763],{"class":134},[128,26296,19090],{"class":199},[128,26298,25690],{"class":138},[128,26300,270],{"class":134},[128,26302,2452],{"class":166},[128,26304,4905],{"class":138},[128,26306,26307,26309,26311],{"class":130,"line":424},[128,26308,8922],{"class":134},[128,26310,9146],{"class":199},[128,26312,5563],{"class":138},[128,26314,26315],{"class":130,"line":434},[128,26316,5157],{"class":138},[128,26318,26319],{"class":130,"line":447},[128,26320,26101],{"class":3814},[128,26322,26323],{"class":130,"line":459},[128,26324,26106],{"class":3814},[128,26326,26327],{"class":130,"line":471},[128,26328,18834],{"class":138},[128,26330,26331,26333,26335],{"class":130,"line":483},[128,26332,19385],{"class":138},[128,26334,15078],{"class":199},[128,26336,9194],{"class":138},[128,26338,26339],{"class":130,"line":495},[128,26340,26123],{"class":3814},[128,26342,26343,26345,26347,26349],{"class":130,"line":507},[128,26344,22006],{"class":199},[128,26346,21219],{"class":138},[128,26348,15078],{"class":199},[128,26350,9194],{"class":138},[128,26352,26353],{"class":130,"line":519},[128,26354,26355],{"class":3814},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[128,26357,26358],{"class":130,"line":524},[128,26359,2694],{"class":138},[128,26361,26362,26364,26366],{"class":130,"line":529},[128,26363,3763],{"class":134},[128,26365,1575],{"class":199},[128,26367,5563],{"class":138},[128,26369,26370],{"class":130,"line":540},[128,26371,5157],{"class":138},[128,26373,26374,26376],{"class":130,"line":555},[128,26375,9191],{"class":199},[128,26377,9194],{"class":138},[128,26379,26380],{"class":130,"line":576},[128,26381,2694],{"class":138},[72,26383,26385],{"id":26384},"_83c对象模型和this指针","8.3C++对象模型和this指针",[25485,26387,26389],{"id":26388},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,26391,26392],{},"在c++中，类内的成员变量和成员函数分开存储",[19,26394,26395],{},"只有非静态成员变量才属于类的对象上",[26397,26398,26400],"h5",{"id":26399},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[106,26402,26404],{"className":3749,"code":26403,"language":3751,"meta":112,"style":112},"#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",[114,26405,26406,26413,26423,26429,26433,26437,26441,26449,26453,26457,26480,26484,26492,26496,26502],{"__ignoreMap":112},[128,26407,26408,26410],{"class":130,"line":131},[128,26409,5538],{"class":134},[128,26411,26412],{"class":176},"\u003Ciostraem>\n",[128,26414,26415,26417,26419,26421],{"class":130,"line":142},[128,26416,5546],{"class":134},[128,26418,5549],{"class":134},[128,26420,5552],{"class":199},[128,26422,4905],{"class":138},[128,26424,26425,26427],{"class":130,"line":156},[128,26426,1901],{"class":134},[128,26428,18692],{"class":199},[128,26430,26431],{"class":130,"line":163},[128,26432,5157],{"class":138},[128,26434,26435],{"class":130,"line":183},[128,26436,160],{"emptyLinePlaceholder":159},[128,26438,26439],{"class":130,"line":188},[128,26440,7562],{"class":138},[128,26442,26443,26445,26447],{"class":130,"line":193},[128,26444,8922],{"class":134},[128,26446,9146],{"class":199},[128,26448,5563],{"class":138},[128,26450,26451],{"class":130,"line":206},[128,26452,5157],{"class":138},[128,26454,26455],{"class":130,"line":221},[128,26456,18834],{"class":138},[128,26458,26459,26461,26463,26466,26468,26471,26473,26475,26477],{"class":130,"line":230},[128,26460,5162],{"class":138},[128,26462,4789],{"class":134},[128,26464,26465],{"class":176},"\"size of p=\"",[128,26467,4789],{"class":134},[128,26469,26470],{"class":199},"sizeoif",[128,26472,10096],{"class":138},[128,26474,4789],{"class":134},[128,26476,4853],{"class":138},[128,26478,26479],{"class":3814}," \u002F\u002F查看这个空类的占用的内存空间\n",[128,26481,26482],{"class":130,"line":235},[128,26483,2694],{"class":138},[128,26485,26486,26488,26490],{"class":130,"line":244},[128,26487,3763],{"class":134},[128,26489,1575],{"class":199},[128,26491,5563],{"class":138},[128,26493,26494],{"class":130,"line":287},[128,26495,5157],{"class":138},[128,26497,26498,26500],{"class":130,"line":301},[128,26499,9191],{"class":199},[128,26501,9194],{"class":138},[128,26503,26504],{"class":130,"line":310},[128,26505,2694],{"class":138},[19,26507,26508],{},"输出结果为：size of p=1",[19,26510,26511],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,26513,26514],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[26397,26516,26518],{"id":26517},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[106,26520,26522],{"className":3749,"code":26521,"language":3751,"meta":112,"style":112},"#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",[114,26523,26524,26530,26540,26548,26552,26561,26565,26573,26577,26581,26600,26604,26608,26616,26620,26626],{"__ignoreMap":112},[128,26525,26526,26528],{"class":130,"line":131},[128,26527,5538],{"class":134},[128,26529,5541],{"class":176},[128,26531,26532,26534,26536,26538],{"class":130,"line":142},[128,26533,5546],{"class":134},[128,26535,5549],{"class":134},[128,26537,5552],{"class":199},[128,26539,4905],{"class":138},[128,26541,26542,26544,26546],{"class":130,"line":156},[128,26543,1901],{"class":134},[128,26545,19090],{"class":199},[128,26547,6247],{"class":138},[128,26549,26550],{"class":130,"line":163},[128,26551,5157],{"class":138},[128,26553,26554,26556,26558],{"class":130,"line":183},[128,26555,5572],{"class":134},[128,26557,18969],{"class":138},[128,26559,26560],{"class":3814},"\u002F\u002F非静态成员变量\n",[128,26562,26563],{"class":130,"line":188},[128,26564,7562],{"class":138},[128,26566,26567,26569,26571],{"class":130,"line":193},[128,26568,8922],{"class":134},[128,26570,9146],{"class":199},[128,26572,5563],{"class":138},[128,26574,26575],{"class":130,"line":206},[128,26576,5157],{"class":138},[128,26578,26579],{"class":130,"line":221},[128,26580,18834],{"class":138},[128,26582,26583,26585,26587,26589,26591,26593,26595,26597],{"class":130,"line":230},[128,26584,5162],{"class":138},[128,26586,4789],{"class":134},[128,26588,26465],{"class":176},[128,26590,4984],{"class":134},[128,26592,10096],{"class":138},[128,26594,4789],{"class":134},[128,26596,4853],{"class":138},[128,26598,26599],{"class":3814}," \u002F\u002F查看不是空对象时占用多少内存\n",[128,26601,26602],{"class":130,"line":235},[128,26603,160],{"emptyLinePlaceholder":159},[128,26605,26606],{"class":130,"line":244},[128,26607,2694],{"class":138},[128,26609,26610,26612,26614],{"class":130,"line":287},[128,26611,3763],{"class":134},[128,26613,1575],{"class":199},[128,26615,5563],{"class":138},[128,26617,26618],{"class":130,"line":301},[128,26619,5157],{"class":138},[128,26621,26622,26624],{"class":130,"line":310},[128,26623,9191],{"class":199},[128,26625,9194],{"class":138},[128,26627,26628],{"class":130,"line":323},[128,26629,2694],{"class":138},[19,26631,26632],{},"输出结果：size of p=4",[19,26634,26635],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[26,26637,26638],{},[29,26639,26640],{},"如果加上非静态成员变量，Person类修改如下",[106,26642,26644],{"className":3749,"code":26643,"language":3751,"meta":112,"style":112},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[114,26645,26646,26652,26656,26662,26670,26674,26679],{"__ignoreMap":112},[128,26647,26648,26650],{"class":130,"line":131},[128,26649,1901],{"class":134},[128,26651,18692],{"class":199},[128,26653,26654],{"class":130,"line":142},[128,26655,5157],{"class":138},[128,26657,26658,26660],{"class":130,"line":156},[128,26659,5572],{"class":134},[128,26661,24879],{"class":138},[128,26663,26664,26666,26668],{"class":130,"line":163},[128,26665,14547],{"class":134},[128,26667,638],{"class":134},[128,26669,24886],{"class":138},[128,26671,26672],{"class":130,"line":183},[128,26673,7562],{"class":138},[128,26675,26676],{"class":130,"line":188},[128,26677,26678],{"class":3814},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[128,26680,26681,26683,26685,26687,26689,26691],{"class":130,"line":193},[128,26682,3763],{"class":134},[128,26684,19090],{"class":199},[128,26686,25899],{"class":138},[128,26688,270],{"class":134},[128,26690,2452],{"class":166},[128,26692,4905],{"class":138},[19,26694,26695],{},"输出结果：4",[19,26697,26698],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[26,26700,26701],{"start":142},[29,26702,26703],{},"加上非静态成员函数",[106,26705,26707],{"className":3749,"code":26706,"language":3751,"meta":112,"style":112},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[114,26708,26709,26716,26720,26726,26734,26738,26742,26746],{"__ignoreMap":112},[128,26710,26711,26713],{"class":130,"line":131},[128,26712,1901],{"class":134},[128,26714,26715],{"class":199},"  Person\n",[128,26717,26718],{"class":130,"line":142},[128,26719,5157],{"class":138},[128,26721,26722,26724],{"class":130,"line":156},[128,26723,5572],{"class":134},[128,26725,24879],{"class":138},[128,26727,26728,26730,26732],{"class":130,"line":163},[128,26729,18431],{"class":134},[128,26731,14912],{"class":199},[128,26733,5563],{"class":138},[128,26735,26736],{"class":130,"line":183},[128,26737,5617],{"class":138},[128,26739,26740],{"class":130,"line":188},[128,26741,160],{"emptyLinePlaceholder":159},[128,26743,26744],{"class":130,"line":193},[128,26745,5773],{"class":138},[128,26747,26748],{"class":130,"line":206},[128,26749,7562],{"class":138},[19,26751,26752],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[26,26754,26755],{"start":156},[29,26756,26757],{},"加上静态成员函数",[106,26759,26761],{"className":3749,"code":26760,"language":3751,"meta":112,"style":112},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[114,26762,26763,26769,26773,26779,26787,26791,26795,26799,26810,26814,26818,26822],{"__ignoreMap":112},[128,26764,26765,26767],{"class":130,"line":131},[128,26766,1901],{"class":134},[128,26768,26715],{"class":199},[128,26770,26771],{"class":130,"line":142},[128,26772,5157],{"class":138},[128,26774,26775,26777],{"class":130,"line":156},[128,26776,5572],{"class":134},[128,26778,24879],{"class":138},[128,26780,26781,26783,26785],{"class":130,"line":163},[128,26782,18431],{"class":134},[128,26784,14912],{"class":199},[128,26786,5563],{"class":138},[128,26788,26789],{"class":130,"line":183},[128,26790,5617],{"class":138},[128,26792,26793],{"class":130,"line":188},[128,26794,160],{"emptyLinePlaceholder":159},[128,26796,26797],{"class":130,"line":193},[128,26798,5773],{"class":138},[128,26800,26801,26803,26805,26808],{"class":130,"line":206},[128,26802,14547],{"class":134},[128,26804,26054],{"class":134},[128,26806,26807],{"class":199}," func1",[128,26809,5563],{"class":138},[128,26811,26812],{"class":130,"line":221},[128,26813,5617],{"class":138},[128,26815,26816],{"class":130,"line":230},[128,26817,160],{"emptyLinePlaceholder":159},[128,26819,26820],{"class":130,"line":235},[128,26821,5773],{"class":138},[128,26823,26824],{"class":130,"line":244},[128,26825,7562],{"class":138},[19,26827,26695],{},[19,26829,26830],{},"解释：静态成员函数也不属于类上",[3659,26832,11231],{},{"title":112,"searchDepth":142,"depth":142,"links":26834},[26835,26841],{"id":18169,"depth":142,"text":18170,"children":26836},[26837,26838,26839,26840],{"id":18173,"depth":156,"text":18174},{"id":18895,"depth":156,"text":18896},{"id":19067,"depth":156,"text":19068},{"id":19524,"depth":156,"text":19525},{"id":21864,"depth":142,"text":21865,"children":26842},[26843,26844,26845,26846,26847,26848,26849,26850,26851],{"id":21876,"depth":156,"text":21877},{"id":22169,"depth":156,"text":22170},{"id":22660,"depth":156,"text":22661},{"id":23757,"depth":156,"text":23758},{"id":24180,"depth":156,"text":24181},{"id":24659,"depth":156,"text":24660},{"id":25034,"depth":156,"text":25035},{"id":25447,"depth":156,"text":25448},{"id":26384,"depth":156,"text":26385},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":18134,"description":26852},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":26859,"title":3751,"body":26860,"description":3686,"extension":3687,"meta":26864,"navigation":159,"path":26866,"seo":26867,"stem":26868,"__hash__":26869},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":26861,"toc":26862},[],{"title":112,"searchDepth":142,"depth":142,"links":26863},[],{"category":26865},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":3751,"description":3686},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":26871,"title":26872,"body":26873,"description":112,"extension":3687,"meta":27464,"navigation":159,"path":27465,"seo":27466,"stem":27467,"__hash__":27468},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":26874,"toc":27446},[26875,26878,26882,26885,26888,26891,26909,26914,26917,26920,26923,26926,26931,26934,26939,26942,26945,26949,26952,26955,26961,26964,26982,26986,26990,26993,26998,27001,27005,27008,27021,27024,27028,27031,27034,27037,27062,27065,27074,27085,27100,27132,27136,27143,27151,27155,27158,27161,27166,27170,27173,27176,27181,27184,27188,27191,27194,27199,27202,27206,27211,27215,27282,27286,27289,27292,27295,27298,27301,27307,27328,27331,27345,27354,27358,27361,27364,27369,27372,27377,27382,27385,27388,27393,27398,27401,27406,27411,27414,27419,27424,27427,27430,27435,27438,27443],[10,26876,26872],{"id":26877},"_1强化学习基本认识",[14,26879,26881],{"id":26880},"_11什么是强化学习","1.1.什么是强化学习",[19,26883,26884],{},"强化学习有两部分组成：智能体和环境；",[19,26886,26887],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,26889,26890],{},"强化学习与监督学习的区别:",[26,26892,26893,26896,26899,26902],{},[29,26894,26895],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[29,26897,26898],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[29,26900,26901],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[29,26903,26904,26905,26908],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[3903,26906,26907],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,26910,26911],{},[5074,26912],{"alt":112,"src":26913},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,26915,26916],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,26918,26919],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,26921,26922],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,26924,26925],{},"获取奖励",[19,26927,26928],{},[5074,26929],{"alt":112,"src":26930},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,26932,26933],{},"强化学习可以分成标准强化学习和深度强化学习",[19,26935,26936],{},[5074,26937],{"alt":112,"src":26938},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,26940,26941],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,26943,26944],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,26946,26948],{"id":26947},"_12强化学习应用场景","1.2.强化学习应用场景",[19,26950,26951],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,26953,26954],{},"具身智能中的应用",[19,26956,26957,26960],{},[3903,26958,26959],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,26962,26963],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,26965,26966,26967,26970,26971,26974,26975,26978,26979],{},"机器人是",[3903,26968,26969],{},"躯体","，深度学习是",[3903,26972,26973],{},"神经元****网络","，VLA是",[3903,26976,26977],{},"通用的行为逻辑","，而强化学习是",[3903,26980,26981],{},"教练",[14,26983,26985],{"id":26984},"_13序列决策","1.3.序列决策",[72,26987,26989],{"id":26988},"_131智能体与环境","1.3.1.智能体与环境",[19,26991,26992],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,26994,26995],{},[5074,26996],{"alt":112,"src":26997},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,26999,27000],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[72,27002,27004],{"id":27003},"_132奖励","1.3.2.奖励",[19,27006,27007],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,27009,27010,27011,27020],{},"取某个策略的表现如何。强化学习的目的就是",[3903,27012,27013,27014,27019],{},"最大化",[3903,27015,27016],{},[3903,27017,27018],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,27022,27023],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[72,27025,27027],{"id":27026},"_133序列决策","1.3.3.序列决策",[19,27029,27030],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,27032,27033],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,27035,27036],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,27038,27039,27043,27044,27046,27047,27049,27050,27052,27053,17319,27056,17319,27059],{},[27040,27041,27042],"em",{},"Ht"," = ",[27040,27045,4345],{},"1*, a",[27040,27048,2592],{},", r",[27040,27051,2592],{},", . . . ,* ",[27040,27054,27055],{},"ot",[27040,27057,27058],{},", at ,",[27040,27060,27061],{},"rt",[19,27063,27064],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,27066,27067,27043,27070,5260,27072,4179],{},[27040,27068,27069],{},"st",[27040,27071,3019],{},[27040,27073,27042],{},[19,27075,27076,27077,27080,27081,27084],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[3903,27078,27079],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[3903,27082,27083],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,27086,27087,27088,27091,27092,27095,27096,27099],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[3903,27089,27090],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[3903,27093,27094],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[27040,27097,27098],{},"S, A, T, R, Ω, O, γ",")。",[19,27101,27102,27103,27105,27106,27108,27109,253,27111,27114,27115,27117,27118,253,27121,27124,27125,27127,27128,27131],{},"其中 ",[27040,27104,4438],{}," 表示状态空间，为隐变量，",[27040,27107,3983],{}," 为动作空间，",[27040,27110,4463],{},[27040,27112,27113],{},"s ′ |s, a",") 为状态转移概率，",[27040,27116,4413],{}," 为奖励函数，",[27040,27119,27120],{},"Ω",[27040,27122,27123],{},"o|s, a",") 为观测概率，",[27040,27126,4339],{}," 为观测空间，",[27040,27129,27130],{},"γ"," 为折扣因子。",[14,27133,27135],{"id":27134},"_14动作空间","1.4.动作空间",[19,27137,27138,27139,27142],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[3903,27140,27141],{},"动作空间"," ，动作空间分为:",[26,27144,27145,27148],{},[29,27146,27147],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[29,27149,27150],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,27152,27154],{"id":27153},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,27156,27157],{},"由策略、价值函数、模型三部分组成",[19,27159,27160],{},"这三者组成马尔可夫决策过程",[19,27162,27163],{},[5074,27164],{"alt":112,"src":27165},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[72,27167,27169],{"id":27168},"_151策略","1.5.1.策略",[19,27171,27172],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,27174,27175],{},"策略可分为两种：",[19,27177,27178],{},[5074,27179],{"alt":112,"src":27180},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,27182,27183],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[72,27185,27187],{"id":27186},"_152价值函数","1.5.2.价值函数",[19,27189,27190],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,27192,27193],{},"价值函数中有一个折扣因子，类似于存款利息",[19,27195,27196],{},[5074,27197],{"alt":112,"src":27198},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,27200,27201],{},"进入某个状态采取的最优动作可以通过Q函数得到",[72,27203,27205],{"id":27204},"_153模型","1.5.3.模型",[19,27207,27208],{},[5074,27209],{"alt":112,"src":27210},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,27212,27214],{"id":27213},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[3891,27216,27217,27228],{},[3894,27218,27219],{},[3897,27220,27221,27225],{},[3900,27222,27224],{"align":27223},"left","类型",[3900,27226,27227],{"align":27223},"特点",[3938,27229,27230,27240,27250,27260,27272],{},[3897,27231,27232,27237],{},[3943,27233,27234],{"align":27223},[3903,27235,27236],{},"基于价值的智能体",[3943,27238,27239],{"align":27223},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[3897,27241,27242,27247],{},[3943,27243,27244],{"align":27223},[3903,27245,27246],{},"基于策略的智能体",[3943,27248,27249],{"align":27223},"直接学习策略，没有学习价值函数",[3897,27251,27252,27257],{},[3943,27253,27254],{"align":27223},[3903,27255,27256],{},"演员-评论员智能体",[3943,27258,27259],{"align":27223},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[3897,27261,27262,27267],{},[3943,27263,27264],{"align":27223},[3903,27265,27266],{},"有模型强化学习智能体",[3943,27268,27269],{"align":27223},[5074,27270],{"alt":112,"src":27271},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[3897,27273,27274,27279],{},[3943,27275,27276],{"align":27223},[3903,27277,27278],{},"免模型强化学习智能体",[3943,27280,27281],{"align":27223},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,27283,27285],{"id":27284},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,27287,27288],{},"学习和规划是序列决策的两个基本问题",[19,27290,27291],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,27293,27294],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,27296,27297],{},"强化学习用到的库：Gym",[19,27299,27300],{},"Gym可以检验强化学习算法的优劣",[19,27302,27303,27306],{},[3903,27304,27305],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[106,27308,27312],{"className":27309,"code":27310,"language":27311,"meta":112,"style":112},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[114,27313,27314],{"__ignoreMap":112},[128,27315,27316,27319,27322,27325],{"class":130,"line":131},[128,27317,27318],{"class":199},"pip",[128,27320,27321],{"class":176}," install",[128,27323,27324],{"class":176}," gym==",[128,27326,27327],{"class":166},"0.25.2\n",[19,27329,27330],{},"显示图形界面需要",[106,27332,27334],{"className":27309,"code":27333,"language":27311,"meta":112,"style":112},"pip install pygame\n",[114,27335,27336],{"__ignoreMap":112},[128,27337,27338,27340,27342],{"class":130,"line":131},[128,27339,27318],{"class":199},[128,27341,27321],{"class":176},[128,27343,27344],{"class":176}," pygame\n",[19,27346,27347,27348],{},"有关Gym库的相关文档介绍：",[3989,27349,27353],{"href":27350,"rel":27351},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[27352],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,27355,27357],{"id":27356},"_18一些补充基础概念","1.8.一些补充基础概念",[19,27359,27360],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,27362,27363],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,27365,27366],{},[5074,27367],{"alt":112,"src":27368},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,27370,27371],{},"折扣率需要自己来设定",[19,27373,27374],{},[5074,27375],{"alt":112,"src":27376},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[26,27378,27379],{},[29,27380,27381],{},"状态转移函数：",[19,27383,27384],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,27386,27387],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,27389,27390],{},[5074,27391],{"alt":112,"src":27392},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[26,27394,27395],{"start":142},[29,27396,27397],{},"动作价值函数：",[19,27399,27400],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,27402,27403],{},[5074,27404],{"alt":112,"src":27405},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[26,27407,27408],{"start":156},[29,27409,27410],{},"最优动作价值函数：",[19,27412,27413],{},"这个函数是对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,27415,27416],{},[5074,27417],{"alt":112,"src":27418},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[26,27420,27421],{"start":163},[29,27422,27423],{},"状态价值函数:",[19,27425,27426],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,27428,27429],{},"它衡量的是“一个具体动作”的长期价值",[19,27431,27432],{},[5074,27433],{"alt":112,"src":27434},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,27436,27437],{},"几个价值函数之间的比较：",[19,27439,27440],{},[5074,27441],{"alt":112,"src":27442},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[3659,27444,27445],{},"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":112,"searchDepth":142,"depth":142,"links":27447},[27448,27449,27450,27455,27456,27461,27462,27463],{"id":26880,"depth":142,"text":26881},{"id":26947,"depth":142,"text":26948},{"id":26984,"depth":142,"text":26985,"children":27451},[27452,27453,27454],{"id":26988,"depth":156,"text":26989},{"id":27003,"depth":156,"text":27004},{"id":27026,"depth":156,"text":27027},{"id":27134,"depth":142,"text":27135},{"id":27153,"depth":142,"text":27154,"children":27457},[27458,27459,27460],{"id":27168,"depth":156,"text":27169},{"id":27186,"depth":156,"text":27187},{"id":27204,"depth":156,"text":27205},{"id":27213,"depth":142,"text":27214},{"id":27284,"depth":142,"text":27285},{"id":27356,"depth":142,"text":27357},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":26872,"description":112},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":27470,"title":27471,"body":27472,"description":27479,"extension":3687,"meta":27490,"navigation":159,"path":27491,"seo":27492,"stem":27493,"__hash__":27494},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":27473,"toc":27488},[27474,27477,27480,27485],[10,27475,27471],{"id":27476},"_2马尔可夫决策过程",[19,27478,27479],{},"这是强化学习的基本框架",[19,27481,27482],{},[5074,27483],{"alt":112,"src":27484},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,27486,27487],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":112,"searchDepth":142,"depth":142,"links":27489},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":27471,"description":27479},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":27496,"title":27497,"body":27498,"description":112,"extension":3687,"meta":27614,"navigation":159,"path":27615,"seo":27616,"stem":27617,"__hash__":27618},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":27499,"toc":27609},[27500,27503,27507,27510,27515,27520,27523,27528,27531,27536,27539,27543,27548,27551,27556,27561,27566,27569,27573,27578,27581,27586,27591,27596,27601,27604],[10,27501,27497],{"id":27502},"_3动作价值函数",[14,27504,27506],{"id":27505},"_31dqn","3.1.DQN",[19,27508,27509],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,27511,27512],{},[5074,27513],{"alt":112,"src":27514},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,27516,27517],{},[5074,27518],{"alt":112,"src":27519},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,27521,27522],{},"DQN算法的描述：",[19,27524,27525],{},[5074,27526],{"alt":112,"src":27527},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,27529,27530],{},"这里的Dense指的是全连接层",[19,27532,27533],{},[5074,27534],{"alt":112,"src":27535},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,27537,27538],{},"当前观测的状态为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,27540,27542],{"id":27541},"_32dqn的举例","3.2.DQN的举例",[19,27544,27545],{},[5074,27546],{"alt":112,"src":27547},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,27549,27550],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,27552,27553],{},[5074,27554],{"alt":112,"src":27555},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,27557,27558],{},[5074,27559],{"alt":112,"src":27560},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,27562,27563],{},[5074,27564],{"alt":112,"src":27565},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,27567,27568],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,27570,27572],{"id":27571},"_33td算法","3.3.TD算法",[19,27574,27575],{},[5074,27576],{"alt":112,"src":27577},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,27579,27580],{},"强化学习TD算法公式的粗略解释：",[19,27582,27583],{},[5074,27584],{"alt":112,"src":27585},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,27587,27588],{},[5074,27589],{"alt":112,"src":27590},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,27592,27593],{},[5074,27594],{"alt":112,"src":27595},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,27597,27598],{},[5074,27599],{"alt":112,"src":27600},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,27602,27603],{},"TD算法总结：",[19,27605,27606],{},[5074,27607],{"alt":112,"src":27608},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":112,"searchDepth":142,"depth":142,"links":27610},[27611,27612,27613],{"id":27505,"depth":142,"text":27506},{"id":27541,"depth":142,"text":27542},{"id":27571,"depth":142,"text":27572},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":27497,"description":112},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":27620,"title":27621,"body":27622,"description":112,"extension":3687,"meta":27855,"navigation":159,"path":27856,"seo":27857,"stem":27858,"__hash__":27859},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":27623,"toc":27851},[27624,27627,27631,27634,27637,27642,27647,27650,27655,27660,27663,27668,27671,27676,27679,27684,27687,27692,27695,27700,27705,27708,27713,27716,27719,27724,27727,27732,27737,27741,27744,27747,27752,27757,27760,27765,27770,27773,27778,27781,27784,27789,27792,27797,27800,27805,27810,27813,27818,27823,27826,27831,27834,27839,27842],[10,27625,27621],{"id":27626},"_4策略学习",[14,27628,27630],{"id":27629},"_41概念描述","4.1.概念描述",[19,27632,27633],{},"用神经网络（策略网络）近似策略函数",[19,27635,27636],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,27638,27639],{},[5074,27640],{"alt":112,"src":27641},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,27643,27644],{},[5074,27645],{"alt":112,"src":27646},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,27648,27649],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,27651,27652],{},[5074,27653],{"alt":112,"src":27654},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,27656,27657],{},[5074,27658],{"alt":112,"src":27659},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,27661,27662],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,27664,27665],{},[5074,27666],{"alt":112,"src":27667},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,27669,27670],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,27672,27673],{},[5074,27674],{"alt":112,"src":27675},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,27677,27678],{},"改进theta要用到策略梯度算法",[19,27680,27681],{},[5074,27682],{"alt":112,"src":27683},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,27685,27686],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,27688,27689],{},[5074,27690],{"alt":112,"src":27691},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,27693,27694],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,27696,27697],{},[5074,27698],{"alt":112,"src":27699},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,27701,27702],{},[5074,27703],{"alt":112,"src":27704},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,27706,27707],{},"梯度公式总结：",[19,27709,27710],{},[5074,27711],{"alt":112,"src":27712},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,27714,27715],{},"两个公式的分别应用场景：",[19,27717,27718],{},"对于离散的动作：",[19,27720,27721],{},[5074,27722],{"alt":112,"src":27723},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,27725,27726],{},"对于连续的动作：",[19,27728,27729],{},[5074,27730],{"alt":112,"src":27731},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,27733,27734],{},[5074,27735],{"alt":112,"src":27736},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,27738,27740],{"id":27739},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,27742,27743],{},"使用蒙特卡洛来近似计算策略梯度",[19,27745,27746],{},"蒙特卡洛法的解释如下：",[19,27748,27749],{},[5074,27750],{"alt":112,"src":27751},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,27753,27754],{},[5074,27755],{"alt":112,"src":27756},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,27758,27759],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[26,27761,27762],{},[29,27763,27764],{},"方法一：reinforce算法",[19,27766,27767],{},[5074,27768],{"alt":112,"src":27769},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,27771,27772],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[26,27774,27775],{"start":142},[29,27776,27777],{},"方法二：actor-critic算法",[19,27779,27780],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,27782,27783],{},"两个网络的构建：",[19,27785,27786],{},[5074,27787],{"alt":112,"src":27788},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,27790,27791],{},"actor网路：",[19,27793,27794],{},[5074,27795],{"alt":112,"src":27796},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,27798,27799],{},"critic网络",[19,27801,27802],{},[5074,27803],{"alt":112,"src":27804},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[26,27806,27807],{"start":156},[29,27808,27809],{},"网络的训练",[19,27811,27812],{},"网络描述",[19,27814,27815],{},[5074,27816],{"alt":112,"src":27817},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,27819,27820],{},[5074,27821],{"alt":112,"src":27822},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,27824,27825],{},"TD算法更新梯度：",[19,27827,27828],{},[5074,27829],{"alt":112,"src":27830},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,27832,27833],{},"策略网络更新梯度：",[19,27835,27836],{},[5074,27837],{"alt":112,"src":27838},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,27840,27841],{},"训练整个流程的具体描述：",[19,27843,27844,27847,27848],{},[5074,27845],{"alt":112,"src":27846},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[5074,27849],{"alt":112,"src":27850},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":112,"searchDepth":142,"depth":142,"links":27852},[27853,27854],{"id":27629,"depth":142,"text":27630},{"id":27739,"depth":142,"text":27740},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":27621,"description":112},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":27861,"title":27862,"body":27863,"description":27870,"extension":3687,"meta":27920,"navigation":159,"path":27921,"seo":27922,"stem":27923,"__hash__":27924},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":27864,"toc":27916},[27865,27868,27871,27875,27878,27883,27887,27890,27895,27898,27903,27908,27911],[10,27866,27862],{"id":27867},"_5alphago算法",[19,27869,27870],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,27872,27874],{"id":27873},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,27876,27877],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,27879,27880],{},[5074,27881],{"alt":112,"src":27882},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,27884,27886],{"id":27885},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,27888,27889],{},"采用强化学习的方式训练策略网络",[19,27891,27892],{},[5074,27893],{"alt":112,"src":27894},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,27896,27897],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,27899,27900],{},[5074,27901],{"alt":112,"src":27902},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,27904,27905],{},[5074,27906],{"alt":112,"src":27907},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,27909,27910],{},"强化学习训练策略网络的总结：",[19,27912,27913],{},[5074,27914],{"alt":112,"src":27915},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":112,"searchDepth":142,"depth":142,"links":27917},[27918,27919],{"id":27873,"depth":142,"text":27874},{"id":27885,"depth":142,"text":27886},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":27862,"description":27870},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":27926,"title":27927,"body":27928,"description":27935,"extension":3687,"meta":27938,"navigation":159,"path":27939,"seo":27940,"stem":27941,"__hash__":27942},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":27929,"toc":27936},[27930,27933],[10,27931,27927],{"id":27932},"_6价值网络",[19,27934,27935],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":112,"searchDepth":142,"depth":142,"links":27937},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":27927,"description":27935},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":27944,"title":27945,"body":27946,"description":27950,"extension":3687,"meta":27951,"navigation":159,"path":27952,"seo":27953,"stem":27954,"__hash__":27955},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":27947,"toc":27948},[],{"title":112,"searchDepth":142,"depth":142,"links":27949},[],"记录自己的强化学习笔记。",{"category":26865},"\u002Fwiki\u002F2025-12-04",{"title":27945,"description":27950},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":27957,"title":27958,"body":27959,"description":3686,"extension":3687,"meta":27998,"navigation":159,"path":27999,"seo":28000,"stem":28001,"__hash__":28002},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":27960,"toc":27996},[27961,27964,27967,27973,27976,27982,27985,27990,27993],[10,27962,27958],{"id":27963},"_1-项目概览与官方资源",[19,27965,27966],{},"官方文档：",[19,27968,27969],{},[3989,27970,27971],{"href":27971,"rel":27972},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[27352],[19,27974,27975],{},"官方代码仓库：",[19,27977,27978],{},[3989,27979,27980],{"href":27980,"rel":27981},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[27352],[19,27983,27984],{},"复现大体流程：",[19,27986,27987],{},[5074,27988],{"alt":112,"src":27989},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,27991,27992],{},"本教程的目标是打通这条链路：",[19,27994,27995],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":112,"searchDepth":142,"depth":142,"links":27997},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":27958,"description":3686},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":28004,"title":28005,"body":28006,"description":3686,"extension":3687,"meta":28121,"navigation":159,"path":28122,"seo":28123,"stem":28124,"__hash__":28125},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":28007,"toc":28116},[28008,28011,28015,28018,28025,28029,28032,28041,28051,28055,28085,28087,28113],[10,28009,28005],{"id":28010},"_2-环境准备与设备连接",[14,28012,28014],{"id":28013},"_21-系统与环境","2.1 系统与环境",[19,28016,28017],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,28019,28020,28021,28024],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[114,28022,28023],{},"lerobot"," 依赖。",[14,28026,28028],{"id":28027},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,28030,28031],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[106,28033,28035],{"className":27309,"code":28034,"language":27311,"meta":112,"style":112},"lerobot-find-out\n",[114,28036,28037],{"__ignoreMap":112},[128,28038,28039],{"class":130,"line":131},[128,28040,28034],{"class":199},[19,28042,28043,28044,3550,28047,28050],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[114,28045,28046],{},"\u002Fdev\u002FttyACM0",[114,28048,28049],{},"\u002Fdev\u002FttyACM1","）。",[14,28052,28054],{"id":28053},"_23-串口授权","2.3 串口授权",[106,28056,28058],{"className":27309,"code":28057,"language":27311,"meta":112,"style":112},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[114,28059,28060,28074],{"__ignoreMap":112},[128,28061,28062,28065,28068,28071],{"class":130,"line":131},[128,28063,28064],{"class":199},"sudo",[128,28066,28067],{"class":176}," chmod",[128,28069,28070],{"class":166}," 666",[128,28072,28073],{"class":176}," \u002Fdev\u002FttyACM0\n",[128,28075,28076,28078,28080,28082],{"class":130,"line":142},[128,28077,28064],{"class":199},[128,28079,28067],{"class":176},[128,28081,28070],{"class":166},[128,28083,28084],{"class":176}," \u002Fdev\u002FttyACM1\n",[19,28086,3497],{},[4752,28088,28089,28094,28100,28110],{},[29,28090,28091,28093],{},[114,28092,28064],{},"：以 root 权限执行命令。",[29,28095,28096,28099],{},[114,28097,28098],{},"chmod","：修改设备节点权限。",[29,28101,28102,28105,28106,28109],{},[114,28103,28104],{},"666","：",[114,28107,28108],{},"rw-rw-rw-","，所有用户可读写。",[29,28111,28112],{},"串口号必须替换为你机器上的真实端口。",[3659,28114,28115],{},"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":112,"searchDepth":142,"depth":142,"links":28117},[28118,28119,28120],{"id":28013,"depth":142,"text":28014},{"id":28027,"depth":142,"text":28028},{"id":28053,"depth":142,"text":28054},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":28005,"description":3686},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":28127,"title":28128,"body":28129,"description":3686,"extension":3687,"meta":28290,"navigation":159,"path":28291,"seo":28292,"stem":28293,"__hash__":28294},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":28130,"toc":28286},[28131,28135,28139,28145,28148,28205,28208,28212,28215,28283],[10,28132,28134],{"id":28133},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,28136,28138],{"id":28137},"_31-配置电机-id","3.1 配置电机 ID",[19,28140,28141,28142,28144],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[114,28143,2592],{},"，需要改成机械臂链路里不冲突的编号。",[19,28146,28147],{},"方式一：用 LeRobot 命令逐步写入。",[106,28149,28151],{"className":27309,"code":28150,"language":27311,"meta":112,"style":112},"# 主臂舵机配置 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",[114,28152,28153,28158,28166,28173,28178,28182,28187,28193,28200],{"__ignoreMap":112},[128,28154,28155],{"class":130,"line":131},[128,28156,28157],{"class":3814},"# 主臂舵机配置 ID\n",[128,28159,28160,28163],{"class":130,"line":142},[128,28161,28162],{"class":199},"lerobot-setup-motors",[128,28164,28165],{"class":166}," \\\n",[128,28167,28168,28171],{"class":130,"line":156},[128,28169,28170],{"class":166},"  --teleop.type=so101_leader",[128,28172,28165],{"class":166},[128,28174,28175],{"class":130,"line":163},[128,28176,28177],{"class":166},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[128,28179,28180],{"class":130,"line":183},[128,28181,160],{"emptyLinePlaceholder":159},[128,28183,28184],{"class":130,"line":188},[128,28185,28186],{"class":3814},"# 从臂舵机配置 ID\n",[128,28188,28189,28191],{"class":130,"line":193},[128,28190,28162],{"class":199},[128,28192,28165],{"class":166},[128,28194,28195,28198],{"class":130,"line":206},[128,28196,28197],{"class":166},"  --robot.type=so101_follower",[128,28199,28165],{"class":166},[128,28201,28202],{"class":130,"line":221},[128,28203,28204],{"class":166},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,28206,28207],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,28209,28211],{"id":28210},"_32-机械臂校准","3.2 机械臂校准",[19,28213,28214],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[106,28216,28218],{"className":27309,"code":28217,"language":27311,"meta":112,"style":112},"# 主臂校准\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",[114,28219,28220,28225,28232,28238,28245,28250,28254,28259,28265,28271,28278],{"__ignoreMap":112},[128,28221,28222],{"class":130,"line":131},[128,28223,28224],{"class":3814},"# 主臂校准\n",[128,28226,28227,28230],{"class":130,"line":142},[128,28228,28229],{"class":199},"lerobot-calibrate",[128,28231,28165],{"class":166},[128,28233,28234,28236],{"class":130,"line":156},[128,28235,28170],{"class":166},[128,28237,28165],{"class":166},[128,28239,28240,28243],{"class":130,"line":163},[128,28241,28242],{"class":166},"  --teleop.port=\u002Fdev\u002FttyACM0",[128,28244,28165],{"class":166},[128,28246,28247],{"class":130,"line":183},[128,28248,28249],{"class":166},"  --teleop.id=my_awesome_leader_arm\n",[128,28251,28252],{"class":130,"line":188},[128,28253,160],{"emptyLinePlaceholder":159},[128,28255,28256],{"class":130,"line":193},[128,28257,28258],{"class":3814},"# 从臂校准\n",[128,28260,28261,28263],{"class":130,"line":206},[128,28262,28229],{"class":199},[128,28264,28165],{"class":166},[128,28266,28267,28269],{"class":130,"line":221},[128,28268,28197],{"class":166},[128,28270,28165],{"class":166},[128,28272,28273,28276],{"class":130,"line":230},[128,28274,28275],{"class":166},"  --robot.port=\u002Fdev\u002FttyACM1",[128,28277,28165],{"class":166},[128,28279,28280],{"class":130,"line":235},[128,28281,28282],{"class":166},"  --robot.id=my_awesome_follower_arm\n",[3659,28284,28285],{},"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":112,"searchDepth":142,"depth":142,"links":28287},[28288,28289],{"id":28137,"depth":142,"text":28138},{"id":28210,"depth":142,"text":28211},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":28128,"description":3686},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":28296,"title":28297,"body":28298,"description":3686,"extension":3687,"meta":28489,"navigation":159,"path":28490,"seo":28491,"stem":28492,"__hash__":28493},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":28299,"toc":28485},[28300,28303,28307,28354,28358,28371,28434,28437,28482],[10,28301,28297],{"id":28302},"_4-遥操与相机接入",[14,28304,28306],{"id":28305},"_41-不带相机遥操","4.1 不带相机遥操",[106,28308,28310],{"className":27309,"code":28309,"language":27311,"meta":112,"style":112},"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",[114,28311,28312,28319,28325,28331,28338,28344,28350],{"__ignoreMap":112},[128,28313,28314,28317],{"class":130,"line":131},[128,28315,28316],{"class":199},"lerobot-teleoperate",[128,28318,28165],{"class":166},[128,28320,28321,28323],{"class":130,"line":142},[128,28322,28197],{"class":166},[128,28324,28165],{"class":166},[128,28326,28327,28329],{"class":130,"line":156},[128,28328,28275],{"class":166},[128,28330,28165],{"class":166},[128,28332,28333,28336],{"class":130,"line":163},[128,28334,28335],{"class":166},"  --robot.id=my_awesome_follower_arm",[128,28337,28165],{"class":166},[128,28339,28340,28342],{"class":130,"line":183},[128,28341,28170],{"class":166},[128,28343,28165],{"class":166},[128,28345,28346,28348],{"class":130,"line":188},[128,28347,28242],{"class":166},[128,28349,28165],{"class":166},[128,28351,28352],{"class":130,"line":193},[128,28353,28249],{"class":166},[14,28355,28357],{"id":28356},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[106,28359,28361],{"className":27309,"code":28360,"language":27311,"meta":112,"style":112},"lerobot-find-cameras opencv\n",[114,28362,28363],{"__ignoreMap":112},[128,28364,28365,28368],{"class":130,"line":131},[128,28366,28367],{"class":199},"lerobot-find-cameras",[128,28369,28370],{"class":176}," opencv\n",[106,28372,28374],{"className":27309,"code":28373,"language":27311,"meta":112,"style":112},"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",[114,28375,28376,28382,28388,28394,28400,28410,28416,28422,28429],{"__ignoreMap":112},[128,28377,28378,28380],{"class":130,"line":131},[128,28379,28316],{"class":199},[128,28381,28165],{"class":166},[128,28383,28384,28386],{"class":130,"line":142},[128,28385,28197],{"class":166},[128,28387,28165],{"class":166},[128,28389,28390,28392],{"class":130,"line":156},[128,28391,28275],{"class":166},[128,28393,28165],{"class":166},[128,28395,28396,28398],{"class":130,"line":163},[128,28397,28335],{"class":166},[128,28399,28165],{"class":166},[128,28401,28402,28405,28408],{"class":130,"line":183},[128,28403,28404],{"class":166},"  --robot.cameras=",[128,28406,28407],{"class":176},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[128,28409,28165],{"class":166},[128,28411,28412,28414],{"class":130,"line":188},[128,28413,28170],{"class":166},[128,28415,28165],{"class":166},[128,28417,28418,28420],{"class":130,"line":193},[128,28419,28242],{"class":166},[128,28421,28165],{"class":166},[128,28423,28424,28427],{"class":130,"line":206},[128,28425,28426],{"class":166},"  --teleop.id=my_awesome_leader_arm",[128,28428,28165],{"class":166},[128,28430,28431],{"class":130,"line":221},[128,28432,28433],{"class":166},"  --display_data=true\n",[19,28435,28436],{},"相机参数说明：",[4752,28438,28439,28445,28451,28460,28470,28476],{},[29,28440,28441,28444],{},[114,28442,28443],{},"front","：相机名称。",[29,28446,28447,28450],{},[114,28448,28449],{},"type: opencv","：相机驱动类型。",[29,28452,28453,28456,28457,28050],{},[114,28454,28455],{},"index_or_path","：设备编号或设备路径（如 ",[114,28458,28459],{},"\u002Fdev\u002Fvideo4",[29,28461,28462,28465,28466,28469],{},[114,28463,28464],{},"width"," \u002F ",[114,28467,28468],{},"height","：图像分辨率。",[29,28471,28472,28475],{},[114,28473,28474],{},"fps","：采样帧率。",[29,28477,28478,28481],{},[114,28479,28480],{},"--display_data=true","：启用实时可视化。",[3659,28483,28484],{},"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":112,"searchDepth":142,"depth":142,"links":28486},[28487,28488],{"id":28305,"depth":142,"text":28306},{"id":28356,"depth":142,"text":28357},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":28297,"description":3686},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":28495,"title":28496,"body":28497,"description":3686,"extension":3687,"meta":28668,"navigation":159,"path":28669,"seo":28670,"stem":28671,"__hash__":28672},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":28498,"toc":28663},[28499,28503,28507,28512,28517,28520,28562,28568,28572,28620,28625,28629,28632,28640,28645,28650,28655,28660],[10,28500,28502],{"id":28501},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,28504,28506],{"id":28505},"_51-生成访问令牌","5.1 生成访问令牌",[19,28508,28509],{},[5074,28510],{"alt":112,"src":28511},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,28513,28514],{},[5074,28515],{"alt":112,"src":28516},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,28518,28519],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[106,28521,28523],{"className":27309,"code":28522,"language":27311,"meta":112,"style":112},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[114,28524,28525,28538],{"__ignoreMap":112},[128,28526,28527,28530,28533,28535],{"class":130,"line":131},[128,28528,28529],{"class":134},"export",[128,28531,28532],{"class":138}," HF_TOKEN",[128,28534,270],{"class":134},[128,28536,28537],{"class":176},"\"your_huggingface_token\"\n",[128,28539,28540,28543,28546,28549,28552,28554,28557,28559],{"class":130,"line":142},[128,28541,28542],{"class":199},"hf",[128,28544,28545],{"class":176}," auth",[128,28547,28548],{"class":176}," login",[128,28550,28551],{"class":166}," --token",[128,28553,13269],{"class":176},[128,28555,28556],{"class":138},"$HF_TOKEN",[128,28558,1376],{"class":176},[128,28560,28561],{"class":166}," --add-to-git-credential\n",[19,28563,28564,28567],{},[114,28565,28566],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,28569,28571],{"id":28570},"_52-验证登录","5.2 验证登录",[106,28573,28575],{"className":27309,"code":28574,"language":27311,"meta":112,"style":112},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[114,28576,28577,28608],{"__ignoreMap":112},[128,28578,28579,28582,28584,28587,28589,28591,28594,28597,28600,28603,28606],{"class":130,"line":131},[128,28580,28581],{"class":138},"HF_USER",[128,28583,270],{"class":134},[128,28585,28586],{"class":138},"$(",[128,28588,28542],{"class":199},[128,28590,28545],{"class":176},[128,28592,28593],{"class":176}," whoami",[128,28595,28596],{"class":134}," |",[128,28598,28599],{"class":199}," head",[128,28601,28602],{"class":166}," -n",[128,28604,28605],{"class":166}," 1",[128,28607,180],{"class":138},[128,28609,28610,28613,28615,28618],{"class":130,"line":142},[128,28611,28612],{"class":166},"echo",[128,28614,13269],{"class":176},[128,28616,28617],{"class":138},"$HF_USER",[128,28619,1394],{"class":176},[19,28621,28622],{},[5074,28623],{"alt":112,"src":28624},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,28626,28628],{"id":28627},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,28630,28631],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[4752,28633,28634,28637],{},[29,28635,28636],{},"Dataset Repo（用于上传演示数据）",[29,28638,28639],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,28641,28642],{},[5074,28643],{"alt":112,"src":28644},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,28646,28647],{},[5074,28648],{"alt":112,"src":28649},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,28651,28652],{},[5074,28653],{"alt":112,"src":28654},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,28656,28657],{},[5074,28658],{"alt":112,"src":28659},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[3659,28661,28662],{},"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":112,"searchDepth":142,"depth":142,"links":28664},[28665,28666,28667],{"id":28505,"depth":142,"text":28506},{"id":28570,"depth":142,"text":28571},{"id":28627,"depth":142,"text":28628},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":28496,"description":3686},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":28674,"title":28675,"body":28676,"description":3686,"extension":3687,"meta":28873,"navigation":159,"path":28874,"seo":28875,"stem":28876,"__hash__":28877},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":28677,"toc":28868},[28678,28682,28686,28782,28790,28795,28799,28815,28818,28822,28865],[10,28679,28681],{"id":28680},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,28683,28685],{"id":28684},"_61-录制示教数据","6.1 录制示教数据",[106,28687,28689],{"className":27309,"code":28688,"language":27311,"meta":112,"style":112},"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",[114,28690,28691,28698,28704,28710,28716,28725,28731,28737,28743,28750,28760,28767,28777],{"__ignoreMap":112},[128,28692,28693,28696],{"class":130,"line":131},[128,28694,28695],{"class":199},"lerobot-record",[128,28697,28165],{"class":166},[128,28699,28700,28702],{"class":130,"line":142},[128,28701,28197],{"class":166},[128,28703,28165],{"class":166},[128,28705,28706,28708],{"class":130,"line":156},[128,28707,28275],{"class":166},[128,28709,28165],{"class":166},[128,28711,28712,28714],{"class":130,"line":163},[128,28713,28335],{"class":166},[128,28715,28165],{"class":166},[128,28717,28718,28720,28723],{"class":130,"line":183},[128,28719,28404],{"class":166},[128,28721,28722],{"class":176},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[128,28724,28165],{"class":166},[128,28726,28727,28729],{"class":130,"line":188},[128,28728,28170],{"class":166},[128,28730,28165],{"class":166},[128,28732,28733,28735],{"class":130,"line":193},[128,28734,28242],{"class":166},[128,28736,28165],{"class":166},[128,28738,28739,28741],{"class":130,"line":206},[128,28740,28426],{"class":166},[128,28742,28165],{"class":166},[128,28744,28745,28748],{"class":130,"line":221},[128,28746,28747],{"class":166},"  --display_data=true",[128,28749,28165],{"class":166},[128,28751,28752,28755,28758],{"class":130,"line":230},[128,28753,28754],{"class":166},"  --dataset.repo_id=",[128,28756,28757],{"class":176},"\"Embodied-AI-6\u002Fso101_test\"",[128,28759,28165],{"class":166},[128,28761,28762,28765],{"class":130,"line":235},[128,28763,28764],{"class":166},"  --dataset.num_episodes=10",[128,28766,28165],{"class":166},[128,28768,28769,28772,28775],{"class":130,"line":244},[128,28770,28771],{"class":166},"  --dataset.single_task=",[128,28773,28774],{"class":176},"\"Grab the green cube\"",[128,28776,28165],{"class":166},[128,28778,28779],{"class":130,"line":287},[128,28780,28781],{"class":166},"  --resume=true\n",[4752,28783,28784],{},[29,28785,28786,28789],{},[114,28787,28788],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,28791,28792],{},[5074,28793],{"alt":112,"src":28794},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,28796,28798],{"id":28797},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[106,28800,28802],{"className":27309,"code":28801,"language":27311,"meta":112,"style":112},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[114,28803,28804],{"__ignoreMap":112},[128,28805,28806,28809,28812],{"class":130,"line":131},[128,28807,28808],{"class":199},"rm",[128,28810,28811],{"class":166}," -rf",[128,28813,28814],{"class":176}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,28816,28817],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,28819,28821],{"id":28820},"_63-回放指定-episode","6.3 回放指定 episode",[106,28823,28825],{"className":27309,"code":28824,"language":27311,"meta":112,"style":112},"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",[114,28826,28827,28834,28840,28846,28852,28860],{"__ignoreMap":112},[128,28828,28829,28832],{"class":130,"line":131},[128,28830,28831],{"class":199},"lerobot-replay",[128,28833,28165],{"class":166},[128,28835,28836,28838],{"class":130,"line":142},[128,28837,28197],{"class":166},[128,28839,28165],{"class":166},[128,28841,28842,28844],{"class":130,"line":156},[128,28843,28275],{"class":166},[128,28845,28165],{"class":166},[128,28847,28848,28850],{"class":130,"line":163},[128,28849,28335],{"class":166},[128,28851,28165],{"class":166},[128,28853,28854,28856,28858],{"class":130,"line":183},[128,28855,28754],{"class":166},[128,28857,28757],{"class":176},[128,28859,28165],{"class":166},[128,28861,28862],{"class":130,"line":188},[128,28863,28864],{"class":166},"  --dataset.episode=0\n",[3659,28866,28867],{},"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":112,"searchDepth":142,"depth":142,"links":28869},[28870,28871,28872],{"id":28684,"depth":142,"text":28685},{"id":28797,"depth":142,"text":28798},{"id":28820,"depth":142,"text":28821},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":28675,"description":3686},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":28879,"title":28880,"body":28881,"description":3686,"extension":3687,"meta":29009,"navigation":159,"path":29010,"seo":29011,"stem":29012,"__hash__":29013},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":28882,"toc":29007},[28883,28887,28950,28953,29000,29005],[10,28884,28886],{"id":28885},"_7-act-模型训练","7. ACT 模型训练",[106,28888,28890],{"className":27309,"code":28889,"language":27311,"meta":112,"style":112},"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",[114,28891,28892,28899,28907,28914,28921,28928,28935,28942],{"__ignoreMap":112},[128,28893,28894,28897],{"class":130,"line":131},[128,28895,28896],{"class":199},"lerobot-train",[128,28898,28165],{"class":166},[128,28900,28901,28903,28905],{"class":130,"line":142},[128,28902,28754],{"class":166},[128,28904,28757],{"class":176},[128,28906,28165],{"class":166},[128,28908,28909,28912],{"class":130,"line":156},[128,28910,28911],{"class":166},"  --policy.type=act",[128,28913,28165],{"class":166},[128,28915,28916,28919],{"class":130,"line":163},[128,28917,28918],{"class":166},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[128,28920,28165],{"class":166},[128,28922,28923,28926],{"class":130,"line":183},[128,28924,28925],{"class":166},"  --job_name=act_so101_test",[128,28927,28165],{"class":166},[128,28929,28930,28933],{"class":130,"line":188},[128,28931,28932],{"class":166},"  --policy.device=cuda",[128,28934,28165],{"class":166},[128,28936,28937,28940],{"class":130,"line":193},[128,28938,28939],{"class":166},"  --wandb.enable=false",[128,28941,28165],{"class":166},[128,28943,28944,28947],{"class":130,"line":206},[128,28945,28946],{"class":166},"  --policy.repo_id=",[128,28948,28949],{"class":176},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,28951,28952],{},"参数说明：",[4752,28954,28955,28961,28967,28973,28979,28988,28994],{},[29,28956,28957,28960],{},[114,28958,28959],{},"--dataset.repo_id","：训练数据集仓库。",[29,28962,28963,28966],{},[114,28964,28965],{},"--policy.type=act","：策略模型类型为 ACT。",[29,28968,28969,28972],{},[114,28970,28971],{},"--output_dir","：本地训练输出目录。",[29,28974,28975,28978],{},[114,28976,28977],{},"--job_name","：训练任务名称。",[29,28980,28981,28984,28985,28050],{},[114,28982,28983],{},"--policy.device","：训练设备（如 ",[114,28986,28987],{},"cuda",[29,28989,28990,28993],{},[114,28991,28992],{},"--wandb.enable","：是否启用 WandB 可视化。",[29,28995,28996,28999],{},[114,28997,28998],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,29001,29002],{},[5074,29003],{"alt":112,"src":29004},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[3659,29006,28867],{},{"title":112,"searchDepth":142,"depth":142,"links":29008},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":28880,"description":3686},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":29015,"title":29016,"body":29017,"description":3686,"extension":3687,"meta":29104,"navigation":159,"path":29105,"seo":29106,"stem":29107,"__hash__":29108},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":29018,"toc":29102},[29019,29022,29025,29092,29100],[10,29020,29016],{"id":29021},"_8-策略部署与自动采集",[19,29023,29024],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[106,29026,29028],{"className":27309,"code":29027,"language":27311,"meta":112,"style":112},"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",[114,29029,29030,29036,29042,29048,29056,29062,29069,29077,29085],{"__ignoreMap":112},[128,29031,29032,29034],{"class":130,"line":131},[128,29033,28695],{"class":199},[128,29035,28165],{"class":166},[128,29037,29038,29040],{"class":130,"line":142},[128,29039,28197],{"class":166},[128,29041,28165],{"class":166},[128,29043,29044,29046],{"class":130,"line":156},[128,29045,28275],{"class":166},[128,29047,28165],{"class":166},[128,29049,29050,29052,29054],{"class":130,"line":163},[128,29051,28404],{"class":166},[128,29053,28722],{"class":176},[128,29055,28165],{"class":166},[128,29057,29058,29060],{"class":130,"line":183},[128,29059,28335],{"class":166},[128,29061,28165],{"class":166},[128,29063,29064,29067],{"class":130,"line":188},[128,29065,29066],{"class":166},"  --display_data=false",[128,29068,28165],{"class":166},[128,29070,29071,29073,29075],{"class":130,"line":193},[128,29072,28754],{"class":166},[128,29074,28757],{"class":176},[128,29076,28165],{"class":166},[128,29078,29079,29081,29083],{"class":130,"line":206},[128,29080,28771],{"class":166},[128,29082,28774],{"class":176},[128,29084,28165],{"class":166},[128,29086,29087,29090],{"class":130,"line":221},[128,29088,29089],{"class":166},"  --policy.path=",[128,29091,28949],{"class":176},[4752,29093,29094],{},[29,29095,29096,29099],{},[114,29097,29098],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[3659,29101,28867],{},{"title":112,"searchDepth":142,"depth":142,"links":29103},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":29016,"description":3686},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":29110,"title":29111,"body":29112,"description":3686,"extension":3687,"meta":29141,"navigation":159,"path":29142,"seo":29143,"stem":29144,"__hash__":29145},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":29113,"toc":29139},[29114,29118,29121,29127,29130,29136],[10,29115,29117],{"id":29116},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,29119,29120],{},"项目地址：",[19,29122,29123],{},[3989,29124,29125],{"href":29125,"rel":29126},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[27352],[19,29128,29129],{},"参考教程：",[19,29131,29132],{},[3989,29133,29134],{"href":29134,"rel":29135},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[27352],[19,29137,29138],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":112,"searchDepth":142,"depth":142,"links":29140},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":29111,"description":3686},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":29147,"title":29148,"body":29149,"description":29153,"extension":3687,"meta":29154,"navigation":159,"path":29155,"seo":29156,"stem":29157,"__hash__":29158},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":29150,"toc":29151},[],{"title":112,"searchDepth":142,"depth":142,"links":29152},[],"act复现",{"category":26865},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":29148,"description":29153},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":29160,"title":29161,"body":29162,"description":112,"extension":3687,"meta":29464,"navigation":159,"path":29465,"seo":29466,"stem":29467,"__hash__":29468},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":29163,"toc":29456},[29164,29167,29171,29181,29188,29195,29198,29205,29208,29211,29215,29227,29231,29277,29280,29283,29286,29289,29292,29296,29334,29340,29344,29398,29403,29406,29409,29414,29417,29422,29425,29428,29432,29435,29438,29442],[10,29165,29161],{"id":29166},"_1简介",[72,29168,29170],{"id":29169},"_11什么是-docker","1.1什么是 Docker？",[19,29172,29173,29174,29177,29178],{},"Docker 是一个开源的 ",[3903,29175,29176],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[3903,29179,29180],{},"一次构建，到处运行。",[19,29182,29183,29184,29187],{},"“ ",[3903,29185,29186],{},"一次构建，到处运行"," ”也就是说：",[26,29189,29190],{},[29,29191,29192],{},[3903,29193,29194],{},"之前：",[19,29196,29197],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[26,29199,29200],{},[29,29201,29202],{},[3903,29203,29204],{},"使用docker后：",[19,29206,29207],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,29209,29210],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[72,29212,29214],{"id":29213},"_12它是怎么工作的","1.2.它是怎么工作的？",[4752,29216,29217,29220],{},[29,29218,29219],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[29,29221,29222,29223,29226],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[3903,29224,29225],{},"无论在哪运行都一样稳定"," 。",[72,29228,29230],{"id":29229},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[3891,29232,29233,29243],{},[3894,29234,29235],{},[3897,29236,29237,29240],{},[3900,29238,29239],{"align":27223},"概念",[3900,29241,29242],{"align":27223},"解释",[3938,29244,29245,29253,29261,29269],{},[3897,29246,29247,29250],{},[3943,29248,29249],{"align":27223},"镜像",[3943,29251,29252],{"align":27223},"Image，运行容器的模板，像是一个应用快照",[3897,29254,29255,29258],{},[3943,29256,29257],{"align":27223},"容器",[3943,29259,29260],{"align":27223},"Container，运行中的镜像实例，有自己的文件系统、网络等",[3897,29262,29263,29266],{},[3943,29264,29265],{"align":27223},"Dockerfile",[3943,29267,29268],{"align":27223},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[3897,29270,29271,29274],{},[3943,29272,29273],{"align":27223},"仓库",[3943,29275,29276],{"align":27223},"Registry，存放镜像的地方，比如 Docker Hub",[19,29278,29279],{},"抽象化理解:",[19,29281,29282],{},"Docker镜像≈C++类",[19,29284,29285],{},"Docker容器≈C++类实例(即对象)",[19,29287,29288],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,29290,29291],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[72,29293,29295],{"id":29294},"_14类比理解","1.4.类比理解",[3891,29297,29298,29308],{},[3894,29299,29300],{},[3897,29301,29302,29305],{},[3900,29303,29304],{"align":27223},"传统部署",[3900,29306,29307],{"align":27223},"Docker部署",[3938,29309,29310,29318,29326],{},[3897,29311,29312,29315],{},[3943,29313,29314],{"align":27223},"手动安装依赖、调试版本不一致问题",[3943,29316,29317],{"align":27223},"一次打包环境和代码",[3897,29319,29320,29323],{},[3943,29321,29322],{"align":27223},"程序“裸奔”跑在系统上",[3943,29324,29325],{"align":27223},"程序“穿着容器”隔离运行",[3897,29327,29328,29331],{},[3943,29329,29330],{"align":27223},"容易“在我电脑上能跑”",[3943,29332,29333],{"align":27223},"保证“无论在哪都能跑”",[19,29335,29336,29337],{},"就像快递包裹： ",[3903,29338,29339],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[72,29341,29343],{"id":29342},"_15docker-的核心优势","1.5.Docker 的核心优势",[3891,29345,29346,29356],{},[3894,29347,29348],{},[3897,29349,29350,29353],{},[3900,29351,29352],{"align":27223},"优势",[3900,29354,29355],{"align":27223},"说明",[3938,29357,29358,29366,29374,29382,29390],{},[3897,29359,29360,29363],{},[3943,29361,29362],{"align":27223},"轻量级",[3943,29364,29365],{"align":27223},"基于系统内核共享，启动速度快，占资源少",[3897,29367,29368,29371],{},[3943,29369,29370],{"align":27223},"跨平台",[3943,29372,29373],{"align":27223},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[3897,29375,29376,29379],{},[3943,29377,29378],{"align":27223},"易于迁移部署",[3943,29380,29381],{"align":27223},"应用和环境一起封装，不怕依赖不一致",[3897,29383,29384,29387],{},[3943,29385,29386],{"align":27223},"易于版本控制",[3943,29388,29389],{"align":27223},"镜像版本可控，支持回滚",[3897,29391,29392,29395],{},[3943,29393,29394],{"align":27223},"生态丰富",[3943,29396,29397],{"align":27223},"Docker Hub 上有成千上万的现成镜像可用",[26,29399,29400],{},[29,29401,29402],{},"在Linux上可以几乎实现无性能损失。",[19,29404,29405],{},"docker里的发行版和本机共用Linux内核。",[19,29407,29408],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[26,29410,29411],{},[29,29412,29413],{},"可以快速部署在绝大多数Linux发行版",[19,29415,29416],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[26,29418,29419],{},[29,29420,29421],{},"配置环境简单",[19,29423,29424],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,29426,29427],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[26,29429,29430],{},[29,29431,29394],{},[19,29433,29434],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,29436,29437],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[72,29439,29441],{"id":29440},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[4752,29443,29444,29447,29450,29453],{},[29,29445,29446],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[29,29448,29449],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[29,29451,29452],{},"微服务架构：每个服务一个容器，灵活组合",[29,29454,29455],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":112,"searchDepth":142,"depth":142,"links":29457},[29458,29459,29460,29461,29462,29463],{"id":29169,"depth":156,"text":29170},{"id":29213,"depth":156,"text":29214},{"id":29229,"depth":156,"text":29230},{"id":29294,"depth":156,"text":29295},{"id":29342,"depth":156,"text":29343},{"id":29440,"depth":156,"text":29441},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":29161,"description":112},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":29470,"title":29471,"body":29472,"description":112,"extension":3687,"meta":30204,"navigation":159,"path":30205,"seo":30206,"stem":30207,"__hash__":30208},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":29473,"toc":30199},[29474,29477,29481,29484,29487,29493,29499,29503,29512,29515,29571,29574,29625,29628,29711,29714,29751,29755,29766,29779,29786,29789,29869,29872,29922,29925,29948,29952,29959,29962,29978,29984,29987,30003,30009,30012,30028,30042,30048,30068,30074,30077,30089,30095,30098,30112,30118,30121,30141,30146,30149,30152,30156,30159,30162,30165,30172,30175,30178,30181,30186,30191,30196],[10,29475,29471],{"id":29476},"_2安装docker",[72,29478,29480],{"id":29479},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,29482,29483],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,29485,29486],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,29488,29489],{},[3989,29490,29491],{"href":29491,"rel":29492},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[27352],[19,29494,29495],{},[3989,29496,29497],{"href":29497,"rel":29498},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[27352],[25485,29500,29502],{"id":29501},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,29504,29505,29506,29511],{},"以下内容根据 ",[3989,29507,29510],{"href":29508,"rel":29509},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[27352],"官方文档"," 修改而来。",[19,29513,29514],{},"如果你过去安装过 docker，先删掉：",[106,29516,29518],{"className":27309,"code":29517,"language":27311,"meta":112,"style":112},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[114,29519,29520],{"__ignoreMap":112},[128,29521,29522,29524,29527,29529,29532,29535,29538,29541,29544,29547,29550,29553,29556,29559,29562,29565,29568],{"class":130,"line":131},[128,29523,2404],{"class":134},[128,29525,29526],{"class":138}," pkg ",[128,29528,549],{"class":134},[128,29530,29531],{"class":176}," docker.io",[128,29533,29534],{"class":176}," docker-doc",[128,29536,29537],{"class":176}," docker-compose",[128,29539,29540],{"class":176}," docker-compose-v2",[128,29542,29543],{"class":176}," podman-docker",[128,29545,29546],{"class":176}," containerd",[128,29548,29549],{"class":176}," runc",[128,29551,29552],{"class":138},"; ",[128,29554,29555],{"class":134},"do",[128,29557,29558],{"class":199}," sudo",[128,29560,29561],{"class":176}," apt-get",[128,29563,29564],{"class":176}," remove",[128,29566,29567],{"class":138}," $pkg; ",[128,29569,29570],{"class":134},"done\n",[19,29572,29573],{},"首先安装依赖和GPG：",[106,29575,29579],{"className":29576,"code":29577,"language":29578,"meta":112,"style":112},"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",[114,29580,29581,29586,29591,29596,29601,29606,29611,29615,29620],{"__ignoreMap":112},[128,29582,29583],{"class":130,"line":131},[128,29584,29585],{},"# Add Docker's official GPG key:\n",[128,29587,29588],{"class":130,"line":142},[128,29589,29590],{},"sudo apt-get update\n",[128,29592,29593],{"class":130,"line":156},[128,29594,29595],{},"sudo apt-get install ca-certificates curl\n",[128,29597,29598],{"class":130,"line":163},[128,29599,29600],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[128,29602,29603],{"class":130,"line":183},[128,29604,29605],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[128,29607,29608],{"class":130,"line":188},[128,29609,29610],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[128,29612,29613],{"class":130,"line":193},[128,29614,160],{"emptyLinePlaceholder":159},[128,29616,29617],{"class":130,"line":206},[128,29618,29619],{},"# 如果上面这行报错就弄下面这行\n",[128,29621,29622],{"class":130,"line":221},[128,29623,29624],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,29626,29627],{},"信任 Docker 的 GPG 公钥并添加仓库：",[106,29629,29631],{"className":27309,"code":29630,"language":27311,"meta":112,"style":112},"# 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",[114,29632,29633,29638,29644,29661,29694],{"__ignoreMap":112},[128,29634,29635],{"class":130,"line":131},[128,29636,29637],{"class":3814},"# Add the repository to Apt sources:\n",[128,29639,29640,29642],{"class":130,"line":142},[128,29641,28612],{"class":166},[128,29643,28165],{"class":166},[128,29645,29646,29649,29652,29655,29658],{"class":130,"line":156},[128,29647,29648],{"class":176},"  \"deb [arch=$(",[128,29650,29651],{"class":199},"dpkg",[128,29653,29654],{"class":166}," --print-architecture",[128,29656,29657],{"class":176},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[128,29659,29660],{"class":166},"\\\n",[128,29662,29663,29666,29668,29670,29673,29676,29678,29680,29683,29685,29687,29690,29692],{"class":130,"line":163},[128,29664,29665],{"class":176},"  \"",[128,29667,28586],{"class":138},[128,29669,4307],{"class":166},[128,29671,29672],{"class":176}," \u002Fetc\u002Fos-release",[128,29674,29675],{"class":138}," && ",[128,29677,28612],{"class":166},[128,29679,13269],{"class":176},[128,29681,29682],{"class":138},"$VERSION_CODENAME",[128,29684,1376],{"class":176},[128,29686,4179],{"class":138},[128,29688,29689],{"class":176},"\" stable\"",[128,29691,28596],{"class":134},[128,29693,28165],{"class":166},[128,29695,29696,29699,29702,29705,29708],{"class":130,"line":183},[128,29697,29698],{"class":199},"  sudo",[128,29700,29701],{"class":176}," tee",[128,29703,29704],{"class":176}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[128,29706,29707],{"class":134}," >",[128,29709,29710],{"class":176}," \u002Fdev\u002Fnull\n",[19,29712,29713],{},"最后安装",[106,29715,29717],{"className":27309,"code":29716,"language":27311,"meta":112,"style":112},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[114,29718,29719,29728],{"__ignoreMap":112},[128,29720,29721,29723,29725],{"class":130,"line":131},[128,29722,28064],{"class":199},[128,29724,29561],{"class":176},[128,29726,29727],{"class":176}," update\n",[128,29729,29730,29732,29734,29736,29739,29742,29745,29748],{"class":130,"line":142},[128,29731,28064],{"class":199},[128,29733,29561],{"class":176},[128,29735,27321],{"class":176},[128,29737,29738],{"class":176}," docker-ce",[128,29740,29741],{"class":176}," docker-ce-cli",[128,29743,29744],{"class":176}," containerd.io",[128,29746,29747],{"class":176}," docker-buildx-plugin",[128,29749,29750],{"class":176}," docker-compose-plugin\n",[25485,29752,29754],{"id":29753},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,29756,29757,29758,29761,29762,29765],{},"查看自己自己包管理工具版本（dnf是 ",[3903,29759,29760],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[3903,29763,29764],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[106,29767,29769],{"className":27309,"code":29768,"language":27311,"meta":112,"style":112},"dnf --version\n",[114,29770,29771],{"__ignoreMap":112},[128,29772,29773,29776],{"class":130,"line":131},[128,29774,29775],{"class":199},"dnf",[128,29777,29778],{"class":166}," --version\n",[19,29780,29505,29781,29785],{},[3989,29782,29510],{"href":29783,"rel":29784},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[27352]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,29787,29788],{},"如果你之前安装过 docker，请先删掉",[106,29790,29792],{"className":27309,"code":29791,"language":27311,"meta":112,"style":112},"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",[114,29793,29794,29808,29815,29822,29829,29836,29843,29850,29857,29864],{"__ignoreMap":112},[128,29795,29796,29798,29801,29803,29806],{"class":130,"line":131},[128,29797,28064],{"class":199},[128,29799,29800],{"class":176}," dnf",[128,29802,29564],{"class":176},[128,29804,29805],{"class":176}," docker",[128,29807,28165],{"class":166},[128,29809,29810,29813],{"class":130,"line":142},[128,29811,29812],{"class":176},"                  docker-client",[128,29814,28165],{"class":166},[128,29816,29817,29820],{"class":130,"line":156},[128,29818,29819],{"class":176},"                  docker-client-latest",[128,29821,28165],{"class":166},[128,29823,29824,29827],{"class":130,"line":163},[128,29825,29826],{"class":176},"                  docker-common",[128,29828,28165],{"class":166},[128,29830,29831,29834],{"class":130,"line":183},[128,29832,29833],{"class":176},"                  docker-latest",[128,29835,28165],{"class":166},[128,29837,29838,29841],{"class":130,"line":188},[128,29839,29840],{"class":176},"                  docker-latest-logrotate",[128,29842,28165],{"class":166},[128,29844,29845,29848],{"class":130,"line":193},[128,29846,29847],{"class":176},"                  docker-logrotate",[128,29849,28165],{"class":166},[128,29851,29852,29855],{"class":130,"line":206},[128,29853,29854],{"class":176},"                  docker-selinux",[128,29856,28165],{"class":166},[128,29858,29859,29862],{"class":130,"line":221},[128,29860,29861],{"class":176},"                  docker-engine-selinux",[128,29863,28165],{"class":166},[128,29865,29866],{"class":130,"line":230},[128,29867,29868],{"class":176},"                  docker-engine\n",[19,29870,29871],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[106,29873,29875],{"className":27309,"code":29874,"language":27311,"meta":112,"style":112},"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",[114,29876,29877,29891,29906],{"__ignoreMap":112},[128,29878,29879,29881,29883,29886,29888],{"class":130,"line":131},[128,29880,28064],{"class":199},[128,29882,29800],{"class":176},[128,29884,29885],{"class":166}," -y",[128,29887,27321],{"class":176},[128,29889,29890],{"class":176}," dnf-plugins-core\n",[128,29892,29893,29895,29897,29900,29903],{"class":130,"line":142},[128,29894,28064],{"class":199},[128,29896,29800],{"class":176},[128,29898,29899],{"class":176}," config-manager",[128,29901,29902],{"class":176}," addrepo",[128,29904,29905],{"class":166}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[128,29907,29908,29910,29913,29916,29919],{"class":130,"line":156},[128,29909,28064],{"class":199},[128,29911,29912],{"class":176}," sed",[128,29914,29915],{"class":166}," -i",[128,29917,29918],{"class":176}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[128,29920,29921],{"class":176}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,29923,29924],{},"最后安装：",[106,29926,29928],{"className":27309,"code":29927,"language":27311,"meta":112,"style":112},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[114,29929,29930],{"__ignoreMap":112},[128,29931,29932,29934,29936,29938,29940,29942,29944,29946],{"class":130,"line":131},[128,29933,28064],{"class":199},[128,29935,29800],{"class":176},[128,29937,27321],{"class":176},[128,29939,29738],{"class":176},[128,29941,29741],{"class":176},[128,29943,29744],{"class":176},[128,29945,29747],{"class":176},[128,29947,29750],{"class":176},[72,29949,29951],{"id":29950},"_22配置环境","2.2.配置环境",[25485,29953,29955,29958],{"id":29954},"_221检查-docker-服务状态",[3903,29956,29957],{},"2.2.1.检查 Docker 服务状态"," ：",[19,29960,29961],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[106,29963,29965],{"className":27309,"code":29964,"language":27311,"meta":112,"style":112},"systemctl status docker\n",[114,29966,29967],{"__ignoreMap":112},[128,29968,29969,29972,29975],{"class":130,"line":131},[128,29970,29971],{"class":199},"systemctl",[128,29973,29974],{"class":176}," status",[128,29976,29977],{"class":176}," docker\n",[25485,29979,29981,29958],{"id":29980},"_222启动-docker-服务",[3903,29982,29983],{},"2.2.2.启动 Docker 服务",[19,29985,29986],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[106,29988,29990],{"className":27309,"code":29989,"language":27311,"meta":112,"style":112},"sudo systemctl start docker\n",[114,29991,29992],{"__ignoreMap":112},[128,29993,29994,29996,29999,30001],{"class":130,"line":131},[128,29995,28064],{"class":199},[128,29997,29998],{"class":176}," systemctl",[128,30000,7750],{"class":176},[128,30002,29977],{"class":176},[25485,30004,30006,29958],{"id":30005},"_223设置-docker-开机自启",[3903,30007,30008],{},"2.2.3.设置 Docker 开机自启",[19,30010,30011],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[106,30013,30015],{"className":27309,"code":30014,"language":27311,"meta":112,"style":112},"sudo systemctl enable docker\n",[114,30016,30017],{"__ignoreMap":112},[128,30018,30019,30021,30023,30026],{"class":130,"line":131},[128,30020,28064],{"class":199},[128,30022,29998],{"class":176},[128,30024,30025],{"class":176}," enable",[128,30027,29977],{"class":176},[25485,30029,30031,17319,30034,17319,30039,29958],{"id":30030},"_224将用户添加到-docker-组",[3903,30032,30033],{},"2.2.4.将用户添加到",[3903,30035,30036],{},[114,30037,30038],{},"docker",[3903,30040,30041],{},"组",[19,30043,30044,30045,30047],{},"使用以下命令将当前用户添加到 ",[114,30046,30038],{}," 组：",[106,30049,30051],{"className":27309,"code":30050,"language":27311,"meta":112,"style":112},"sudo usermod -aG docker $USER\n",[114,30052,30053],{"__ignoreMap":112},[128,30054,30055,30057,30060,30063,30065],{"class":130,"line":131},[128,30056,28064],{"class":199},[128,30058,30059],{"class":176}," usermod",[128,30061,30062],{"class":166}," -aG",[128,30064,29805],{"class":176},[128,30066,30067],{"class":138}," $USER\n",[25485,30069,30071,29958],{"id":30070},"_225退出并重新登录",[3903,30072,30073],{},"2.2.5.退出并重新登录",[19,30075,30076],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[106,30078,30080],{"className":27309,"code":30079,"language":27311,"meta":112,"style":112},"newgrp docker\n",[114,30081,30082],{"__ignoreMap":112},[128,30083,30084,30087],{"class":130,"line":131},[128,30085,30086],{"class":199},"newgrp",[128,30088,29977],{"class":176},[25485,30090,30092,29958],{"id":30091},"_226重新启动-docker-服务如果需要",[3903,30093,30094],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,30096,30097],{},"确保 Docker 服务正在运行，可以使用以下命令：",[106,30099,30100],{"className":27309,"code":29989,"language":27311,"meta":112,"style":112},[114,30101,30102],{"__ignoreMap":112},[128,30103,30104,30106,30108,30110],{"class":130,"line":131},[128,30105,28064],{"class":199},[128,30107,29998],{"class":176},[128,30109,7750],{"class":176},[128,30111,29977],{"class":176},[25485,30113,30115,29958],{"id":30114},"_227重启电脑后检查-docker-服务状态",[3903,30116,30117],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,30119,30120],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[106,30122,30124],{"className":27309,"code":30123,"language":27311,"meta":112,"style":112},"sudo reboot\nsystemctl status docker\n",[114,30125,30126,30133],{"__ignoreMap":112},[128,30127,30128,30130],{"class":130,"line":131},[128,30129,28064],{"class":199},[128,30131,30132],{"class":176}," reboot\n",[128,30134,30135,30137,30139],{"class":130,"line":142},[128,30136,29971],{"class":199},[128,30138,29974],{"class":176},[128,30140,29977],{"class":176},[19,30142,30143],{},[5074,30144],{"alt":112,"src":30145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,30147,30148],{},"第三行显示enabled说明开机自启动成功",[19,30150,30151],{},"按q退出",[72,30153,30155],{"id":30154},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,30157,30158],{},"优先使用linux来使用docker是比较好的",[19,30160,30161],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,30163,30164],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,30166,30167,30168],{},"官方下载安装:",[3989,30169,30170],{"href":30170,"rel":30171},"https:\u002F\u002Fwww.docker.com\u002F",[27352],[19,30173,30174],{},"Windows的Docker显卡直通与USB直通:",[19,30176,30177],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,30179,30180],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,30182,30183],{},[5074,30184],{"alt":112,"src":30185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,30187,30188],{},[5074,30189],{"alt":112,"src":30190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,30192,30193],{},[5074,30194],{"alt":112,"src":30195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[3659,30197,30198],{},"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":112,"searchDepth":142,"depth":142,"links":30200},[30201,30202,30203],{"id":29479,"depth":156,"text":29480},{"id":29950,"depth":156,"text":29951},{"id":30154,"depth":156,"text":30155},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":29471,"description":112},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":30210,"title":30211,"body":30212,"description":30219,"extension":3687,"meta":30912,"navigation":159,"path":30913,"seo":30914,"stem":30915,"__hash__":30916},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":30213,"toc":30906},[30214,30217,30220,30224,30229,30234,30237,30265,30270,30279,30282,30287,30291,30298,30303,30309,30313,30316,30320,30325,30417,30422,30440,30445,30466,30471,30487,30491,30496,30525,30530,30576,30581,30625,30633,30650,30655,30671,30676,30690,30693,30696,30699,30702,30731,30734,30739,30743,30746,30749,30755,30758,30761,30764,30826,30833,30838,30841,30859,30863,30866,30883,30886,30889,30903],[10,30215,30211],{"id":30216},"_3docker直通",[19,30218,30219],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[72,30221,30223],{"id":30222},"_31usb直通","3.1.USB直通",[19,30225,30226],{},[5074,30227],{"alt":112,"src":30228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[26,30230,30231],{},[29,30232,30233],{},"方法一(不是很推荐新手)：",[19,30235,30236],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[106,30238,30240],{"className":27309,"code":30239,"language":27311,"meta":112,"style":112},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[114,30241,30242,30250,30255],{"__ignoreMap":112},[128,30243,30244,30247],{"class":130,"line":131},[128,30245,30246],{"class":199},"ls",[128,30248,30249],{"class":176}," \u002Fdev\n",[128,30251,30252],{"class":130,"line":142},[128,30253,30254],{"class":3814},"#例如\n",[128,30256,30257,30260,30262],{"class":130,"line":156},[128,30258,30259],{"class":138},"--device",[128,30261,270],{"class":134},[128,30263,30264],{"class":176},"\u002Fdev\u002Ftty_USB0\n",[26,30266,30267],{"start":142},[29,30268,30269],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[106,30271,30273],{"className":27309,"code":30272,"language":27311,"meta":112,"style":112},"--privileged\n",[114,30274,30275],{"__ignoreMap":112},[128,30276,30277],{"class":130,"line":131},[128,30278,30272],{"class":199},[19,30280,30281],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,30283,30284],{},[5074,30285],{"alt":112,"src":30286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[72,30288,30290],{"id":30289},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,30292,30293,30294,30297],{},"NVIDIA Container Toolkit使用户 ",[3903,30295,30296],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,30299,30300],{},[5074,30301],{"alt":112,"src":30302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,30304,30305],{},[3989,30306,30307],{"href":30307,"rel":30308},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[27352],[25485,30310,30312],{"id":30311},"_321安装","3.2.1.安装",[19,30314,30315],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[26397,30317,30319],{"id":30318},"_3211ubuntu","3.2.1.1.Ubuntu",[26,30321,30322],{},[29,30323,30324],{},"配置存储库 并更新",[106,30326,30328],{"className":27309,"code":30327,"language":27311,"meta":112,"style":112},"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",[114,30329,30330,30359,30379,30391,30403,30409],{"__ignoreMap":112},[128,30331,30332,30335,30338,30341,30343,30345,30348,30351,30354,30357],{"class":130,"line":131},[128,30333,30334],{"class":199},"curl",[128,30336,30337],{"class":166}," -fsSL",[128,30339,30340],{"class":176}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[128,30342,28596],{"class":134},[128,30344,29558],{"class":199},[128,30346,30347],{"class":176}," gpg",[128,30349,30350],{"class":166}," --dearmor",[128,30352,30353],{"class":166}," -o",[128,30355,30356],{"class":176}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[128,30358,28165],{"class":166},[128,30360,30361,30364,30366,30369,30372,30375,30377],{"class":130,"line":142},[128,30362,30363],{"class":138},"  && ",[128,30365,30334],{"class":199},[128,30367,30368],{"class":166}," -s",[128,30370,30371],{"class":166}," -L",[128,30373,30374],{"class":176}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[128,30376,28596],{"class":134},[128,30378,28165],{"class":166},[128,30380,30381,30384,30387,30389],{"class":130,"line":156},[128,30382,30383],{"class":199},"    sed",[128,30385,30386],{"class":176}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[128,30388,28596],{"class":134},[128,30390,28165],{"class":166},[128,30392,30393,30396,30398,30401],{"class":130,"line":163},[128,30394,30395],{"class":199},"    sudo",[128,30397,29701],{"class":176},[128,30399,30400],{"class":176}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[128,30402,28165],{"class":166},[128,30404,30405,30407],{"class":130,"line":183},[128,30406,30363],{"class":138},[128,30408,29660],{"class":166},[128,30410,30411,30413,30415],{"class":130,"line":188},[128,30412,30395],{"class":199},[128,30414,29561],{"class":176},[128,30416,29727],{"class":176},[26,30418,30419],{"start":142},[29,30420,30421],{},"安装nvidia-docker2",[106,30423,30425],{"className":27309,"code":30424,"language":27311,"meta":112,"style":112},"sudo apt-get install -y nvidia-docker2\n",[114,30426,30427],{"__ignoreMap":112},[128,30428,30429,30431,30433,30435,30437],{"class":130,"line":131},[128,30430,28064],{"class":199},[128,30432,29561],{"class":176},[128,30434,27321],{"class":176},[128,30436,29885],{"class":166},[128,30438,30439],{"class":176}," nvidia-docker2\n",[26,30441,30442],{"start":156},[29,30443,30444],{},"使用nvidia-ctk命令配置container runtime",[106,30446,30448],{"className":27309,"code":30447,"language":27311,"meta":112,"style":112},"sudo nvidia-ctk runtime configure --runtime=docker\n",[114,30449,30450],{"__ignoreMap":112},[128,30451,30452,30454,30457,30460,30463],{"class":130,"line":131},[128,30453,28064],{"class":199},[128,30455,30456],{"class":176}," nvidia-ctk",[128,30458,30459],{"class":176}," runtime",[128,30461,30462],{"class":176}," configure",[128,30464,30465],{"class":166}," --runtime=docker\n",[26,30467,30468],{"start":163},[29,30469,30470],{},"重启docker服务:",[106,30472,30474],{"className":27309,"code":30473,"language":27311,"meta":112,"style":112},"sudo systemctl restart docker\n",[114,30475,30476],{"__ignoreMap":112},[128,30477,30478,30480,30482,30485],{"class":130,"line":131},[128,30479,28064],{"class":199},[128,30481,29998],{"class":176},[128,30483,30484],{"class":176}," restart",[128,30486,29977],{"class":176},[26397,30488,30490],{"id":30489},"_3212fedora","3.2.1.2.Fedora",[26,30492,30493],{},[29,30494,30495],{},"配置存储库",[106,30497,30499],{"className":27309,"code":30498,"language":27311,"meta":112,"style":112},"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",[114,30500,30501,30516],{"__ignoreMap":112},[128,30502,30503,30505,30507,30509,30512,30514],{"class":130,"line":131},[128,30504,30334],{"class":199},[128,30506,30368],{"class":166},[128,30508,30371],{"class":166},[128,30510,30511],{"class":176}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[128,30513,28596],{"class":134},[128,30515,28165],{"class":166},[128,30517,30518,30520,30522],{"class":130,"line":142},[128,30519,28064],{"class":199},[128,30521,29701],{"class":176},[128,30523,30524],{"class":176}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[26,30526,30527],{"start":142},[29,30528,30529],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[106,30531,30533],{"className":27309,"code":30532,"language":27311,"meta":112,"style":112},"# 如果是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",[114,30534,30535,30540,30554,30558,30563],{"__ignoreMap":112},[128,30536,30537],{"class":130,"line":131},[128,30538,30539],{"class":3814},"# 如果是RHEL或者Rocky（DNF4）\n",[128,30541,30542,30544,30546,30548,30551],{"class":130,"line":142},[128,30543,28064],{"class":199},[128,30545,29800],{"class":176},[128,30547,29899],{"class":176},[128,30549,30550],{"class":166}," --add-repo",[128,30552,30553],{"class":176}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[128,30555,30556],{"class":130,"line":156},[128,30557,160],{"emptyLinePlaceholder":159},[128,30559,30560],{"class":130,"line":163},[128,30561,30562],{"class":3814},"# 如果是Feodra41+（DNF5）\n",[128,30564,30565,30567,30569,30571,30573],{"class":130,"line":183},[128,30566,28064],{"class":199},[128,30568,29800],{"class":176},[128,30570,29899],{"class":176},[128,30572,29902],{"class":176},[128,30574,30575],{"class":166}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[26,30577,30578],{"start":156},[29,30579,30580],{},"安装NVIDIA Container Toolki包",[106,30582,30584],{"className":27309,"code":30583,"language":27311,"meta":112,"style":112},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[114,30585,30586,30591,30604,30608,30613],{"__ignoreMap":112},[128,30587,30588],{"class":130,"line":131},[128,30589,30590],{"class":3814},"# 如果是RHEL或者Rocky\n",[128,30592,30593,30595,30597,30599,30601],{"class":130,"line":142},[128,30594,28064],{"class":199},[128,30596,29800],{"class":176},[128,30598,27321],{"class":176},[128,30600,29885],{"class":166},[128,30602,30603],{"class":176}," nvidia-container-toolkit\n",[128,30605,30606],{"class":130,"line":156},[128,30607,160],{"emptyLinePlaceholder":159},[128,30609,30610],{"class":130,"line":163},[128,30611,30612],{"class":3814},"# 如果是Fedora\n",[128,30614,30615,30617,30619,30621,30623],{"class":130,"line":183},[128,30616,28064],{"class":199},[128,30618,29800],{"class":176},[128,30620,27321],{"class":176},[128,30622,29885],{"class":166},[128,30624,30603],{"class":176},[26,30626,30627],{"start":163},[29,30628,30629,30630,30632],{},"安装nvidia-docker2 ： 在Fedora上使用",[114,30631,29775],{},"进行安装",[106,30634,30636],{"className":27309,"code":30635,"language":27311,"meta":112,"style":112},"sudo dnf install -y nvidia-docker2\n",[114,30637,30638],{"__ignoreMap":112},[128,30639,30640,30642,30644,30646,30648],{"class":130,"line":131},[128,30641,28064],{"class":199},[128,30643,29800],{"class":176},[128,30645,27321],{"class":176},[128,30647,29885],{"class":166},[128,30649,30439],{"class":176},[26,30651,30652],{"start":183},[29,30653,30654],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[106,30656,30657],{"className":27309,"code":30447,"language":27311,"meta":112,"style":112},[114,30658,30659],{"__ignoreMap":112},[128,30660,30661,30663,30665,30667,30669],{"class":130,"line":131},[128,30662,28064],{"class":199},[128,30664,30456],{"class":176},[128,30666,30459],{"class":176},[128,30668,30462],{"class":176},[128,30670,30465],{"class":166},[26,30672,30673],{"start":188},[29,30674,30675],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[106,30677,30678],{"className":27309,"code":30473,"language":27311,"meta":112,"style":112},[114,30679,30680],{"__ignoreMap":112},[128,30681,30682,30684,30686,30688],{"class":130,"line":131},[128,30683,28064],{"class":199},[128,30685,29998],{"class":176},[128,30687,30484],{"class":176},[128,30689,29977],{"class":176},[19,30691,30692],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,30694,30695],{},"方法：",[19,30697,30698],{},"1️⃣nvidia-smi",[19,30700,30701],{},"2️⃣运行nvidia cuda 容器进行测试",[106,30703,30705],{"className":27309,"code":30704,"language":27311,"meta":112,"style":112},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[114,30706,30707],{"__ignoreMap":112},[128,30708,30709,30711,30713,30716,30719,30722,30725,30728],{"class":130,"line":131},[128,30710,28064],{"class":199},[128,30712,29805],{"class":176},[128,30714,30715],{"class":176}," run",[128,30717,30718],{"class":166}," --rm",[128,30720,30721],{"class":166}," --gpus",[128,30723,30724],{"class":176}," all",[128,30726,30727],{"class":176}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[128,30729,30730],{"class":176}," nvidia-smi\n",[19,30732,30733],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,30735,30736],{},[5074,30737],{"alt":112,"src":30738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[72,30740,30742],{"id":30741},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,30744,30745],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,30747,30748],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,30750,30751],{},[3989,30752,30753],{"href":30753,"rel":30754},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[27352],[19,30756,30757],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,30759,30760],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,30762,30763],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[3891,30765,30766,30782],{},[3894,30767,30768],{},[3897,30769,30770,30773,30776,30779],{},[3900,30771,30772],{"align":27223},"镜像类型",[3900,30774,30775],{"align":27223},"适用场景",[3900,30777,30778],{"align":27223},"示例标签",[3900,30780,30781],{"align":27223},"大小",[3938,30783,30784,30798,30812],{},[3897,30785,30786,30789,30792,30795],{},[3943,30787,30788],{"align":27223},"base",[3943,30790,30791],{"align":27223},"仅需 CUDA 运行时库",[3943,30793,30794],{"align":27223},"12.4.0-base-ubuntu22.04",[3943,30796,30797],{"align":27223},"~240MB",[3897,30799,30800,30803,30806,30809],{},[3943,30801,30802],{"align":27223},"runtime",[3943,30804,30805],{"align":27223},"部署编译后的应用（含数学库）",[3943,30807,30808],{"align":27223},"12.4.0-runtime-ubuntu22.04",[3943,30810,30811],{"align":27223},"~2GB",[3897,30813,30814,30817,30820,30823],{},[3943,30815,30816],{"align":27223},"devel",[3943,30818,30819],{"align":27223},"开发环境（含编译工具）",[3943,30821,30822],{"align":27223},"12.4.0-devel-ubuntu22.04",[3943,30824,30825],{"align":27223},"~3GB",[19,30827,30828,30829,30832],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[114,30830,30831],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,30834,30835],{},[5074,30836],{"alt":112,"src":30837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,30839,30840],{},"在dockerfile里就可以开头这么写：",[106,30842,30844],{"className":27309,"code":30843,"language":27311,"meta":112,"style":112},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[114,30845,30846,30851],{"__ignoreMap":112},[128,30847,30848],{"class":130,"line":131},[128,30849,30850],{"class":3814},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[128,30852,30853,30856],{"class":130,"line":142},[128,30854,30855],{"class":199},"FROM",[128,30857,30858],{"class":176}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[72,30860,30862],{"id":30861},"_34配置以太网","3.4.配置以太网",[19,30864,30865],{},"指定网络模式",[106,30867,30869],{"className":27309,"code":30868,"language":27311,"meta":112,"style":112},"--net=host \\\n",[114,30870,30871],{"__ignoreMap":112},[128,30872,30873,30876,30878,30881],{"class":130,"line":131},[128,30874,30875],{"class":138},"--net",[128,30877,270],{"class":134},[128,30879,30880],{"class":176},"host",[128,30882,28165],{"class":199},[19,30884,30885],{},"启动参数里加上这行即可。具体在下方",[19,30887,30888],{},"--net选项：指定网络模式，该选项有以下参数可选：",[4752,30890,30891,30894,30897,30900],{},[29,30892,30893],{},"--net=bridge:默认选项，表示连接到默认的网桥",[29,30895,30896],{},"--net=host:容器使用宿主机的网络",[29,30898,30899],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[29,30901,30902],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[3659,30904,30905],{},"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":112,"searchDepth":142,"depth":142,"links":30907},[30908,30909,30910,30911],{"id":30222,"depth":156,"text":30223},{"id":30289,"depth":156,"text":30290},{"id":30741,"depth":156,"text":30742},{"id":30861,"depth":156,"text":30862},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":30211,"description":30219},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":30918,"title":30919,"body":30920,"description":30927,"extension":3687,"meta":30933,"navigation":159,"path":30934,"seo":30935,"stem":30936,"__hash__":30937},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":30921,"toc":30931},[30922,30925,30928],[10,30923,30919],{"id":30924},"_4dockerhub换源",[19,30926,30927],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,30929,30930],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":112,"searchDepth":142,"depth":142,"links":30932},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":30919,"description":30927},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":30939,"title":30940,"body":30941,"description":112,"extension":3687,"meta":31952,"navigation":159,"path":31953,"seo":31954,"stem":31955,"__hash__":31956},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":30942,"toc":31947},[30943,30946,30950,30956,30960,30963,31303,31306,31309,31312,31317,31322,31325,31328,31331,31334,31353,31356,31367,31373,31555,31565,31581,31844,31846,31870,31885,31894,31944],[10,30944,30940],{"id":30945},"_5docker命令学习",[72,30947,30949],{"id":30948},"_51参考文档","5.1.参考文档",[19,30951,30952],{},[3989,30953,30954],{"href":30954,"rel":30955},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[27352],[72,30957,30959],{"id":30958},"_52常用命令","5.2.常用命令",[19,30961,30962],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[3891,30964,30965,30978],{},[3894,30966,30967],{},[3897,30968,30969,30972,30975],{},[3900,30970,30971],{"align":27223},"命令",[3900,30973,30974],{"align":27223},"描述",[3900,30976,30977],{"align":27223},"示例",[3938,30979,30980,30991,31002,31013,31024,31035,31046,31057,31067,31078,31089,31100,31110,31121,31132,31143,31153,31163,31173,31183,31194,31205,31216,31227,31238,31249,31259,31270,31281,31292],{},[3897,30981,30982,30985,30988],{},[3943,30983,30984],{"align":27223},"docker run",[3943,30986,30987],{"align":27223},"创建并启动一个新的容器。",[3943,30989,30990],{"align":27223},"docker run -it ubuntu bash",[3897,30992,30993,30996,30999],{},[3943,30994,30995],{"align":27223},"docker build",[3943,30997,30998],{"align":27223},"通过指定的 Dockerfile 创建一个新的镜像。",[3943,31000,31001],{"align":27223},"docker build -t myimage .",[3897,31003,31004,31007,31010],{},[3943,31005,31006],{"align":27223},"docker pull",[3943,31008,31009],{"align":27223},"从 Docker 仓库拉取镜像。",[3943,31011,31012],{"align":27223},"docker pull ubuntu",[3897,31014,31015,31018,31021],{},[3943,31016,31017],{"align":27223},"docker push",[3943,31019,31020],{"align":27223},"将本地镜像推送到 Docker 仓库。",[3943,31022,31023],{"align":27223},"docker push myimage",[3897,31025,31026,31029,31032],{},[3943,31027,31028],{"align":27223},"docker stop",[3943,31030,31031],{"align":27223},"停止一个正在运行的容器。",[3943,31033,31034],{"align":27223},"docker stop container_id",[3897,31036,31037,31040,31043],{},[3943,31038,31039],{"align":27223},"docker start",[3943,31041,31042],{"align":27223},"启动一个已经存在的容器。",[3943,31044,31045],{"align":27223},"docker start container_id",[3897,31047,31048,31051,31054],{},[3943,31049,31050],{"align":27223},"docker restart",[3943,31052,31053],{"align":27223},"重新启动容器。",[3943,31055,31056],{"align":27223},"docker restart container_id",[3897,31058,31059,31062,31065],{},[3943,31060,31061],{"align":27223},"docker ps",[3943,31063,31064],{"align":27223},"列出当前正在运行的容器。",[3943,31066,31061],{"align":27223},[3897,31068,31069,31072,31075],{},[3943,31070,31071],{"align":27223},"docker rm",[3943,31073,31074],{"align":27223},"删除一个或多个停止的容器。",[3943,31076,31077],{"align":27223},"docker rm container_id",[3897,31079,31080,31083,31086],{},[3943,31081,31082],{"align":27223},"docker exec",[3943,31084,31085],{"align":27223},"在一个正在运行的容器中执行命令。",[3943,31087,31088],{"align":27223},"docker exec -it container_id bash",[3897,31090,31091,31094,31097],{},[3943,31092,31093],{"align":27223},"docker logs",[3943,31095,31096],{"align":27223},"查看容器的日志输出。",[3943,31098,31099],{"align":27223},"docker logs container_id",[3897,31101,31102,31105,31108],{},[3943,31103,31104],{"align":27223},"docker images",[3943,31106,31107],{"align":27223},"列出本地所有镜像。",[3943,31109,31104],{"align":27223},[3897,31111,31112,31115,31118],{},[3943,31113,31114],{"align":27223},"docker rmi",[3943,31116,31117],{"align":27223},"删除一个或多个镜像。",[3943,31119,31120],{"align":27223},"docker rmi myimage",[3897,31122,31123,31126,31129],{},[3943,31124,31125],{"align":27223},"docker network",[3943,31127,31128],{"align":27223},"管理 Docker 网络。",[3943,31130,31131],{"align":27223},"docker network ls",[3897,31133,31134,31137,31140],{},[3943,31135,31136],{"align":27223},"docker volume",[3943,31138,31139],{"align":27223},"管理 Docker 数据卷。",[3943,31141,31142],{"align":27223},"docker volume ls",[3897,31144,31145,31148,31151],{},[3943,31146,31147],{"align":27223},"docker-compose up",[3943,31149,31150],{"align":27223},"启动 docker-compose.yml 中定义的所有服务。",[3943,31152,31147],{"align":27223},[3897,31154,31155,31158,31161],{},[3943,31156,31157],{"align":27223},"docker-compose down",[3943,31159,31160],{"align":27223},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[3943,31162,31157],{"align":27223},[3897,31164,31165,31168,31171],{},[3943,31166,31167],{"align":27223},"docker info",[3943,31169,31170],{"align":27223},"显示 Docker 系统的详细信息。",[3943,31172,31167],{"align":27223},[3897,31174,31175,31178,31181],{},[3943,31176,31177],{"align":27223},"docker stats",[3943,31179,31180],{"align":27223},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[3943,31182,31177],{"align":27223},[3897,31184,31185,31188,31191],{},[3943,31186,31187],{"align":27223},"docker inspect",[3943,31189,31190],{"align":27223},"查看容器或镜像的详细信息（JSON 格式）。",[3943,31192,31193],{"align":27223},"docker inspect container_id",[3897,31195,31196,31199,31202],{},[3943,31197,31198],{"align":27223},"docker save",[3943,31200,31201],{"align":27223},"将一个镜像保存为 tar 文件。",[3943,31203,31204],{"align":27223},"docker save -o myimage.tar myimage",[3897,31206,31207,31210,31213],{},[3943,31208,31209],{"align":27223},"docker load",[3943,31211,31212],{"align":27223},"从 tar 文件中加载镜像。",[3943,31214,31215],{"align":27223},"docker load -i myimage.tar",[3897,31217,31218,31221,31224],{},[3943,31219,31220],{"align":27223},"docker tag",[3943,31222,31223],{"align":27223},"为镜像添加标签（tag）。",[3943,31225,31226],{"align":27223},"docker tag myimage myimage:v1",[3897,31228,31229,31232,31235],{},[3943,31230,31231],{"align":27223},"docker buildx build",[3943,31233,31234],{"align":27223},"使用 Buildx 构建多架构镜像。",[3943,31236,31237],{"align":27223},"docker buildx build -t myimage .",[3897,31239,31240,31243,31246],{},[3943,31241,31242],{"align":27223},"docker buildx create",[3943,31244,31245],{"align":27223},"创建一个新的 Buildx 构建实例。",[3943,31247,31248],{"align":27223},"docker buildx create –use",[3897,31250,31251,31254,31257],{},[3943,31252,31253],{"align":27223},"docker buildx ls",[3943,31255,31256],{"align":27223},"列出所有可用的 Buildx 构建实例。",[3943,31258,31253],{"align":27223},[3897,31260,31261,31264,31267],{},[3943,31262,31263],{"align":27223},"docker buildx use",[3943,31265,31266],{"align":27223},"设置当前的 Buildx 构建实例。",[3943,31268,31269],{"align":27223},"docker buildx use mybuilder",[3897,31271,31272,31275,31278],{},[3943,31273,31274],{"align":27223},"docker buildx bake",[3943,31276,31277],{"align":27223},"使用 Bake 文件批量构建镜像。",[3943,31279,31280],{"align":27223},"docker buildx bake -f bake.hcl",[3897,31282,31283,31286,31289],{},[3943,31284,31285],{"align":27223},"docker buildx build –push",[3943,31287,31288],{"align":27223},"构建镜像并推送到镜像仓库。",[3943,31290,31291],{"align":27223},"docker buildx build –push -t myimage .",[3897,31293,31294,31297,31300],{},[3943,31295,31296],{"align":27223},"docker buildx build –platform",[3943,31298,31299],{"align":27223},"构建镜像并为多个平台生成支持。",[3943,31301,31302],{"align":27223},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,31304,31305],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,31307,31308],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,31310,31311],{},"docker images 可以查看已经下载的镜像",[19,31313,31314],{},[5074,31315],{"alt":112,"src":31316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,31318,31319],{},[3903,31320,31321],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,31323,31324],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,31326,31327],{},"docker container logs 查看容器日志",[19,31329,31330],{},"docker top 查看容器里的进程",[19,31332,31333],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[106,31335,31337],{"className":27309,"code":31336,"language":27311,"meta":112,"style":112},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[114,31338,31339],{"__ignoreMap":112},[128,31340,31341,31344,31347,31350],{"class":130,"line":131},[128,31342,31343],{"class":199},"如：docker",[128,31345,31346],{"class":176}," cp",[128,31348,31349],{"class":176}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[128,31351,31352],{"class":176}," \u002Fmydata\u002Fnginx\n",[19,31354,31355],{},"docker run时在启动容器的时候会有几个常用的选项：",[4752,31357,31358,31361,31364],{},[29,31359,31360],{},"-d选项：表示后台运行",[29,31362,31363],{},"-P选项：随机端口映射",[29,31365,31366],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[72,31368,31370],{"id":31369},"_53run命令的参数非常重要",[3903,31371,31372],{},"5.3.run命令的参数（非常重要）",[3891,31374,31375,31388],{},[3894,31376,31377],{},[3897,31378,31379,31382,31385],{},[3900,31380,31381],{"align":27223},"参数\u002F配置",[3900,31383,31384],{"align":27223},"功能说明",[3900,31386,31387],{"align":27223},"重要性与参考依据",[3938,31389,31390,31401,31412,31423,31434,31445,31456,31467,31478,31489,31500,31511,31522,31533,31544],{},[3897,31391,31392,31395,31398],{},[3943,31393,31394],{"align":27223},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[3943,31396,31397],{"align":27223},"指定容器名称，便于后续管理",[3943,31399,31400],{"align":27223},"替代随机生成的容器名。",[3897,31402,31403,31406,31409],{},[3943,31404,31405],{"align":27223},"–gpus all",[3943,31407,31408],{"align":27223},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[3943,31410,31411],{"align":27223},"用于CUDA加速等GPU依赖任务。",[3897,31413,31414,31417,31420],{},[3943,31415,31416],{"align":27223},"-e NVIDIA_DRIVER_CAPABILITIES=all",[3943,31418,31419],{"align":27223},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[3943,31421,31422],{"align":27223},"确保容器内GPU功能完整67。",[3897,31424,31425,31428,31431],{},[3943,31426,31427],{"align":27223},"-dit",[3943,31429,31430],{"align":27223},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[3943,31432,31433],{"align":27223},"允许容器在后台运行并支持交互操作。",[3897,31435,31436,31439,31442],{},[3943,31437,31438],{"align":27223},"–privileged",[3943,31440,31441],{"align":27223},"赋予容器完全主机权限（可访问设备、内核模块等）",[3943,31443,31444],{"align":27223},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[3897,31446,31447,31450,31453],{},[3943,31448,31449],{"align":27223},"–net=host",[3943,31451,31452],{"align":27223},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[3943,31454,31455],{"align":27223},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[3897,31457,31458,31461,31464],{},[3943,31459,31460],{"align":27223},"–group-add audio–group-add video–group-add dialout",[3943,31462,31463],{"align":27223},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[3943,31465,31466],{"align":27223},"避免权限问题（如避免无法调用摄像头、麦克风）。",[3897,31468,31469,31472,31475],{},[3943,31470,31471],{"align":27223},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[3943,31473,31474],{"align":27223},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[3943,31476,31477],{"align":27223},"支持容器内运行图形界面应用（如OpenCV可视化）。",[3897,31479,31480,31483,31486],{},[3943,31481,31482],{"align":27223},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[3943,31484,31485],{"align":27223},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[3943,31487,31488],{"align":27223},"实现容器内图形显示。",[3897,31490,31491,31494,31497],{},[3943,31492,31493],{"align":27223},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[3943,31495,31496],{"align":27223},"挂载X11认证文件（只读）",[3943,31498,31499],{"align":27223},"确保容器有权连接宿主机显示服务。",[3897,31501,31502,31505,31508],{},[3943,31503,31504],{"align":27223},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[3943,31506,31507],{"align":27223},"挂载Wayland显示协议相关目录",[3943,31509,31510],{"align":27223},"支持Wayland协议的图形显示。",[3897,31512,31513,31516,31519],{},[3943,31514,31515],{"align":27223},"–ulimit nofile=1024:524288",[3943,31517,31518],{"align":27223},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[3943,31520,31521],{"align":27223},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[3897,31523,31524,31527,31530],{},[3943,31525,31526],{"align":27223},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[3943,31528,31529],{"align":27223},"挂载宿主机用户目录到容器内同名路径",[3943,31531,31532],{"align":27223},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[3897,31534,31535,31538,31541],{},[3943,31536,31537],{"align":27223},"-w \u002Fhome\u002Ftungchiahui",[3943,31539,31540],{"align":27223},"设置容器启动后的默认工作目录",[3943,31542,31543],{"align":27223},"直接进入项目路径，方便执行命令2324。",[3897,31545,31546,31549,31552],{},[3943,31547,31548],{"align":27223},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[3943,31550,31551],{"align":27223},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[3943,31553,31554],{"align":27223},"提供预配置的深度学习与机器人开发环境。",[19,31556,31557,31558,31560,31561,31564],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[114,31559,28064],{},"加不加",[114,31562,31563],{},"sudo -E","都无所谓。",[19,31566,31567,31568,31570,31571,31573,31574,31577,31578,31580],{},"用户已经被加到docker组了，不用",[114,31569,28064],{},"也行跑，其次，",[114,31572,28064],{},"运行的话，你的",[114,31575,31576],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[114,31579,31576],{},"更不可能变了。",[106,31582,31584],{"className":27309,"code":31583,"language":27311,"meta":112,"style":112},"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",[114,31585,31586,31599,31609,31619,31631,31638,31645,31652,31662,31671,31680,31694,31706,31718,31727,31737,31746,31761,31794,31821,31832,31839],{"__ignoreMap":112},[128,31587,31588,31590,31592,31594,31597],{"class":130,"line":131},[128,31589,28064],{"class":199},[128,31591,29805],{"class":176},[128,31593,30715],{"class":176},[128,31595,31596],{"class":166}," --name=ros_opencv_cuda",[128,31598,28165],{"class":166},[128,31600,31601,31604,31607],{"class":130,"line":142},[128,31602,31603],{"class":138},"--gpus ",[128,31605,31606],{"class":176},"all",[128,31608,28165],{"class":166},[128,31610,31611,31614,31617],{"class":130,"line":156},[128,31612,31613],{"class":138},"-e ",[128,31615,31616],{"class":176},"NVIDIA_DRIVER_CAPABILITIES=all",[128,31618,28165],{"class":166},[128,31620,31621,31623,31626,31629],{"class":130,"line":163},[128,31622,31613],{"class":138},[128,31624,31625],{"class":176},"DISPLAY=",[128,31627,31628],{"class":138},"$DISPLAY ",[128,31630,29660],{"class":166},[128,31632,31633,31636],{"class":130,"line":183},[128,31634,31635],{"class":138},"-dit ",[128,31637,29660],{"class":166},[128,31639,31640,31643],{"class":130,"line":188},[128,31641,31642],{"class":138},"--privileged ",[128,31644,29660],{"class":166},[128,31646,31647,31650],{"class":130,"line":193},[128,31648,31649],{"class":138},"--net=host ",[128,31651,29660],{"class":166},[128,31653,31654,31657,31660],{"class":130,"line":206},[128,31655,31656],{"class":138},"--group-add ",[128,31658,31659],{"class":176},"audio",[128,31661,28165],{"class":166},[128,31663,31664,31666,31669],{"class":130,"line":221},[128,31665,31656],{"class":138},[128,31667,31668],{"class":176},"video",[128,31670,28165],{"class":166},[128,31672,31673,31675,31678],{"class":130,"line":230},[128,31674,31656],{"class":138},[128,31676,31677],{"class":176},"dialout",[128,31679,28165],{"class":166},[128,31681,31682,31684,31687,31689,31692],{"class":130,"line":235},[128,31683,31613],{"class":138},[128,31685,31686],{"class":176},"XAUTHORITY=",[128,31688,31576],{"class":138},[128,31690,31691],{"class":176},"\u002F.Xauthority",[128,31693,28165],{"class":166},[128,31695,31696,31698,31701,31704],{"class":130,"line":244},[128,31697,31613],{"class":138},[128,31699,31700],{"class":176},"WAYLAND_DISPLAY=",[128,31702,31703],{"class":138},"$WAYLAND_DISPLAY ",[128,31705,29660],{"class":166},[128,31707,31708,31710,31713,31716],{"class":130,"line":287},[128,31709,31613],{"class":138},[128,31711,31712],{"class":176},"XDG_RUNTIME_DIR=",[128,31714,31715],{"class":138},"$XDG_RUNTIME_DIR ",[128,31717,29660],{"class":166},[128,31719,31720,31722,31725],{"class":130,"line":301},[128,31721,31613],{"class":138},[128,31723,31724],{"class":176},"QT_QPA_PLATFORM=xcb",[128,31726,28165],{"class":166},[128,31728,31729,31732,31735],{"class":130,"line":310},[128,31730,31731],{"class":138},"-v ",[128,31733,31734],{"class":176},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[128,31736,28165],{"class":166},[128,31738,31739,31741,31744],{"class":130,"line":323},[128,31740,31731],{"class":138},[128,31742,31743],{"class":176},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[128,31745,28165],{"class":166},[128,31747,31748,31751,31754,31756,31759],{"class":130,"line":330},[128,31749,31750],{"class":138},"-v $HOME",[128,31752,31753],{"class":176},"\u002F.Xauthority:",[128,31755,31576],{"class":138},[128,31757,31758],{"class":176},"\u002F.Xauthority:ro",[128,31760,28165],{"class":166},[128,31762,31763,31765,31768,31770,31773,31776,31778,31781,31783,31785,31787,31789,31792],{"class":130,"line":335},[128,31764,31731],{"class":138},[128,31766,31767],{"class":176},"\u002Frun\u002Fuser\u002F",[128,31769,28586],{"class":138},[128,31771,31772],{"class":199},"id",[128,31774,31775],{"class":166}," -u",[128,31777,4179],{"class":138},[128,31779,31780],{"class":176},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[128,31782,28586],{"class":138},[128,31784,31772],{"class":199},[128,31786,31775],{"class":166},[128,31788,4179],{"class":138},[128,31790,31791],{"class":176},"\u002Fwayland-0",[128,31793,28165],{"class":166},[128,31795,31796,31798,31800,31802,31804,31806,31808,31811,31813,31815,31817,31819],{"class":130,"line":340},[128,31797,31731],{"class":138},[128,31799,31767],{"class":176},[128,31801,28586],{"class":138},[128,31803,31772],{"class":199},[128,31805,31775],{"class":166},[128,31807,4179],{"class":138},[128,31809,31810],{"class":176},":\u002Frun\u002Fuser\u002F",[128,31812,28586],{"class":138},[128,31814,31772],{"class":199},[128,31816,31775],{"class":166},[128,31818,276],{"class":138},[128,31820,29660],{"class":166},[128,31822,31823,31825,31827,31830],{"class":130,"line":351},[128,31824,31750],{"class":138},[128,31826,4607],{"class":176},[128,31828,31829],{"class":138},"$HOME ",[128,31831,29660],{"class":166},[128,31833,31834,31837],{"class":130,"line":384},[128,31835,31836],{"class":138},"-w $HOME ",[128,31838,29660],{"class":166},[128,31840,31841],{"class":130,"line":414},[128,31842,31843],{"class":138},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,31845,12571],{},[26,31847,31848,31856,31859,31862],{},[29,31849,31850,17319,31852,31855],{},[114,31851,31616],{},[114,31853,31854],{},"--gpus all","没有英伟达显卡请注释。",[29,31857,31858],{},"--name后面请自己为容器起名。",[29,31860,31861],{},"最后一行仓库名称请你自己找对应的镜像填上。",[29,31863,31864,31865,1842],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[27040,31866,31867],{},[3903,31868,31869],{},"请不要加",[106,31871,31873],{"className":27309,"code":31872,"language":27311,"meta":112,"style":112},"--ulimit nofile=1024:524288 \\\n",[114,31874,31875],{"__ignoreMap":112},[128,31876,31877,31880,31883],{"class":130,"line":131},[128,31878,31879],{"class":199},"--ulimit",[128,31881,31882],{"class":176}," nofile=1024:524288",[128,31884,28165],{"class":166},[19,31886,31887,31888,31893],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[27040,31889,31890],{},[3903,31891,31892],{},"不建议","**.**",[106,31895,31897],{"className":27309,"code":31896,"language":27311,"meta":112,"style":112},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[114,31898,31899,31926,31935],{"__ignoreMap":112},[128,31900,31901,31904,31907,31909,31911,31913,31915,31917,31919,31922,31924],{"class":130,"line":131},[128,31902,31903],{"class":199},"--user",[128,31905,31906],{"class":138}," $(",[128,31908,31772],{"class":199},[128,31910,31775],{"class":166},[128,31912,4179],{"class":138},[128,31914,4607],{"class":176},[128,31916,28586],{"class":138},[128,31918,31772],{"class":199},[128,31920,31921],{"class":166}," -g",[128,31923,276],{"class":138},[128,31925,29660],{"class":166},[128,31927,31928,31930,31933],{"class":130,"line":142},[128,31929,31731],{"class":138},[128,31931,31932],{"class":176},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[128,31934,28165],{"class":166},[128,31936,31937,31939,31942],{"class":130,"line":156},[128,31938,31731],{"class":138},[128,31940,31941],{"class":176},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[128,31943,28165],{"class":166},[3659,31945,31946],{},"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":112,"searchDepth":142,"depth":142,"links":31948},[31949,31950,31951],{"id":30948,"depth":156,"text":30949},{"id":30958,"depth":156,"text":30959},{"id":31369,"depth":156,"text":31372},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":30940,"description":112},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":31958,"title":31959,"body":31960,"description":112,"extension":3687,"meta":33583,"navigation":159,"path":33584,"seo":33585,"stem":33586,"__hash__":33587},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":31961,"toc":33578},[31962,31965,31969,31972,32194,32198,32202,32205,32311,32316,32319,32324,32327,32332,32335,32340,32343,32355,32358,32363,32370,32398,32405,32481,32486,32489,32512,32514,32589,32594,32597,32601,32609,32614,32619,32623,32634,32640,32643,32646,32670,32673,32676,32704,32707,32710,33175,33178,33183,33188,33192,33215,33220,33224,33228,33231,33234,33237,33264,33267,33270,33288,33291,33294,33316,33324,33329,33334,33338,33341,33344,33347,33350,33395,33398,33416,33419,33424,33427,33448,33451,33507,33510,33515,33519,33522,33529,33532,33535,33540,33543,33559,33562,33575],[10,31963,31959],{"id":31964},"_6手动创建docker镜像",[72,31966,31968],{"id":31967},"_61dockerfile","6.1.DockerFile",[19,31970,31971],{},"常用命令：",[3891,31973,31974,31985],{},[3894,31975,31976],{},[3897,31977,31978,31981,31983],{},[3900,31979,31980],{"align":27223},"指令",[3900,31982,29355],{"align":27223},[3900,31984,30977],{"align":27223},[3938,31986,31987,31997,32013,32024,32035,32046,32057,32068,32079,32093,32107,32118,32132,32143,32154,32168,32183],{},[3897,31988,31989,31991,31994],{},[3943,31990,30855],{"align":27223},[3943,31992,31993],{"align":27223},"指定基础镜像，是 Dockerfile 的起点",[3943,31995,31996],{"align":27223},"FROM ubuntu:22.04",[3897,31998,31999,32002,32005],{},[3943,32000,32001],{"align":27223},"LABEL",[3943,32003,32004],{"align":27223},"添加元数据（如作者、版本等）",[3943,32006,32007,32008,32012],{"align":27223},"LABEL maintainer=”",[3989,32009,32011],{"href":32010},"mailto:you@example.com","you@example.com","”",[3897,32014,32015,32018,32021],{},[3943,32016,32017],{"align":27223},"ENV",[3943,32019,32020],{"align":27223},"设置环境变量",[3943,32022,32023],{"align":27223},"ENV PORT=8080",[3897,32025,32026,32029,32032],{},[3943,32027,32028],{"align":27223},"ARG",[3943,32030,32031],{"align":27223},"构建参数，只在构建期间可用",[3943,32033,32034],{"align":27223},"ARG VERSION=1.0",[3897,32036,32037,32040,32043],{},[3943,32038,32039],{"align":27223},"RUN",[3943,32041,32042],{"align":27223},"构建镜像时运行命令",[3943,32044,32045],{"align":27223},"RUN apt-get update && apt-get install -y curl",[3897,32047,32048,32051,32054],{},[3943,32049,32050],{"align":27223},"COPY",[3943,32052,32053],{"align":27223},"复制文件到镜像中",[3943,32055,32056],{"align":27223},"COPY . \u002Fapp",[3897,32058,32059,32062,32065],{},[3943,32060,32061],{"align":27223},"ADD",[3943,32063,32064],{"align":27223},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[3943,32066,32067],{"align":27223},"ADD archive.tar.gz \u002Fdata\u002F",[3897,32069,32070,32073,32076],{},[3943,32071,32072],{"align":27223},"WORKDIR",[3943,32074,32075],{"align":27223},"设置工作目录",[3943,32077,32078],{"align":27223},"WORKDIR \u002Fopt",[3897,32080,32081,32084,32087],{},[3943,32082,32083],{"align":27223},"CMD",[3943,32085,32086],{"align":27223},"设置容器启动时默认命令（可被 docker run 覆盖）",[3943,32088,32089,32090],{"align":27223},"CMD ",[128,32091,32092],{},"“node”, “index.js”",[3897,32094,32095,32098,32101],{},[3943,32096,32097],{"align":27223},"ENTRYPOINT",[3943,32099,32100],{"align":27223},"设置容器启动时固定命令（通常用于 CLI 工具等）",[3943,32102,32103,32104],{"align":27223},"ENTRYPOINT ",[128,32105,32106],{},"“python3”",[3897,32108,32109,32112,32115],{},[3943,32110,32111],{"align":27223},"EXPOSE",[3943,32113,32114],{"align":27223},"声明镜像内服务监听的端口（不会自动映射）",[3943,32116,32117],{"align":27223},"EXPOSE 80",[3897,32119,32120,32123,32126],{},[3943,32121,32122],{"align":27223},"VOLUME",[3943,32124,32125],{"align":27223},"声明数据卷挂载点",[3943,32127,32128,32129],{"align":27223},"VOLUME ",[128,32130,32131],{},"“\u002Fdata”",[3897,32133,32134,32137,32140],{},[3943,32135,32136],{"align":27223},"USER",[3943,32138,32139],{"align":27223},"设置后续命令执行的用户",[3943,32141,32142],{"align":27223},"USER appuser",[3897,32144,32145,32148,32151],{},[3943,32146,32147],{"align":27223},"ONBUILD",[3943,32149,32150],{"align":27223},"当镜像作为其他镜像基础镜像时触发的构建指令",[3943,32152,32153],{"align":27223},"ONBUILD COPY . \u002Fsrc",[3897,32155,32156,32159,32162],{},[3943,32157,32158],{"align":27223},"SHELL",[3943,32160,32161],{"align":27223},"更改默认 shell，比如将 sh -c 改为 bash -c",[3943,32163,32164,32165],{"align":27223},"SHELL ",[128,32166,32167],{},"“\u002Fbin\u002Fbash”, “-c”",[3897,32169,32170,32173,32176],{},[3943,32171,32172],{"align":27223},"HEALTHCHECK",[3943,32174,32175],{"align":27223},"定义容器运行时的健康检查命令",[3943,32177,32178,32179],{"align":27223},"`HEALTHCHECK CMD curl –fail ",[3989,32180,32181],{"href":32181,"rel":32182},"http:\u002F\u002Flocalhost:8080",[27352],[3897,32184,32185,32188,32191],{},[3943,32186,32187],{"align":27223},"STOPSIGNAL",[3943,32189,32190],{"align":27223},"容器停止时发送的信号",[3943,32192,32193],{"align":27223},"STOPSIGNAL SIGKILL",[72,32195,32197],{"id":32196},"_62自己创建容器","6.2.自己创建容器",[25485,32199,32201],{"id":32200},"_621手动创建","6.2.1.手动创建",[19,32203,32204],{},"在x86电脑上编译x86的：",[106,32206,32208],{"className":27309,"code":32207,"language":27311,"meta":112,"style":112},"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",[114,32209,32210,32226,32230,32243,32247,32260,32264,32277,32281,32294,32298],{"__ignoreMap":112},[128,32211,32212,32214,32217,32220,32223],{"class":130,"line":131},[128,32213,30038],{"class":199},[128,32215,32216],{"class":176}," build",[128,32218,32219],{"class":166}," -t",[128,32221,32222],{"class":176}," ros-melodic-cuda118-cudnn8-bionic:latest",[128,32224,32225],{"class":176}," .\n",[128,32227,32228],{"class":130,"line":142},[128,32229,160],{"emptyLinePlaceholder":159},[128,32231,32232,32234,32236,32238,32241],{"class":130,"line":156},[128,32233,30038],{"class":199},[128,32235,32216],{"class":176},[128,32237,32219],{"class":166},[128,32239,32240],{"class":176}," ros-noetic-focal:latest",[128,32242,32225],{"class":176},[128,32244,32245],{"class":130,"line":163},[128,32246,160],{"emptyLinePlaceholder":159},[128,32248,32249,32251,32253,32255,32258],{"class":130,"line":183},[128,32250,30038],{"class":199},[128,32252,32216],{"class":176},[128,32254,32219],{"class":166},[128,32256,32257],{"class":176}," ros-humble-jammy:latest",[128,32259,32225],{"class":176},[128,32261,32262],{"class":130,"line":188},[128,32263,160],{"emptyLinePlaceholder":159},[128,32265,32266,32268,32270,32272,32275],{"class":130,"line":193},[128,32267,30038],{"class":199},[128,32269,32216],{"class":176},[128,32271,32219],{"class":166},[128,32273,32274],{"class":176}," ros-jazzy-noble:latest",[128,32276,32225],{"class":176},[128,32278,32279],{"class":130,"line":206},[128,32280,160],{"emptyLinePlaceholder":159},[128,32282,32283,32285,32287,32289,32292],{"class":130,"line":221},[128,32284,30038],{"class":199},[128,32286,32216],{"class":176},[128,32288,32219],{"class":166},[128,32290,32291],{"class":176}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[128,32293,32225],{"class":176},[128,32295,32296],{"class":130,"line":230},[128,32297,160],{"emptyLinePlaceholder":159},[128,32299,32300,32302,32304,32306,32309],{"class":130,"line":235},[128,32301,30038],{"class":199},[128,32303,32216],{"class":176},[128,32305,32219],{"class":166},[128,32307,32308],{"class":176}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[128,32310,32225],{"class":176},[19,32312,32313],{},[5074,32314],{"alt":112,"src":32315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,32317,32318],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,32320,32321],{},[5074,32322],{"alt":112,"src":32323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,32325,32326],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[26,32328,32329],{},[29,32330,32331],{},"创建 Docker Hub 账户",[19,32333,32334],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[26,32336,32337],{"start":142},[29,32338,32339],{},"登录 Docker Hub",[19,32341,32342],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[106,32344,32346],{"className":27309,"code":32345,"language":27311,"meta":112,"style":112},"docker login\n",[114,32347,32348],{"__ignoreMap":112},[128,32349,32350,32352],{"class":130,"line":131},[128,32351,30038],{"class":199},[128,32353,32354],{"class":176}," login\n",[19,32356,32357],{},"输入你的 Docker Hub 用户名和密码进行验证。",[26,32359,32360],{},[29,32361,32362],{},"为你的镜像打标签",[19,32364,32365,32366,32369],{},"Docker Hub 使用 ",[114,32367,32368],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[106,32371,32373],{"className":27309,"code":32372,"language":27311,"meta":112,"style":112},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[114,32374,32375],{"__ignoreMap":112},[128,32376,32377,32379,32382,32384,32387,32390,32393,32395],{"class":130,"line":131},[128,32378,30038],{"class":199},[128,32380,32381],{"class":176}," tag",[128,32383,32274],{"class":176},[128,32385,32386],{"class":134}," \u003C",[128,32388,32389],{"class":176},"你的用户",[128,32391,32392],{"class":138},"名",[128,32394,4705],{"class":134},[128,32396,32397],{"class":176},"\u002Fros-jazzy-noble:latest\n",[19,32399,32400,32401,32404],{},"例如，如果你的 Docker Hub 用户名是 ",[114,32402,32403],{},"tungchiahui","，你应该执行：",[106,32406,32408],{"className":27309,"code":32407,"language":27311,"meta":112,"style":112},"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",[114,32409,32410,32421,32425,32436,32440,32451,32455,32466,32470],{"__ignoreMap":112},[128,32411,32412,32414,32416,32418],{"class":130,"line":131},[128,32413,30038],{"class":199},[128,32415,32381],{"class":176},[128,32417,32240],{"class":176},[128,32419,32420],{"class":176}," tungchiahui\u002Fros-noetic-focal:latest\n",[128,32422,32423],{"class":130,"line":142},[128,32424,160],{"emptyLinePlaceholder":159},[128,32426,32427,32429,32431,32433],{"class":130,"line":156},[128,32428,30038],{"class":199},[128,32430,32381],{"class":176},[128,32432,32257],{"class":176},[128,32434,32435],{"class":176}," tungchiahui\u002Fros-humble-jammy:latest\n",[128,32437,32438],{"class":130,"line":163},[128,32439,160],{"emptyLinePlaceholder":159},[128,32441,32442,32444,32446,32448],{"class":130,"line":183},[128,32443,30038],{"class":199},[128,32445,32381],{"class":176},[128,32447,32274],{"class":176},[128,32449,32450],{"class":176}," tungchiahui\u002Fros-jazzy-noble:latest\n",[128,32452,32453],{"class":130,"line":188},[128,32454,160],{"emptyLinePlaceholder":159},[128,32456,32457,32459,32461,32463],{"class":130,"line":193},[128,32458,30038],{"class":199},[128,32460,32381],{"class":176},[128,32462,32291],{"class":176},[128,32464,32465],{"class":176}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[128,32467,32468],{"class":130,"line":206},[128,32469,160],{"emptyLinePlaceholder":159},[128,32471,32472,32474,32476,32478],{"class":130,"line":221},[128,32473,30038],{"class":199},[128,32475,32381],{"class":176},[128,32477,32308],{"class":176},[128,32479,32480],{"class":176}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[26,32482,32483],{"start":142},[29,32484,32485],{},"推送镜像到 Docker Hub",[19,32487,32488],{},"使用以下命令将镜像推送到 Docker Hub：",[106,32490,32492],{"className":27309,"code":32491,"language":27311,"meta":112,"style":112},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[114,32493,32494],{"__ignoreMap":112},[128,32495,32496,32498,32501,32503,32505,32507,32509],{"class":130,"line":131},[128,32497,30038],{"class":199},[128,32499,32500],{"class":176}," push",[128,32502,32386],{"class":134},[128,32504,32389],{"class":176},[128,32506,32392],{"class":138},[128,32508,4705],{"class":134},[128,32510,32511],{"class":176},"\u002Fros-noetic-jazzy-noble:latest\n",[19,32513,18157],{},[106,32515,32517],{"className":27309,"code":32516,"language":27311,"meta":112,"style":112},"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",[114,32518,32519,32527,32531,32539,32543,32551,32555,32564,32568,32576,32580],{"__ignoreMap":112},[128,32520,32521,32523,32525],{"class":130,"line":131},[128,32522,30038],{"class":199},[128,32524,32500],{"class":176},[128,32526,32420],{"class":176},[128,32528,32529],{"class":130,"line":142},[128,32530,160],{"emptyLinePlaceholder":159},[128,32532,32533,32535,32537],{"class":130,"line":156},[128,32534,30038],{"class":199},[128,32536,32500],{"class":176},[128,32538,32435],{"class":176},[128,32540,32541],{"class":130,"line":163},[128,32542,160],{"emptyLinePlaceholder":159},[128,32544,32545,32547,32549],{"class":130,"line":183},[128,32546,30038],{"class":199},[128,32548,32500],{"class":176},[128,32550,32450],{"class":176},[128,32552,32553],{"class":130,"line":188},[128,32554,160],{"emptyLinePlaceholder":159},[128,32556,32557,32559,32561],{"class":130,"line":193},[128,32558,30038],{"class":199},[128,32560,32500],{"class":176},[128,32562,32563],{"class":176}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[128,32565,32566],{"class":130,"line":206},[128,32567,160],{"emptyLinePlaceholder":159},[128,32569,32570,32572,32574],{"class":130,"line":221},[128,32571,30038],{"class":199},[128,32573,32500],{"class":176},[128,32575,32480],{"class":176},[128,32577,32578],{"class":130,"line":230},[128,32579,160],{"emptyLinePlaceholder":159},[128,32581,32582,32584,32586],{"class":130,"line":235},[128,32583,30038],{"class":199},[128,32585,32500],{"class":176},[128,32587,32588],{"class":176}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[26,32590,32591],{"start":156},[29,32592,32593],{},"验证推送成功",[19,32595,32596],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,32598,32599],{},[3903,32600,7351],{},[4752,32602,32603,32606],{},[29,32604,32605],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[29,32607,32608],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,32610,32611],{},[5074,32612],{"alt":112,"src":32613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,32615,32616],{},[5074,32617],{"alt":112,"src":32618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[25485,32620,32622],{"id":32621},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,32624,32625,32626,32629,32630,32633],{},"如果您想在 ",[3903,32627,32628],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[3903,32631,32632],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,32635,32636,32637],{},"1. ",[3903,32638,32639],{},"启用 Docker 跨平台构建",[19,32641,32642],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,32644,32645],{},"第一步：启用 buildx（只需执行一次）",[106,32647,32649],{"className":27309,"code":32648,"language":27311,"meta":112,"style":112},"docker buildx create --name multiarch_builder --use\n",[114,32650,32651],{"__ignoreMap":112},[128,32652,32653,32655,32658,32661,32664,32667],{"class":130,"line":131},[128,32654,30038],{"class":199},[128,32656,32657],{"class":176}," buildx",[128,32659,32660],{"class":176}," create",[128,32662,32663],{"class":166}," --name",[128,32665,32666],{"class":176}," multiarch_builder",[128,32668,32669],{"class":166}," --use\n",[19,32671,32672],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,32674,32675],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[106,32677,32679],{"className":27309,"code":32678,"language":27311,"meta":112,"style":112},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[114,32680,32681],{"__ignoreMap":112},[128,32682,32683,32685,32687,32689,32692,32695,32698,32701],{"class":130,"line":131},[128,32684,30038],{"class":199},[128,32686,30715],{"class":176},[128,32688,30718],{"class":166},[128,32690,32691],{"class":166}," --privileged",[128,32693,32694],{"class":176}," multiarch\u002Fqemu-user-static",[128,32696,32697],{"class":166}," --reset",[128,32699,32700],{"class":166}," -p",[128,32702,32703],{"class":176}," yes\n",[19,32705,32706],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,32708,32709],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[106,32711,32713],{"className":27309,"code":32712,"language":27311,"meta":112,"style":112},"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",[114,32714,32715,32757,32761,32766,32776,32786,32795,32801,32805,32809,32819,32827,32836,32842,32846,32850,32860,32868,32877,32883,32887,32891,32901,32909,32918,32924,32928,32932,32942,32950,32959,32965,32969,32973,32983,32991,33000,33006,33010,33014,33024,33032,33041,33047,33051,33055,33065,33073,33082,33088,33092,33096,33106,33114,33123,33129,33133,33137,33148,33156,33165,33171],{"__ignoreMap":112},[128,32716,32717,32719,32721,32723,32726,32729,32731,32733,32736,32738,32740,32742,32744,32747,32750,32752,32755],{"class":130,"line":131},[128,32718,30038],{"class":199},[128,32720,32657],{"class":176},[128,32722,32216],{"class":176},[128,32724,32725],{"class":166}," --platform",[128,32727,32728],{"class":176}," linux\u002Famd64,linux\u002Farm64",[128,32730,32219],{"class":166},[128,32732,32386],{"class":134},[128,32734,32735],{"class":176},"你的镜像",[128,32737,32392],{"class":138},[128,32739,4705],{"class":134},[128,32741,4607],{"class":176},[128,32743,4657],{"class":134},[128,32745,32746],{"class":176},"标",[128,32748,32749],{"class":138},"签",[128,32751,4705],{"class":134},[128,32753,32754],{"class":166}," --push",[128,32756,32225],{"class":176},[128,32758,32759],{"class":130,"line":142},[128,32760,160],{"emptyLinePlaceholder":159},[128,32762,32763],{"class":130,"line":156},[128,32764,32765],{"class":3814},"# 例子：\n",[128,32767,32768,32770,32772,32774],{"class":130,"line":163},[128,32769,30038],{"class":199},[128,32771,32657],{"class":176},[128,32773,32216],{"class":176},[128,32775,28165],{"class":166},[128,32777,32778,32781,32784],{"class":130,"line":183},[128,32779,32780],{"class":138},"--platform ",[128,32782,32783],{"class":176},"linux\u002Famd64,linux\u002Farm64",[128,32785,28165],{"class":166},[128,32787,32788,32790,32793],{"class":130,"line":188},[128,32789,32219],{"class":166},[128,32791,32792],{"class":176}," tungchiahui\u002Fros:noetic-focal",[128,32794,28165],{"class":166},[128,32796,32797,32799],{"class":130,"line":193},[128,32798,32754],{"class":166},[128,32800,28165],{"class":166},[128,32802,32803],{"class":130,"line":206},[128,32804,32225],{"class":176},[128,32806,32807],{"class":130,"line":221},[128,32808,160],{"emptyLinePlaceholder":159},[128,32810,32811,32813,32815,32817],{"class":130,"line":230},[128,32812,30038],{"class":199},[128,32814,32657],{"class":176},[128,32816,32216],{"class":176},[128,32818,28165],{"class":166},[128,32820,32821,32823,32825],{"class":130,"line":235},[128,32822,32780],{"class":138},[128,32824,32783],{"class":176},[128,32826,28165],{"class":166},[128,32828,32829,32831,32834],{"class":130,"line":244},[128,32830,32219],{"class":166},[128,32832,32833],{"class":176}," tungchiahui\u002Fros:humble-jammy",[128,32835,28165],{"class":166},[128,32837,32838,32840],{"class":130,"line":287},[128,32839,32754],{"class":166},[128,32841,28165],{"class":166},[128,32843,32844],{"class":130,"line":301},[128,32845,32225],{"class":176},[128,32847,32848],{"class":130,"line":310},[128,32849,160],{"emptyLinePlaceholder":159},[128,32851,32852,32854,32856,32858],{"class":130,"line":323},[128,32853,30038],{"class":199},[128,32855,32657],{"class":176},[128,32857,32216],{"class":176},[128,32859,28165],{"class":166},[128,32861,32862,32864,32866],{"class":130,"line":330},[128,32863,32780],{"class":138},[128,32865,32783],{"class":176},[128,32867,28165],{"class":166},[128,32869,32870,32872,32875],{"class":130,"line":335},[128,32871,32219],{"class":166},[128,32873,32874],{"class":176}," tungchiahui\u002Fros:jazzy-noble",[128,32876,28165],{"class":166},[128,32878,32879,32881],{"class":130,"line":340},[128,32880,32754],{"class":166},[128,32882,28165],{"class":166},[128,32884,32885],{"class":130,"line":351},[128,32886,32225],{"class":176},[128,32888,32889],{"class":130,"line":384},[128,32890,160],{"emptyLinePlaceholder":159},[128,32892,32893,32895,32897,32899],{"class":130,"line":414},[128,32894,29805],{"class":199},[128,32896,32657],{"class":176},[128,32898,32216],{"class":176},[128,32900,28165],{"class":166},[128,32902,32903,32905,32907],{"class":130,"line":419},[128,32904,32780],{"class":138},[128,32906,32783],{"class":176},[128,32908,28165],{"class":166},[128,32910,32911,32913,32916],{"class":130,"line":424},[128,32912,32219],{"class":166},[128,32914,32915],{"class":176}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[128,32917,28165],{"class":166},[128,32919,32920,32922],{"class":130,"line":434},[128,32921,32754],{"class":166},[128,32923,28165],{"class":166},[128,32925,32926],{"class":130,"line":447},[128,32927,32225],{"class":176},[128,32929,32930],{"class":130,"line":459},[128,32931,160],{"emptyLinePlaceholder":159},[128,32933,32934,32936,32938,32940],{"class":130,"line":471},[128,32935,30038],{"class":199},[128,32937,32657],{"class":176},[128,32939,32216],{"class":176},[128,32941,28165],{"class":166},[128,32943,32944,32946,32948],{"class":130,"line":483},[128,32945,32780],{"class":138},[128,32947,32783],{"class":176},[128,32949,28165],{"class":166},[128,32951,32952,32954,32957],{"class":130,"line":495},[128,32953,32219],{"class":166},[128,32955,32956],{"class":176}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[128,32958,28165],{"class":166},[128,32960,32961,32963],{"class":130,"line":507},[128,32962,32754],{"class":166},[128,32964,28165],{"class":166},[128,32966,32967],{"class":130,"line":519},[128,32968,32225],{"class":176},[128,32970,32971],{"class":130,"line":524},[128,32972,160],{"emptyLinePlaceholder":159},[128,32974,32975,32977,32979,32981],{"class":130,"line":529},[128,32976,29805],{"class":199},[128,32978,32657],{"class":176},[128,32980,32216],{"class":176},[128,32982,28165],{"class":166},[128,32984,32985,32987,32989],{"class":130,"line":540},[128,32986,32780],{"class":138},[128,32988,32783],{"class":176},[128,32990,28165],{"class":166},[128,32992,32993,32995,32998],{"class":130,"line":555},[128,32994,32219],{"class":166},[128,32996,32997],{"class":176}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[128,32999,28165],{"class":166},[128,33001,33002,33004],{"class":130,"line":576},[128,33003,32754],{"class":166},[128,33005,28165],{"class":166},[128,33007,33008],{"class":130,"line":584},[128,33009,32225],{"class":176},[128,33011,33012],{"class":130,"line":593},[128,33013,160],{"emptyLinePlaceholder":159},[128,33015,33016,33018,33020,33022],{"class":130,"line":598},[128,33017,30038],{"class":199},[128,33019,32657],{"class":176},[128,33021,32216],{"class":176},[128,33023,28165],{"class":166},[128,33025,33026,33028,33030],{"class":130,"line":603},[128,33027,32780],{"class":138},[128,33029,32783],{"class":176},[128,33031,28165],{"class":166},[128,33033,33034,33036,33039],{"class":130,"line":614},[128,33035,32219],{"class":166},[128,33037,33038],{"class":176}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[128,33040,28165],{"class":166},[128,33042,33043,33045],{"class":130,"line":625},[128,33044,32754],{"class":166},[128,33046,28165],{"class":166},[128,33048,33049],{"class":130,"line":633},[128,33050,32225],{"class":176},[128,33052,33053],{"class":130,"line":649},[128,33054,160],{"emptyLinePlaceholder":159},[128,33056,33057,33059,33061,33063],{"class":130,"line":660},[128,33058,30038],{"class":199},[128,33060,32657],{"class":176},[128,33062,32216],{"class":176},[128,33064,28165],{"class":166},[128,33066,33067,33069,33071],{"class":130,"line":673},[128,33068,32780],{"class":138},[128,33070,32783],{"class":176},[128,33072,28165],{"class":166},[128,33074,33075,33077,33080],{"class":130,"line":678},[128,33076,32219],{"class":166},[128,33078,33079],{"class":176}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[128,33081,28165],{"class":166},[128,33083,33084,33086],{"class":130,"line":683},[128,33085,32754],{"class":166},[128,33087,28165],{"class":166},[128,33089,33090],{"class":130,"line":693},[128,33091,32225],{"class":176},[128,33093,33094],{"class":130,"line":702},[128,33095,160],{"emptyLinePlaceholder":159},[128,33097,33098,33100,33102,33104],{"class":130,"line":709},[128,33099,29805],{"class":199},[128,33101,32657],{"class":176},[128,33103,32216],{"class":176},[128,33105,28165],{"class":166},[128,33107,33108,33110,33112],{"class":130,"line":723},[128,33109,32780],{"class":138},[128,33111,32783],{"class":176},[128,33113,28165],{"class":166},[128,33115,33116,33118,33121],{"class":130,"line":732},[128,33117,32219],{"class":166},[128,33119,33120],{"class":176}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[128,33122,28165],{"class":166},[128,33124,33125,33127],{"class":130,"line":744},[128,33126,32754],{"class":166},[128,33128,28165],{"class":166},[128,33130,33131],{"class":130,"line":749},[128,33132,32225],{"class":176},[128,33134,33135],{"class":130,"line":754},[128,33136,160],{"emptyLinePlaceholder":159},[128,33138,33139,33142,33144,33146],{"class":130,"line":764},[128,33140,33141],{"class":199},"  docker",[128,33143,32657],{"class":176},[128,33145,32216],{"class":176},[128,33147,28165],{"class":166},[128,33149,33150,33152,33154],{"class":130,"line":782},[128,33151,32780],{"class":138},[128,33153,32783],{"class":176},[128,33155,28165],{"class":166},[128,33157,33158,33160,33163],{"class":130,"line":787},[128,33159,32219],{"class":166},[128,33161,33162],{"class":176}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[128,33164,28165],{"class":166},[128,33166,33167,33169],{"class":130,"line":795},[128,33168,32754],{"class":166},[128,33170,28165],{"class":166},[128,33172,33173],{"class":130,"line":807},[128,33174,32225],{"class":176},[19,33176,33177],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,33179,33180],{},[5074,33181],{"alt":112,"src":33182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,33184,33185],{},[5074,33186],{"alt":112,"src":33187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[25485,33189,33191],{"id":33190},"_623清除构建缓存","6.2.3.清除构建缓存",[106,33193,33195],{"className":27309,"code":33194,"language":27311,"meta":112,"style":112},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[114,33196,33197,33202],{"__ignoreMap":112},[128,33198,33199],{"class":130,"line":131},[128,33200,33201],{"class":3814},"# 清理BuildKit构建缓存\n",[128,33203,33204,33206,33209,33212],{"class":130,"line":142},[128,33205,30038],{"class":199},[128,33207,33208],{"class":176}," builder",[128,33210,33211],{"class":176}," prune",[128,33213,33214],{"class":166}," -f\n",[19,33216,33217],{},[5074,33218],{"alt":112,"src":33219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[72,33221,33223],{"id":33222},"_63补充","6.3.补充",[25485,33225,33227],{"id":33226},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,33229,33230],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,33232,33233],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,33235,33236],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[106,33238,33240],{"className":27309,"code":33239,"language":27311,"meta":112,"style":112},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[114,33241,33242,33249],{"__ignoreMap":112},[128,33243,33244,33246],{"class":130,"line":131},[128,33245,30855],{"class":199},[128,33247,33248],{"class":176}," nginx\n",[128,33250,33251,33253,33256,33259,33261],{"class":130,"line":142},[128,33252,32039],{"class":199},[128,33254,33255],{"class":176}," echo",[128,33257,33258],{"class":176}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[128,33260,29707],{"class":134},[128,33262,33263],{"class":176}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,33265,33266],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,33268,33269],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[106,33271,33273],{"className":27309,"code":33272,"language":27311,"meta":112,"style":112},"docker build -t nginx:tuling .\n",[114,33274,33275],{"__ignoreMap":112},[128,33276,33277,33279,33281,33283,33286],{"class":130,"line":131},[128,33278,30038],{"class":199},[128,33280,32216],{"class":176},[128,33282,32219],{"class":166},[128,33284,33285],{"class":176}," nginx:tuling",[128,33287,32225],{"class":176},[19,33289,33290],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,33292,33293],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[106,33295,33297],{"className":27309,"code":33296,"language":27311,"meta":112,"style":112},"docker run -d -p 92:80 nginx:tuling\n",[114,33298,33299],{"__ignoreMap":112},[128,33300,33301,33303,33305,33308,33310,33313],{"class":130,"line":131},[128,33302,30038],{"class":199},[128,33304,30715],{"class":176},[128,33306,33307],{"class":166}," -d",[128,33309,32700],{"class":166},[128,33311,33312],{"class":176}," 92:80",[128,33314,33315],{"class":176}," nginx:tuling\n",[19,33317,33318,33319],{},"4、访问 ",[3989,33320,33323],{"href":33321,"rel":33322},"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",[27352],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,33325,33326],{},[5074,33327],{"alt":112,"src":33328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,33330,33331],{},[5074,33332],{"alt":112,"src":33333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[25485,33335,33337],{"id":33336},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,33339,33340],{},"只需要知道大体流程即可",[19,33342,33343],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,33345,33346],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,33348,33349],{},"2、在Dockerfile中添加以下内容",[106,33351,33353],{"className":29576,"code":33352,"language":29578,"meta":112,"style":112},"# 基于哪个镜像\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",[114,33354,33355,33360,33365,33370,33375,33380,33385,33390],{"__ignoreMap":112},[128,33356,33357],{"class":130,"line":131},[128,33358,33359],{},"# 基于哪个镜像\n",[128,33361,33362],{"class":130,"line":142},[128,33363,33364],{},"From java:8\n",[128,33366,33367],{"class":130,"line":156},[128,33368,33369],{},"# 复制文件到容器\n",[128,33371,33372],{"class":130,"line":163},[128,33373,33374],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[128,33376,33377],{"class":130,"line":183},[128,33378,33379],{},"# 声明需要暴露的端口\n",[128,33381,33382],{"class":130,"line":188},[128,33383,33384],{},"EXPOSE 8877\n",[128,33386,33387],{"class":130,"line":193},[128,33388,33389],{},"# 配置容器启动后执行的命令\n",[128,33391,33392],{"class":130,"line":206},[128,33393,33394],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,33396,33397],{},"3、使用docker build命令构建镜像",[106,33399,33401],{"className":27309,"code":33400,"language":27311,"meta":112,"style":112},"docker build -t tulingmall-member:0.0.5 .\n",[114,33402,33403],{"__ignoreMap":112},[128,33404,33405,33407,33409,33411,33414],{"class":130,"line":131},[128,33406,30038],{"class":199},[128,33408,32216],{"class":176},[128,33410,32219],{"class":166},[128,33412,33413],{"class":176}," tulingmall-member:0.0.5",[128,33415,32225],{"class":176},[19,33417,33418],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,33420,33421],{},[5074,33422],{"alt":112,"src":33423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,33425,33426],{},"4、启动镜像，加-d可在后台启动",[106,33428,33430],{"className":27309,"code":33429,"language":27311,"meta":112,"style":112},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[114,33431,33432],{"__ignoreMap":112},[128,33433,33434,33436,33438,33440,33442,33445],{"class":130,"line":131},[128,33435,30038],{"class":199},[128,33437,30715],{"class":176},[128,33439,33307],{"class":166},[128,33441,32700],{"class":166},[128,33443,33444],{"class":176}," 8877:8877",[128,33446,33447],{"class":176}," tulingmall-member:0.0.5\n",[19,33449,33450],{},"加上JVM参数：",[106,33452,33454],{"className":27309,"code":33453,"language":27311,"meta":112,"style":112},"# --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",[114,33455,33456,33461,33476,33486,33495,33502],{"__ignoreMap":112},[128,33457,33458],{"class":130,"line":131},[128,33459,33460],{"class":3814},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[128,33462,33463,33465,33467,33470,33472,33474],{"class":130,"line":142},[128,33464,30038],{"class":199},[128,33466,30715],{"class":176},[128,33468,33469],{"class":166},"  -d",[128,33471,32700],{"class":166},[128,33473,33444],{"class":176},[128,33475,28165],{"class":166},[128,33477,33478,33480,33483],{"class":130,"line":156},[128,33479,31613],{"class":138},[128,33481,33482],{"class":176},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[128,33484,33485],{"class":166},"  \\\n",[128,33487,33488,33490,33493],{"class":130,"line":163},[128,33489,31613],{"class":138},[128,33491,33492],{"class":176},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[128,33494,33485],{"class":166},[128,33496,33497,33500],{"class":130,"line":183},[128,33498,33499],{"class":138},"--cap-add=SYS_PTRACE  ",[128,33501,29660],{"class":166},[128,33503,33504],{"class":130,"line":188},[128,33505,33506],{"class":138},"tulingmall-member:0.0.5\n",[19,33508,33509],{},"5、访问会员服务接口",[19,33511,33512],{},[5074,33513],{"alt":112,"src":33514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[25485,33516,33518],{"id":33517},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,33520,33521],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,33523,33524,33525],{},"阿里云docker镜像仓库：",[3989,33526,33527],{"href":33527,"rel":33528},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[27352],[19,33530,33531],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,33533,33534],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,33536,33537],{},[5074,33538],{"alt":112,"src":33539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,33541,33542],{},"要把镜像推送到镜像仓库",[106,33544,33546],{"className":27309,"code":33545,"language":27311,"meta":112,"style":112},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[114,33547,33548],{"__ignoreMap":112},[128,33549,33550,33552,33554,33556],{"class":130,"line":131},[128,33551,30038],{"class":199},[128,33553,32381],{"class":176},[128,33555,33413],{"class":176},[128,33557,33558],{"class":176}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,33560,33561],{},"最后将镜像推送到远程仓库",[106,33563,33565],{"className":27309,"code":33564,"language":27311,"meta":112,"style":112},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[114,33566,33567],{"__ignoreMap":112},[128,33568,33569,33571,33573],{"class":130,"line":131},[128,33570,30038],{"class":199},[128,33572,32500],{"class":176},[128,33574,33558],{"class":176},[3659,33576,33577],{},"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":112,"searchDepth":142,"depth":142,"links":33579},[33580,33581,33582],{"id":31967,"depth":156,"text":31968},{"id":32196,"depth":156,"text":32197},{"id":33222,"depth":156,"text":33223},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":31959,"description":112},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":33589,"title":33590,"body":33591,"description":112,"extension":3687,"meta":33734,"navigation":159,"path":33735,"seo":33736,"stem":33737,"__hash__":33738},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":33592,"toc":33732},[33593,33596,33601,33606,33609,33614,33619,33622,33627,33632,33635,33640,33643,33646,33649,33652,33655,33658,33678,33700,33703,33706,33726,33729],[10,33594,33590],{"id":33595},"_7vscode远程开发",[26,33597,33598],{},[29,33599,33600],{},"插件1：微软Docker工具",[19,33602,33603],{},[5074,33604],{"alt":112,"src":33605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,33607,33608],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,33610,33611],{},[5074,33612],{"alt":112,"src":33613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[26,33615,33616],{"start":142},[29,33617,33618],{},"插件2：微软Docker远程开发工具",[19,33620,33621],{},"下面这是远程开发的插件。",[19,33623,33624],{},[5074,33625],{"alt":112,"src":33626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,33628,33629],{},[5074,33630],{"alt":112,"src":33631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,33633,33634],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,33636,33637],{},[5074,33638],{"alt":112,"src":33639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,33641,33642],{},"安装完拓展之后，vscode进行链接：",[19,33644,33645],{},"1.按ctrl+shift+p",[19,33647,33648],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,33650,33651],{},"3.选择目前运行的容器",[19,33653,33654],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,33656,33657],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[106,33659,33661],{"className":27309,"code":33660,"language":27311,"meta":112,"style":112},"docker run -v 主机目录:容器目录 image-name\n",[114,33662,33663],{"__ignoreMap":112},[128,33664,33665,33667,33669,33672,33675],{"class":130,"line":131},[128,33666,30038],{"class":199},[128,33668,30715],{"class":176},[128,33670,33671],{"class":166}," -v",[128,33673,33674],{"class":176}," 主机目录:容器目录",[128,33676,33677],{"class":176}," image-name\n",[106,33679,33681],{"className":27309,"code":33680,"language":27311,"meta":112,"style":112},"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",[114,33682,33683],{"__ignoreMap":112},[128,33684,33685,33687,33689,33692,33694,33697],{"class":130,"line":131},[128,33686,30038],{"class":199},[128,33688,30715],{"class":176},[128,33690,33691],{"class":166}," -it",[128,33693,33671],{"class":166},[128,33695,33696],{"class":176}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[128,33698,33699],{"class":176}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,33701,33702],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,33704,33705],{},"查看挂载情况：",[106,33707,33709],{"className":27309,"code":33708,"language":27311,"meta":112,"style":112},"mount | grep -i project\n",[114,33710,33711],{"__ignoreMap":112},[128,33712,33713,33716,33718,33721,33723],{"class":130,"line":131},[128,33714,33715],{"class":199},"mount",[128,33717,28596],{"class":134},[128,33719,33720],{"class":199}," grep",[128,33722,29915],{"class":166},[128,33724,33725],{"class":176}," project\n",[19,33727,33728],{},"也可以通过ls来进行查看",[3659,33730,33731],{},"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":112,"searchDepth":142,"depth":142,"links":33733},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":33590,"description":112},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":33740,"title":33741,"body":33742,"description":3686,"extension":3687,"meta":33746,"navigation":159,"path":33748,"seo":33749,"stem":33750,"__hash__":33751},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":33743,"toc":33744},[],{"title":112,"searchDepth":142,"depth":142,"links":33745},[],{"category":33747},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":33741,"description":3686},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":33753,"title":33754,"body":33755,"description":3686,"extension":3687,"meta":33759,"navigation":159,"path":33760,"seo":33761,"stem":33762,"__hash__":33763},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":33756,"toc":33757},[],{"title":112,"searchDepth":142,"depth":142,"links":33758},[],{"category":33747},"\u002Fwiki\u002F2025-11-10-k8s",{"title":33754,"description":3686},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":33765,"title":33766,"body":33767,"description":3686,"extension":3687,"meta":34055,"navigation":159,"path":34056,"seo":34057,"stem":34058,"__hash__":34059},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":33768,"toc":34053},[33769,33772,33780,33795,33800,33851,33854,33860,34042,34047,34050],[10,33770,33766],{"id":33771},"_1验证深度学习环境",[19,33773,33774,33775],{},"关于环境的安装，看",[3989,33776,33779],{"href":33777,"rel":33778},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[27352],"Pytorch-->深度学习",[19,33781,33782,33783,33786,33787,33790,33791,33794],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[114,33784,33785],{},"pytorch-cuda=12.4"," 是一个“ ",[3903,33788,33789],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[3903,33792,33793],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,33796,33797],{},[5074,33798],{"alt":112,"src":33799},"\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",[106,33801,33803],{"className":27309,"code":33802,"language":27311,"meta":112,"style":112},"# 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",[114,33804,33805,33810],{"__ignoreMap":112},[128,33806,33807],{"class":130,"line":131},[128,33808,33809],{"class":3814},"# CUDA 12.4\n",[128,33811,33812,33815,33817,33820,33823,33826,33829,33832,33834,33837,33840,33843,33846,33848],{"class":130,"line":142},[128,33813,33814],{"class":199},"conda",[128,33816,27321],{"class":176},[128,33818,33819],{"class":176}," pytorch==",[128,33821,33822],{"class":166},"2.5.1",[128,33824,33825],{"class":176}," torchvision==",[128,33827,33828],{"class":166},"0.20.1",[128,33830,33831],{"class":176}," torchaudio==",[128,33833,33822],{"class":166},[128,33835,33836],{"class":176}," pytorch-cuda=",[128,33838,33839],{"class":166},"12.4",[128,33841,33842],{"class":166}," -c",[128,33844,33845],{"class":176}," pytorch",[128,33847,33842],{"class":166},[128,33849,33850],{"class":176}," nvidia\n",[19,33852,33853],{},"）：",[19,33855,33856],{},[3989,33857,33858],{"href":33858,"rel":33859},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[27352],[106,33861,33863],{"className":122,"code":33862,"language":124,"meta":112,"style":112},"# 对深度学习环境进行测试\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",[114,33864,33865,33870,33877,33882,33892,33907,33912,33922,33959,33966,33977,33993,33998,34008,34020,34030],{"__ignoreMap":112},[128,33866,33867],{"class":130,"line":131},[128,33868,33869],{"class":3814},"# 对深度学习环境进行测试\n",[128,33871,33872,33874],{"class":130,"line":142},[128,33873,135],{"class":134},[128,33875,33876],{"class":138}," torch\n",[128,33878,33879],{"class":130,"line":156},[128,33880,33881],{"class":3814},"# 查看cuda是否被激活\n",[128,33883,33884,33887,33889],{"class":130,"line":163},[128,33885,33886],{"class":138},"flag",[128,33888,270],{"class":134},[128,33890,33891],{"class":138},"torch.cuda.is_available()\n",[128,33893,33894,33896,33898,33901,33904],{"class":130,"line":183},[128,33895,2469],{"class":166},[128,33897,253],{"class":138},[128,33899,33900],{"class":176},"\"cuda:\"",[128,33902,33903],{"class":138},", flag)   ",[128,33905,33906],{"class":3814},"#返回true的话说明被激活\n",[128,33908,33909],{"class":130,"line":188},[128,33910,33911],{"class":3814},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[128,33913,33914,33917,33919],{"class":130,"line":193},[128,33915,33916],{"class":138},"ngpu",[128,33918,270],{"class":134},[128,33920,33921],{"class":166},"1\n",[128,33923,33924,33927,33929,33932,33935,33937,33940,33943,33946,33948,33950,33952,33954,33957],{"class":130,"line":206},[128,33925,33926],{"class":138},"device",[128,33928,270],{"class":134},[128,33930,33931],{"class":138},"torch.device(",[128,33933,33934],{"class":176},"\"cuda:0\"",[128,33936,5302],{"class":134},[128,33938,33939],{"class":138},"(torch.cuda.is_available() ",[128,33941,33942],{"class":134},"and",[128,33944,33945],{"class":138}," ngpu",[128,33947,4705],{"class":134},[128,33949,2452],{"class":166},[128,33951,276],{"class":138},[128,33953,5299],{"class":134},[128,33955,33956],{"class":176}," \"cpu\"",[128,33958,180],{"class":138},[128,33960,33961,33963],{"class":130,"line":221},[128,33962,2469],{"class":166},[128,33964,33965],{"class":138},"(device)\n",[128,33967,33968,33970,33973,33975],{"class":130,"line":230},[128,33969,2469],{"class":166},[128,33971,33972],{"class":138},"(torch.cuda.get_device_name(",[128,33974,2452],{"class":166},[128,33976,3034],{"class":138},[128,33978,33979,33981,33984,33986,33988,33990],{"class":130,"line":235},[128,33980,2469],{"class":166},[128,33982,33983],{"class":138},"(torch.rand(",[128,33985,3827],{"class":166},[128,33987,4128],{"class":138},[128,33989,3827],{"class":166},[128,33991,33992],{"class":138},").cuda())\n",[128,33994,33995],{"class":130,"line":244},[128,33996,33997],{"class":3814},"# 查看cuda和cudnn的版本\n",[128,33999,34000,34003,34005],{"class":130,"line":287},[128,34001,34002],{"class":138},"cuda_version",[128,34004,270],{"class":134},[128,34006,34007],{"class":138},"torch.version.cuda\n",[128,34009,34010,34012,34014,34017],{"class":130,"line":301},[128,34011,2469],{"class":166},[128,34013,253],{"class":138},[128,34015,34016],{"class":176},"\"cuda version\"",[128,34018,34019],{"class":138},",cuda_version)\n",[128,34021,34022,34025,34027],{"class":130,"line":310},[128,34023,34024],{"class":138},"cudnn_version",[128,34026,270],{"class":134},[128,34028,34029],{"class":138},"torch.backends.cudnn.version()\n",[128,34031,34032,34034,34036,34039],{"class":130,"line":323},[128,34033,2469],{"class":166},[128,34035,253],{"class":138},[128,34037,34038],{"class":176},"\"cudnn version\"",[128,34040,34041],{"class":138},",cudnn_version)\n",[19,34043,34044],{},[5074,34045],{"alt":112,"src":34046},"\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,34048,34049],{},"cuda:0 指的是一块显卡",[3659,34051,34052],{},"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":112,"searchDepth":142,"depth":142,"links":34054},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":33766,"description":3686},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":34061,"title":34062,"body":34063,"description":3686,"extension":3687,"meta":53773,"navigation":159,"path":53774,"seo":53775,"stem":53776,"__hash__":53777},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":34064,"toc":53767},[34065,34068,34072,34076,34079,34084,34089,34092,34097,34102,34107,34110,34114,34119,34123,34128,34131,34136,34139,34142,34145,34148,34153,34156,34161,34166,34171,34176,34179,34183,34186,34191,34787,34792,34795,34800,34803,34806,35268,35271,35274,35277,35280,37257,37260,37265,37270,38062,38065,38070,38848,38852,40511,40515,41229,41233,41237,41242,41247,41252,41255,41260,41265,41270,41275,41280,41284,41289,42565,42570,42573,42576,42579,42734,42737,42740,43956,43961,44656,44660,44664,44669,44674,44677,44682,44687,44692,44697,44702,44707,44712,44717,44722,44727,44732,44737,44742,44747,44752,44757,44762,44767,44772,44777,44782,44787,44792,44797,44802,44807,44812,44817,44822,44827,44831,44835,44838,46316,46320,47967,47971,48665,48669,48672,48675,49218,49221,49225,49228,50625,50629,50632,51210,52997,53001,53004,53764],[10,34066,34062],{"id":34067},"_2经典神经网络",[72,34069,34071],{"id":34070},"_21lenet与alexnet","2.1.LeNet与AlexNet",[25485,34073,34075],{"id":34074},"_211原理介绍","2.1.1.原理介绍",[19,34077,34078],{},"LeNet-5",[26,34080,34081],{},[29,34082,34083],{},"原理",[19,34085,34086],{},[5074,34087],{"alt":112,"src":34088},"\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,34090,34091],{},"B是batch批次；C是channel通道",[26,34093,34094],{"start":142},[29,34095,34096],{},"网络参数详细",[19,34098,34099],{},[5074,34100],{"alt":112,"src":34101},"\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,34103,34104],{},[5074,34105],{"alt":112,"src":34106},"\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,34108,34109],{},"AlexNet",[26,34111,34112],{},[29,34113,34083],{},[19,34115,34116],{},[5074,34117],{"alt":112,"src":34118},"\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,34120,34121],{"start":142},[29,34122,34096],{},[19,34124,34125],{},[5074,34126],{"alt":112,"src":34127},"\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,34129,34130],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,34132,34133],{},[5074,34134],{"alt":112,"src":34135},"\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,34137,34138],{},"数据处理中的图像增强操作:",[19,34140,34141],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,34143,34144],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,34146,34147],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,34149,34150],{},[5074,34151],{"alt":112,"src":34152},"\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,34154,34155],{},"提升网络精确度的方法：LRN正则化",[19,34157,34158],{},[5074,34159],{"alt":112,"src":34160},"\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,34162,34163],{},[5074,34164],{"alt":112,"src":34165},"\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,34167,34168],{"start":156},[29,34169,34170],{},"AlexNet的总结",[19,34172,34173],{},[5074,34174],{"alt":112,"src":34175},"\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,34177,34178],{},"比LeNet模型要深一丢丢",[25485,34180,34182],{"id":34181},"_212代码实现","2.1.2.代码实现",[19,34184,34185],{},"（1）LeNet",[26,34187,34188],{},[29,34189,34190],{},"模型搭建",[106,34192,34194],{"className":122,"code":34193,"language":124,"meta":112,"style":112},"# 导入库\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",[114,34195,34196,34201,34207,34212,34224,34229,34241,34245,34265,34270,34275,34283,34288,34306,34310,34315,34363,34375,34380,34409,34444,34471,34476,34488,34493,34513,34532,34551,34555,34560,34570,34587,34598,34613,34624,34635,34650,34665,34676,34683,34687,34700,34705,34728,34733,34738,34743,34747,34752,34757,34767],{"__ignoreMap":112},[128,34197,34198],{"class":130,"line":131},[128,34199,34200],{"class":3814},"# 导入库\n",[128,34202,34203,34205],{"class":130,"line":142},[128,34204,135],{"class":134},[128,34206,33876],{"class":138},[128,34208,34209],{"class":130,"line":156},[128,34210,34211],{"class":3814},"# 导入神经网络层\n",[128,34213,34214,34216,34219,34221],{"class":130,"line":163},[128,34215,145],{"class":134},[128,34217,34218],{"class":138}," torch ",[128,34220,135],{"class":134},[128,34222,34223],{"class":138}," nn\n",[128,34225,34226],{"class":130,"line":183},[128,34227,34228],{"class":3814},"# 导入展示神经网络参数的包\n",[128,34230,34231,34233,34236,34238],{"class":130,"line":188},[128,34232,145],{"class":134},[128,34234,34235],{"class":138}," torchsummary ",[128,34237,135],{"class":134},[128,34239,34240],{"class":138}," summary\n",[128,34242,34243],{"class":130,"line":193},[128,34244,160],{"emptyLinePlaceholder":159},[128,34246,34247,34249,34252,34254,34257,34259,34262],{"class":130,"line":206},[128,34248,1901],{"class":134},[128,34250,34251],{"class":199}," LeNet",[128,34253,253],{"class":138},[128,34255,34256],{"class":199},"nn",[128,34258,4307],{"class":138},[128,34260,34261],{"class":199},"Module",[128,34263,34264],{"class":138},"):\n",[128,34266,34267],{"class":130,"line":221},[128,34268,34269],{"class":3814},"    # 模型初始化:\n",[128,34271,34272],{"class":130,"line":230},[128,34273,34274],{"class":3814},"    # 定义一些网络层和激活函数\n",[128,34276,34277,34279,34281],{"class":130,"line":235},[128,34278,1946],{"class":134},[128,34280,2108],{"class":166},[128,34282,1952],{"class":138},[128,34284,34285],{"class":130,"line":244},[128,34286,34287],{"class":3814},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[128,34289,34290,34293,34296,34298,34301,34304],{"class":130,"line":287},[128,34291,34292],{"class":166},"        super",[128,34294,34295],{"class":138},"(LeNet,",[128,34297,1970],{"class":166},[128,34299,34300],{"class":138},").",[128,34302,34303],{"class":166},"__init__",[128,34305,5563],{"class":138},[128,34307,34308],{"class":130,"line":301},[128,34309,160],{"emptyLinePlaceholder":159},[128,34311,34312],{"class":130,"line":310},[128,34313,34314],{"class":3814},"        # 定义网络层\n",[128,34316,34317,34319,34322,34324,34327,34330,34332,34334,34336,34339,34341,34343,34345,34348,34350,34352,34354,34357,34359,34361],{"class":130,"line":323},[128,34318,2115],{"class":166},[128,34320,34321],{"class":138},".c1",[128,34323,270],{"class":134},[128,34325,34326],{"class":138},"nn.Conv2d(",[128,34328,34329],{"class":266},"in_channels",[128,34331,270],{"class":134},[128,34333,2592],{"class":166},[128,34335,4128],{"class":138},[128,34337,34338],{"class":266},"out_channels",[128,34340,270],{"class":134},[128,34342,4094],{"class":166},[128,34344,4128],{"class":138},[128,34346,34347],{"class":266},"kernel_size",[128,34349,270],{"class":134},[128,34351,4069],{"class":166},[128,34353,4128],{"class":138},[128,34355,34356],{"class":266},"padding",[128,34358,270],{"class":134},[128,34360,409],{"class":166},[128,34362,180],{"class":138},[128,34364,34365,34367,34370,34372],{"class":130,"line":330},[128,34366,2115],{"class":166},[128,34368,34369],{"class":138},".sig",[128,34371,270],{"class":134},[128,34373,34374],{"class":138},"nn.Sigmoid()\n",[128,34376,34377],{"class":130,"line":335},[128,34378,34379],{"class":3814},"        # 定义池化\n",[128,34381,34382,34384,34387,34389,34392,34394,34396,34398,34400,34403,34405,34407],{"class":130,"line":340},[128,34383,2115],{"class":166},[128,34385,34386],{"class":138},".s2",[128,34388,270],{"class":134},[128,34390,34391],{"class":138},"nn.AvgPool2d(",[128,34393,34347],{"class":266},[128,34395,270],{"class":134},[128,34397,409],{"class":166},[128,34399,4128],{"class":138},[128,34401,34402],{"class":266},"stride",[128,34404,270],{"class":134},[128,34406,409],{"class":166},[128,34408,180],{"class":138},[128,34410,34411,34413,34416,34418,34420,34422,34424,34426,34428,34430,34432,34434,34436,34438,34440,34442],{"class":130,"line":351},[128,34412,2115],{"class":166},[128,34414,34415],{"class":138},".c3",[128,34417,270],{"class":134},[128,34419,34326],{"class":138},[128,34421,34329],{"class":266},[128,34423,270],{"class":134},[128,34425,4094],{"class":166},[128,34427,4128],{"class":138},[128,34429,34338],{"class":266},[128,34431,270],{"class":134},[128,34433,4350],{"class":166},[128,34435,4128],{"class":138},[128,34437,34347],{"class":266},[128,34439,270],{"class":134},[128,34441,4069],{"class":166},[128,34443,180],{"class":138},[128,34445,34446,34448,34451,34453,34455,34457,34459,34461,34463,34465,34467,34469],{"class":130,"line":384},[128,34447,2115],{"class":166},[128,34449,34450],{"class":138},".s4",[128,34452,270],{"class":134},[128,34454,34391],{"class":138},[128,34456,34347],{"class":266},[128,34458,270],{"class":134},[128,34460,409],{"class":166},[128,34462,4128],{"class":138},[128,34464,34402],{"class":266},[128,34466,270],{"class":134},[128,34468,409],{"class":166},[128,34470,180],{"class":138},[128,34472,34473],{"class":130,"line":414},[128,34474,34475],{"class":3814},"        # 定义平展层\n",[128,34477,34478,34480,34483,34485],{"class":130,"line":419},[128,34479,2115],{"class":166},[128,34481,34482],{"class":138},".flatten",[128,34484,270],{"class":134},[128,34486,34487],{"class":138},"nn.Flatten()\n",[128,34489,34490],{"class":130,"line":424},[128,34491,34492],{"class":3814},"        # 定义全连接层\n",[128,34494,34495,34497,34500,34502,34505,34507,34509,34511],{"class":130,"line":434},[128,34496,2115],{"class":166},[128,34498,34499],{"class":138},".f5",[128,34501,270],{"class":134},[128,34503,34504],{"class":138},"nn.Linear(",[128,34506,7554],{"class":166},[128,34508,4128],{"class":138},[128,34510,3115],{"class":166},[128,34512,180],{"class":138},[128,34514,34515,34517,34520,34522,34524,34526,34528,34530],{"class":130,"line":447},[128,34516,2115],{"class":166},[128,34518,34519],{"class":138},".f6",[128,34521,270],{"class":134},[128,34523,34504],{"class":138},[128,34525,3115],{"class":166},[128,34527,4128],{"class":138},[128,34529,4460],{"class":166},[128,34531,180],{"class":138},[128,34533,34534,34536,34539,34541,34543,34545,34547,34549],{"class":130,"line":459},[128,34535,2115],{"class":166},[128,34537,34538],{"class":138},".f7",[128,34540,270],{"class":134},[128,34542,34504],{"class":138},[128,34544,4460],{"class":166},[128,34546,4128],{"class":138},[128,34548,4196],{"class":166},[128,34550,180],{"class":138},[128,34552,34553],{"class":130,"line":471},[128,34554,160],{"emptyLinePlaceholder":159},[128,34556,34557],{"class":130,"line":483},[128,34558,34559],{"class":3814},"    # 写工具->写前向传播\n",[128,34561,34562,34564,34567],{"class":130,"line":495},[128,34563,1946],{"class":134},[128,34565,34566],{"class":199}," forward",[128,34568,34569],{"class":138},"(self,x):\n",[128,34571,34572,34575,34577,34579,34582,34584],{"class":130,"line":507},[128,34573,34574],{"class":138},"        x",[128,34576,270],{"class":134},[128,34578,1970],{"class":166},[128,34580,34581],{"class":138},".sig(",[128,34583,1970],{"class":166},[128,34585,34586],{"class":138},".c1(x))\n",[128,34588,34589,34591,34593,34595],{"class":130,"line":519},[128,34590,34574],{"class":138},[128,34592,270],{"class":134},[128,34594,1970],{"class":166},[128,34596,34597],{"class":138},".s2(x)\n",[128,34599,34600,34602,34604,34606,34608,34610],{"class":130,"line":524},[128,34601,34574],{"class":138},[128,34603,270],{"class":134},[128,34605,1970],{"class":166},[128,34607,34581],{"class":138},[128,34609,1970],{"class":166},[128,34611,34612],{"class":138},".c3(x))\n",[128,34614,34615,34617,34619,34621],{"class":130,"line":529},[128,34616,34574],{"class":138},[128,34618,270],{"class":134},[128,34620,1970],{"class":166},[128,34622,34623],{"class":138},".s4(x)\n",[128,34625,34626,34628,34630,34632],{"class":130,"line":540},[128,34627,34574],{"class":138},[128,34629,270],{"class":134},[128,34631,1970],{"class":166},[128,34633,34634],{"class":138},".flatten(x)\n",[128,34636,34637,34639,34641,34643,34645,34647],{"class":130,"line":555},[128,34638,34574],{"class":138},[128,34640,270],{"class":134},[128,34642,1970],{"class":166},[128,34644,34581],{"class":138},[128,34646,1970],{"class":166},[128,34648,34649],{"class":138},".f5(x))\n",[128,34651,34652,34654,34656,34658,34660,34662],{"class":130,"line":576},[128,34653,34574],{"class":138},[128,34655,270],{"class":134},[128,34657,1970],{"class":166},[128,34659,34581],{"class":138},[128,34661,1970],{"class":166},[128,34663,34664],{"class":138},".f6(x))\n",[128,34666,34667,34669,34671,34673],{"class":130,"line":584},[128,34668,34574],{"class":138},[128,34670,270],{"class":134},[128,34672,1970],{"class":166},[128,34674,34675],{"class":138},".f7(x)\n",[128,34677,34678,34680],{"class":130,"line":593},[128,34679,224],{"class":134},[128,34681,34682],{"class":138}," x\n",[128,34684,34685],{"class":130,"line":598},[128,34686,160],{"emptyLinePlaceholder":159},[128,34688,34689,34691,34693,34695,34698],{"class":130,"line":603},[128,34690,1800],{"class":134},[128,34692,1803],{"class":166},[128,34694,570],{"class":134},[128,34696,34697],{"class":176},"\"__main__\"",[128,34699,241],{"class":138},[128,34701,34702],{"class":130,"line":614},[128,34703,34704],{"class":3814},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[128,34706,34707,34710,34712,34714,34717,34719,34722,34724,34726],{"class":130,"line":625},[128,34708,34709],{"class":138},"    device",[128,34711,270],{"class":134},[128,34713,33931],{"class":138},[128,34715,34716],{"class":176},"\"cuda\"",[128,34718,5302],{"class":134},[128,34720,34721],{"class":138}," torch.cuda.is_available() ",[128,34723,5299],{"class":134},[128,34725,33956],{"class":176},[128,34727,180],{"class":138},[128,34729,34730],{"class":130,"line":633},[128,34731,34732],{"class":3814},"    # 如果就是想指定用cpu用下方代码:\n",[128,34734,34735],{"class":130,"line":649},[128,34736,34737],{"class":3814},"    # device=\"cpu\"\n",[128,34739,34740],{"class":130,"line":660},[128,34741,34742],{"class":3814},"    # print(device)\n",[128,34744,34745],{"class":130,"line":673},[128,34746,160],{"emptyLinePlaceholder":159},[128,34748,34749],{"class":130,"line":678},[128,34750,34751],{"class":3814},"    # 实例化模型\n",[128,34753,34754],{"class":130,"line":683},[128,34755,34756],{"class":3814},"    # 将模型放到设备中去运行\n",[128,34758,34759,34762,34764],{"class":130,"line":693},[128,34760,34761],{"class":138},"    model",[128,34763,270],{"class":134},[128,34765,34766],{"class":138},"LeNet().to(device)\n",[128,34768,34769,34771,34774,34776,34778,34780,34782,34784],{"class":130,"line":702},[128,34770,437],{"class":166},[128,34772,34773],{"class":138},"(summary(model,(",[128,34775,2592],{"class":166},[128,34777,4128],{"class":138},[128,34779,4648],{"class":166},[128,34781,4128],{"class":138},[128,34783,4648],{"class":166},[128,34785,34786],{"class":138},")))\n",[19,34788,34789],{},[5074,34790],{"alt":112,"src":34791},"\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,34793,34794],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[26,34796,34797],{"start":142},[29,34798,34799],{},"训练",[19,34801,34802],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,34804,34805],{},"在训练之前可以将数据展示看一下",[106,34807,34809],{"className":122,"code":34808,"language":124,"meta":112,"style":112},"# 建立画图的函数，用于展示数据\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",[114,34810,34811,34816,34821,34833,34845,34857,34862,34874,34879,34891,34896,34908,34912,34916,34936,34948,34953,34974,34985,34989,34994,35012,35023,35028,35039,35044,35055,35059,35064,35079,35092,35097,35102,35115,35128,35141,35146,35150,35155,35175,35192,35212,35225,35238,35248,35263],{"__ignoreMap":112},[128,34812,34813],{"class":130,"line":131},[128,34814,34815],{"class":3814},"# 建立画图的函数，用于展示数据\n",[128,34817,34818],{"class":130,"line":142},[128,34819,34820],{"class":3814},"# torchvision中包含很多内置的数据集\n",[128,34822,34823,34825,34828,34830],{"class":130,"line":156},[128,34824,145],{"class":134},[128,34826,34827],{"class":138}," sklearn.externals.array_api_compat.torch ",[128,34829,135],{"class":134},[128,34831,34832],{"class":138}," squeeze\n",[128,34834,34835,34837,34840,34842],{"class":130,"line":163},[128,34836,145],{"class":134},[128,34838,34839],{"class":138}," torchvision.datasets ",[128,34841,135],{"class":134},[128,34843,34844],{"class":138}," FashionMNIST\n",[128,34846,34847,34849,34852,34854],{"class":130,"line":183},[128,34848,135],{"class":134},[128,34850,34851],{"class":138}," numpy ",[128,34853,279],{"class":134},[128,34855,34856],{"class":138}," np\n",[128,34858,34859],{"class":130,"line":188},[128,34860,34861],{"class":3814},"# 引入处理数据集的包\n",[128,34863,34864,34866,34869,34871],{"class":130,"line":193},[128,34865,145],{"class":134},[128,34867,34868],{"class":138}," torchvision ",[128,34870,135],{"class":134},[128,34872,34873],{"class":138}," transforms\n",[128,34875,34876],{"class":130,"line":206},[128,34877,34878],{"class":3814},"# 从torch库中引入数据处理的包\n",[128,34880,34881,34883,34886,34888],{"class":130,"line":221},[128,34882,135],{"class":134},[128,34884,34885],{"class":138}," torch.utils.data ",[128,34887,279],{"class":134},[128,34889,34890],{"class":138}," Data\n",[128,34892,34893],{"class":130,"line":230},[128,34894,34895],{"class":3814},"# 导入画图的库\n",[128,34897,34898,34900,34903,34905],{"class":130,"line":235},[128,34899,135],{"class":134},[128,34901,34902],{"class":138}," matplotlib.pyplot ",[128,34904,279],{"class":134},[128,34906,34907],{"class":138}," plt\n",[128,34909,34910],{"class":130,"line":244},[128,34911,160],{"emptyLinePlaceholder":159},[128,34913,34914],{"class":130,"line":287},[128,34915,160],{"emptyLinePlaceholder":159},[128,34917,34918,34921,34923,34926,34929,34931,34934],{"class":130,"line":301},[128,34919,34920],{"class":138},"train_data",[128,34922,270],{"class":134},[128,34924,34925],{"class":138},"FashionMNIST(",[128,34927,34928],{"class":266},"root",[128,34930,270],{"class":134},[128,34932,34933],{"class":176},"'.\u002Fdata'",[128,34935,2665],{"class":138},[128,34937,34938,34941,34943,34946],{"class":130,"line":310},[128,34939,34940],{"class":266},"                        train",[128,34942,270],{"class":134},[128,34944,34945],{"class":166},"True",[128,34947,2665],{"class":138},[128,34949,34950],{"class":130,"line":323},[128,34951,34952],{"class":3814},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[128,34954,34955,34958,34960,34963,34966,34968,34971],{"class":130,"line":330},[128,34956,34957],{"class":266},"                        transform",[128,34959,270],{"class":134},[128,34961,34962],{"class":138},"transforms.Compose([transforms.Resize(",[128,34964,34965],{"class":266},"size",[128,34967,270],{"class":134},[128,34969,34970],{"class":166},"224",[128,34972,34973],{"class":138},"),transforms.ToTensor()]),\n",[128,34975,34976,34979,34981,34983],{"class":130,"line":335},[128,34977,34978],{"class":266},"                        download",[128,34980,270],{"class":134},[128,34982,34945],{"class":166},[128,34984,180],{"class":138},[128,34986,34987],{"class":130,"line":340},[128,34988,160],{"emptyLinePlaceholder":159},[128,34990,34991],{"class":130,"line":351},[128,34992,34993],{"class":3814},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[128,34995,34996,34999,35001,35004,35007,35009],{"class":130,"line":384},[128,34997,34998],{"class":138},"train_loader",[128,35000,270],{"class":134},[128,35002,35003],{"class":138},"Data.DataLoader(",[128,35005,35006],{"class":266},"dataset",[128,35008,270],{"class":134},[128,35010,35011],{"class":138},"train_data,\n",[128,35013,35014,35017,35019,35021],{"class":130,"line":414},[128,35015,35016],{"class":266},"                             batch_size",[128,35018,270],{"class":134},[128,35020,3956],{"class":166},[128,35022,2665],{"class":138},[128,35024,35025],{"class":130,"line":419},[128,35026,35027],{"class":3814},"                             # 数据是否打乱\n",[128,35029,35030,35033,35035,35037],{"class":130,"line":424},[128,35031,35032],{"class":266},"                             shuffle",[128,35034,270],{"class":134},[128,35036,34945],{"class":166},[128,35038,2665],{"class":138},[128,35040,35041],{"class":130,"line":434},[128,35042,35043],{"class":3814},"                             # 规定加载数据的进程\n",[128,35045,35046,35049,35051,35053],{"class":130,"line":447},[128,35047,35048],{"class":266},"                             num_workers",[128,35050,270],{"class":134},[128,35052,2452],{"class":166},[128,35054,180],{"class":138},[128,35056,35057],{"class":130,"line":459},[128,35058,160],{"emptyLinePlaceholder":159},[128,35060,35061],{"class":130,"line":471},[128,35062,35063],{"class":3814},"# 获得一个batch的数据\n",[128,35065,35066,35068,35071,35073,35076],{"class":130,"line":483},[128,35067,2404],{"class":134},[128,35069,35070],{"class":138}," step,(b_x,b_y) ",[128,35072,549],{"class":134},[128,35074,35075],{"class":166}," enumerate",[128,35077,35078],{"class":138},"(train_loader):\n",[128,35080,35081,35083,35086,35088,35090],{"class":130,"line":495},[128,35082,209],{"class":134},[128,35084,35085],{"class":138}," step ",[128,35087,4705],{"class":134},[128,35089,7659],{"class":166},[128,35091,241],{"class":138},[128,35093,35094],{"class":130,"line":507},[128,35095,35096],{"class":134},"        break\n",[128,35098,35099],{"class":130,"line":519},[128,35100,35101],{"class":3814},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[128,35103,35104,35107,35109,35112],{"class":130,"line":524},[128,35105,35106],{"class":138},"batch_x",[128,35108,270],{"class":134},[128,35110,35111],{"class":138},"b_x.squeeze().numpy()  ",[128,35113,35114],{"class":3814},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[128,35116,35117,35120,35122,35125],{"class":130,"line":529},[128,35118,35119],{"class":138},"batch_y",[128,35121,270],{"class":134},[128,35123,35124],{"class":138},"b_y.numpy()   ",[128,35126,35127],{"class":3814},"#将张量转换成功numpy数组\n",[128,35129,35130,35133,35135,35138],{"class":130,"line":540},[128,35131,35132],{"class":138},"class_label",[128,35134,270],{"class":134},[128,35136,35137],{"class":138},"train_data.classes  ",[128,35139,35140],{"class":3814},"#训练集标签\n",[128,35142,35143],{"class":130,"line":555},[128,35144,35145],{"class":3814},"# print(class_label)\n",[128,35147,35148],{"class":130,"line":576},[128,35149,160],{"emptyLinePlaceholder":159},[128,35151,35152],{"class":130,"line":584},[128,35153,35154],{"class":3814},"# 可视化一个batch的图像\n",[128,35156,35157,35160,35163,35165,35167,35169,35171,35173],{"class":130,"line":593},[128,35158,35159],{"class":138},"plt.figure(",[128,35161,35162],{"class":266},"figsize",[128,35164,270],{"class":134},[128,35166,253],{"class":138},[128,35168,4247],{"class":166},[128,35170,4128],{"class":138},[128,35172,4069],{"class":166},[128,35174,3034],{"class":138},[128,35176,35177,35179,35182,35184,35187,35189],{"class":130,"line":598},[128,35178,2404],{"class":134},[128,35180,35181],{"class":138}," ii ",[128,35183,549],{"class":134},[128,35185,35186],{"class":138}," np.arange(",[128,35188,10915],{"class":166},[128,35190,35191],{"class":138},"(batch_y)):\n",[128,35193,35194,35197,35199,35201,35203,35206,35208,35210],{"class":130,"line":603},[128,35195,35196],{"class":138},"    plt.subplot(",[128,35198,4043],{"class":166},[128,35200,4128],{"class":138},[128,35202,4350],{"class":166},[128,35204,35205],{"class":138},",ii ",[128,35207,2457],{"class":134},[128,35209,28605],{"class":166},[128,35211,180],{"class":138},[128,35213,35214,35217,35220,35222],{"class":130,"line":614},[128,35215,35216],{"class":138},"    plt.imshow(batch_x[ii,:,:],",[128,35218,35219],{"class":266},"cmap",[128,35221,270],{"class":134},[128,35223,35224],{"class":138},"plt.cm.gray)\n",[128,35226,35227,35230,35232,35234,35236],{"class":130,"line":625},[128,35228,35229],{"class":138},"    plt.title(class_label[batch_y[ii]],",[128,35231,34965],{"class":266},[128,35233,270],{"class":134},[128,35235,4196],{"class":166},[128,35237,180],{"class":138},[128,35239,35240,35243,35246],{"class":130,"line":633},[128,35241,35242],{"class":138},"    plt.axis(",[128,35244,35245],{"class":176},"\"off\"",[128,35247,180],{"class":138},[128,35249,35250,35253,35256,35258,35261],{"class":130,"line":649},[128,35251,35252],{"class":138},"    plt.subplots_adjust(",[128,35254,35255],{"class":266},"wspace",[128,35257,270],{"class":134},[128,35259,35260],{"class":166},"0.05",[128,35262,180],{"class":138},[128,35264,35265],{"class":130,"line":660},[128,35266,35267],{"class":138},"plt.show()\n",[19,35269,35270],{},"用matplotlib进行展示的过程可以后续再补",[19,35272,35273],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,35275,35276],{},"训练次数就是按照批次过整个训练集数据的次数",[19,35278,35279],{},"模型训练：",[106,35281,35283],{"className":122,"code":35282,"language":124,"meta":112,"style":112},"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",[114,35284,35285,35292,35299,35303,35315,35321,35332,35342,35352,35362,35372,35377,35389,35399,35403,35407,35412,35421,35434,35445,35462,35473,35512,35528,35540,35551,35556,35567,35583,35594,35605,35616,35623,35627,35632,35637,35641,35646,35656,35677,35681,35685,35690,35695,35700,35720,35724,35729,35739,35743,35748,35757,35762,35767,35772,35782,35786,35790,35795,35800,35810,35815,35825,35830,35839,35844,35853,35858,35867,35871,35876,35886,35890,35894,35899,35914,35941,35956,35960,35965,35970,35979,35984,35993,35998,36007,36012,36021,36026,36035,36040,36049,36054,36067,36072,36082,36087,36097,36102,36107,36112,36117,36127,36132,36151,36156,36166,36171,36176,36181,36186,36191,36196,36201,36220,36225,36240,36245,36258,36263,36277,36282,36290,36295,36303,36308,36313,36321,36326,36336,36341,36359,36364,36374,36379,36398,36413,36418,36431,36436,36441,36451,36456,36461,36470,36475,36485,36490,36499,36503,36508,36556,36602,36606,36611,36629,36634,36652,36657,36662,36671,36675,36680,36695,36739,36744,36749,36755,36766,36772,36778,36784,36802,36816,36825,36834,36843,36852,36857,36863,36871,36876,36882,36893,36899,36919,36925,36931,36937,36954,36960,36966,36972,36978,36984,37011,37035,37041,37047,37053,37064,37075,37081,37098,37121,37144,37150,37155,37164,37174,37180,37185,37191,37204,37210,37221,37232,37251],{"__ignoreMap":112},[128,35286,35287,35289],{"class":130,"line":131},[128,35288,135],{"class":134},[128,35290,35291],{"class":138}," copy\n",[128,35293,35294,35296],{"class":130,"line":142},[128,35295,135],{"class":134},[128,35297,35298],{"class":138}," time\n",[128,35300,35301],{"class":130,"line":156},[128,35302,160],{"emptyLinePlaceholder":159},[128,35304,35305,35307,35310,35312],{"class":130,"line":163},[128,35306,135],{"class":134},[128,35308,35309],{"class":138}," pandas ",[128,35311,279],{"class":134},[128,35313,35314],{"class":138}," pd\n",[128,35316,35317,35319],{"class":130,"line":183},[128,35318,135],{"class":134},[128,35320,33876],{"class":138},[128,35322,35323,35325,35327,35329],{"class":130,"line":188},[128,35324,145],{"class":134},[128,35326,34885],{"class":138},[128,35328,135],{"class":134},[128,35330,35331],{"class":138}," Dataset\n",[128,35333,35334,35336,35338,35340],{"class":130,"line":193},[128,35335,145],{"class":134},[128,35337,34839],{"class":138},[128,35339,135],{"class":134},[128,35341,34844],{"class":138},[128,35343,35344,35346,35348,35350],{"class":130,"line":206},[128,35345,145],{"class":134},[128,35347,34868],{"class":138},[128,35349,135],{"class":134},[128,35351,34873],{"class":138},[128,35353,35354,35356,35358,35360],{"class":130,"line":221},[128,35355,135],{"class":134},[128,35357,34885],{"class":138},[128,35359,279],{"class":134},[128,35361,34890],{"class":138},[128,35363,35364,35366,35368,35370],{"class":130,"line":230},[128,35365,135],{"class":134},[128,35367,34902],{"class":138},[128,35369,279],{"class":134},[128,35371,34907],{"class":138},[128,35373,35374],{"class":130,"line":235},[128,35375,35376],{"class":3814},"# 导入模型\n",[128,35378,35379,35381,35384,35386],{"class":130,"line":244},[128,35380,145],{"class":134},[128,35382,35383],{"class":138}," model ",[128,35385,135],{"class":134},[128,35387,35388],{"class":138}," LeNet\n",[128,35390,35391,35393,35395,35397],{"class":130,"line":287},[128,35392,145],{"class":134},[128,35394,34218],{"class":138},[128,35396,135],{"class":134},[128,35398,34223],{"class":138},[128,35400,35401],{"class":130,"line":301},[128,35402,160],{"emptyLinePlaceholder":159},[128,35404,35405],{"class":130,"line":310},[128,35406,160],{"emptyLinePlaceholder":159},[128,35408,35409],{"class":130,"line":323},[128,35410,35411],{"class":3814},"# 处理训练集与验证集函数--->划分数据集\n",[128,35413,35414,35416,35419],{"class":130,"line":330},[128,35415,196],{"class":134},[128,35417,35418],{"class":199}," train_val_data_process",[128,35420,203],{"class":138},[128,35422,35423,35426,35428,35430,35432],{"class":130,"line":335},[128,35424,35425],{"class":138},"    train_data",[128,35427,270],{"class":134},[128,35429,34925],{"class":138},[128,35431,34933],{"class":176},[128,35433,2665],{"class":138},[128,35435,35436,35439,35441,35443],{"class":130,"line":340},[128,35437,35438],{"class":266},"                            train",[128,35440,270],{"class":134},[128,35442,34945],{"class":166},[128,35444,2665],{"class":138},[128,35446,35447,35450,35452,35454,35456,35458,35460],{"class":130,"line":351},[128,35448,35449],{"class":266},"                            transform",[128,35451,270],{"class":134},[128,35453,34962],{"class":138},[128,35455,34965],{"class":266},[128,35457,270],{"class":134},[128,35459,4648],{"class":166},[128,35461,34973],{"class":138},[128,35463,35464,35467,35469,35471],{"class":130,"line":384},[128,35465,35466],{"class":266},"                            download",[128,35468,270],{"class":134},[128,35470,34945],{"class":166},[128,35472,180],{"class":138},[128,35474,35475,35478,35480,35483,35486,35488,35491,35493,35495,35498,35500,35502,35505,35507,35509],{"class":130,"line":414},[128,35476,35477],{"class":138},"    train_data,val_data",[128,35479,270],{"class":134},[128,35481,35482],{"class":138},"Data.random_split(train_data,[",[128,35484,35485],{"class":166},"round",[128,35487,253],{"class":138},[128,35489,35490],{"class":166},"0.8",[128,35492,4205],{"class":134},[128,35494,10915],{"class":166},[128,35496,35497],{"class":138},"(train_data)),",[128,35499,35485],{"class":166},[128,35501,253],{"class":138},[128,35503,35504],{"class":166},"0.2",[128,35506,4205],{"class":134},[128,35508,10915],{"class":166},[128,35510,35511],{"class":138},"(train_data))])\n",[128,35513,35514,35517,35519,35522,35524,35526],{"class":130,"line":419},[128,35515,35516],{"class":138},"    train_dataloader ",[128,35518,270],{"class":134},[128,35520,35521],{"class":138}," Data.DataLoader(",[128,35523,35006],{"class":266},[128,35525,270],{"class":134},[128,35527,35011],{"class":138},[128,35529,35530,35533,35535,35538],{"class":130,"line":424},[128,35531,35532],{"class":266},"                                       batch_size",[128,35534,270],{"class":134},[128,35536,35537],{"class":166},"128",[128,35539,2665],{"class":138},[128,35541,35542,35545,35547,35549],{"class":130,"line":434},[128,35543,35544],{"class":266},"                                       shuffle",[128,35546,270],{"class":134},[128,35548,34945],{"class":166},[128,35550,2665],{"class":138},[128,35552,35553],{"class":130,"line":447},[128,35554,35555],{"class":3814},"                                       # 规定8个进程\n",[128,35557,35558,35561,35563,35565],{"class":130,"line":459},[128,35559,35560],{"class":266},"                                       num_workers",[128,35562,270],{"class":134},[128,35564,4145],{"class":166},[128,35566,180],{"class":138},[128,35568,35569,35572,35574,35576,35578,35580],{"class":130,"line":471},[128,35570,35571],{"class":138},"    val_dataloader",[128,35573,270],{"class":134},[128,35575,35003],{"class":138},[128,35577,35006],{"class":266},[128,35579,270],{"class":134},[128,35581,35582],{"class":138},"val_data,\n",[128,35584,35585,35588,35590,35592],{"class":130,"line":483},[128,35586,35587],{"class":266},"                                   batch_size",[128,35589,270],{"class":134},[128,35591,35537],{"class":166},[128,35593,2665],{"class":138},[128,35595,35596,35599,35601,35603],{"class":130,"line":495},[128,35597,35598],{"class":266},"                                   shuffle",[128,35600,270],{"class":134},[128,35602,34945],{"class":166},[128,35604,2665],{"class":138},[128,35606,35607,35610,35612,35614],{"class":130,"line":507},[128,35608,35609],{"class":266},"                                   num_workers",[128,35611,270],{"class":134},[128,35613,4145],{"class":166},[128,35615,180],{"class":138},[128,35617,35618,35620],{"class":130,"line":519},[128,35619,587],{"class":134},[128,35621,35622],{"class":138}," train_dataloader,val_dataloader\n",[128,35624,35625],{"class":130,"line":524},[128,35626,160],{"emptyLinePlaceholder":159},[128,35628,35629],{"class":130,"line":529},[128,35630,35631],{"class":3814},"# 验证是否出错\n",[128,35633,35634],{"class":130,"line":540},[128,35635,35636],{"class":3814},"# train_val_data_process()\n",[128,35638,35639],{"class":130,"line":555},[128,35640,160],{"emptyLinePlaceholder":159},[128,35642,35643],{"class":130,"line":576},[128,35644,35645],{"class":3814},"# 定义模型训练函数\n",[128,35647,35648,35650,35653],{"class":130,"line":584},[128,35649,196],{"class":134},[128,35651,35652],{"class":199}," train_model_process",[128,35654,35655],{"class":138},"(model,train_dataloader,val_dataloader,num_epochs):\n",[128,35657,35658,35660,35662,35664,35666,35668,35670,35672,35675],{"class":130,"line":593},[128,35659,34709],{"class":138},[128,35661,270],{"class":134},[128,35663,33931],{"class":138},[128,35665,34716],{"class":176},[128,35667,5302],{"class":134},[128,35669,34721],{"class":138},[128,35671,5299],{"class":134},[128,35673,35674],{"class":176}," 'cpu'",[128,35676,180],{"class":138},[128,35678,35679],{"class":130,"line":598},[128,35680,160],{"emptyLinePlaceholder":159},[128,35682,35683],{"class":130,"line":603},[128,35684,160],{"emptyLinePlaceholder":159},[128,35686,35687],{"class":130,"line":614},[128,35688,35689],{"class":3814},"    # 定义优化器\n",[128,35691,35692],{"class":130,"line":625},[128,35693,35694],{"class":3814},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[128,35696,35697],{"class":130,"line":633},[128,35698,35699],{"class":3814},"    # lr为学习率\n",[128,35701,35702,35705,35707,35710,35713,35715,35718],{"class":130,"line":649},[128,35703,35704],{"class":138},"    optimizer",[128,35706,270],{"class":134},[128,35708,35709],{"class":138},"torch.optim.Adam(model.parameters(),",[128,35711,35712],{"class":266},"lr",[128,35714,270],{"class":134},[128,35716,35717],{"class":166},"0.001",[128,35719,180],{"class":138},[128,35721,35722],{"class":130,"line":660},[128,35723,160],{"emptyLinePlaceholder":159},[128,35725,35726],{"class":130,"line":673},[128,35727,35728],{"class":3814},"    # 定义损失函数使用交叉熵损失函数\n",[128,35730,35731,35734,35736],{"class":130,"line":678},[128,35732,35733],{"class":138},"    criterion",[128,35735,270],{"class":134},[128,35737,35738],{"class":138},"nn.CrossEntropyLoss()\n",[128,35740,35741],{"class":130,"line":683},[128,35742,160],{"emptyLinePlaceholder":159},[128,35744,35745],{"class":130,"line":693},[128,35746,35747],{"class":3814},"    # 将模型放到GPU中进行训练\n",[128,35749,35750,35752,35754],{"class":130,"line":702},[128,35751,34761],{"class":138},[128,35753,270],{"class":134},[128,35755,35756],{"class":138},"model.to(device)\n",[128,35758,35759],{"class":130,"line":709},[128,35760,35761],{"class":3814},"    # 复制当前模型的参数\n",[128,35763,35764],{"class":130,"line":723},[128,35765,35766],{"class":3814},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[128,35768,35769],{"class":130,"line":732},[128,35770,35771],{"class":3814},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[128,35773,35774,35777,35779],{"class":130,"line":744},[128,35775,35776],{"class":138},"    best_model_wts",[128,35778,270],{"class":134},[128,35780,35781],{"class":138},"copy.deepcopy(model.state_dict())\n",[128,35783,35784],{"class":130,"line":749},[128,35785,160],{"emptyLinePlaceholder":159},[128,35787,35788],{"class":130,"line":754},[128,35789,160],{"emptyLinePlaceholder":159},[128,35791,35792],{"class":130,"line":764},[128,35793,35794],{"class":3814},"    # 初始化参数\n",[128,35796,35797],{"class":130,"line":782},[128,35798,35799],{"class":3814},"    # 最高准确度\n",[128,35801,35802,35805,35807],{"class":130,"line":787},[128,35803,35804],{"class":138},"    best_acc",[128,35806,270],{"class":134},[128,35808,35809],{"class":166},"0.0\n",[128,35811,35812],{"class":130,"line":795},[128,35813,35814],{"class":3814},"    # 训练集损失列表\n",[128,35816,35817,35820,35822],{"class":130,"line":807},[128,35818,35819],{"class":138},"    train_loss_all",[128,35821,270],{"class":134},[128,35823,35824],{"class":138},"[]\n",[128,35826,35827],{"class":130,"line":813},[128,35828,35829],{"class":3814},"    # 验证集函数列表\n",[128,35831,35832,35835,35837],{"class":130,"line":818},[128,35833,35834],{"class":138},"    val_loss_all",[128,35836,270],{"class":134},[128,35838,35824],{"class":138},[128,35840,35841],{"class":130,"line":835},[128,35842,35843],{"class":3814},"    # 训练集准确度列表\n",[128,35845,35846,35849,35851],{"class":130,"line":851},[128,35847,35848],{"class":138},"    train_acc_all",[128,35850,270],{"class":134},[128,35852,35824],{"class":138},[128,35854,35855],{"class":130,"line":867},[128,35856,35857],{"class":3814},"    # 验证集准确度列表\n",[128,35859,35860,35863,35865],{"class":130,"line":872},[128,35861,35862],{"class":138},"    val_acc_all",[128,35864,270],{"class":134},[128,35866,35824],{"class":138},[128,35868,35869],{"class":130,"line":878},[128,35870,160],{"emptyLinePlaceholder":159},[128,35872,35873],{"class":130,"line":887},[128,35874,35875],{"class":3814},"    # 保存当前时间--->方便看每轮训练的时间\n",[128,35877,35878,35881,35883],{"class":130,"line":896},[128,35879,35880],{"class":138},"    since",[128,35882,270],{"class":134},[128,35884,35885],{"class":138},"time.time()\n",[128,35887,35888],{"class":130,"line":905},[128,35889,160],{"emptyLinePlaceholder":159},[128,35891,35892],{"class":130,"line":914},[128,35893,160],{"emptyLinePlaceholder":159},[128,35895,35896],{"class":130,"line":920},[128,35897,35898],{"class":3814},"    # 准备工作完成--->开始训练模型\n",[128,35900,35901,35903,35906,35908,35911],{"class":130,"line":926},[128,35902,543],{"class":134},[128,35904,35905],{"class":138}," epoch ",[128,35907,549],{"class":134},[128,35909,35910],{"class":166}," range",[128,35912,35913],{"class":138},"(num_epochs):\n",[128,35915,35916,35918,35920,35923,35926,35928,35930,35932,35935,35937,35939],{"class":130,"line":938},[128,35917,313],{"class":166},[128,35919,253],{"class":138},[128,35921,35922],{"class":176},"\"Epoch ",[128,35924,35925],{"class":166},"{}",[128,35927,4333],{"class":176},[128,35929,35925],{"class":166},[128,35931,1376],{"class":176},[128,35933,35934],{"class":138},".format(epoch,num_epochs",[128,35936,4281],{"class":134},[128,35938,2592],{"class":166},[128,35940,3034],{"class":138},[128,35942,35943,35945,35947,35950,35952,35954],{"class":130,"line":943},[128,35944,313],{"class":166},[128,35946,253],{"class":138},[128,35948,35949],{"class":176},"\"-\"",[128,35951,4205],{"class":134},[128,35953,4196],{"class":166},[128,35955,180],{"class":138},[128,35957,35958],{"class":130,"line":948},[128,35959,160],{"emptyLinePlaceholder":159},[128,35961,35962],{"class":130,"line":958},[128,35963,35964],{"class":3814},"        # 初始化参数\n",[128,35966,35967],{"class":130,"line":974},[128,35968,35969],{"class":3814},"        # 训练集损失函数\n",[128,35971,35972,35975,35977],{"class":130,"line":985},[128,35973,35974],{"class":138},"        train_loss",[128,35976,270],{"class":134},[128,35978,35809],{"class":166},[128,35980,35981],{"class":130,"line":990},[128,35982,35983],{"class":3814},"        # 训练集准确度\n",[128,35985,35986,35989,35991],{"class":130,"line":1005},[128,35987,35988],{"class":138},"        train_corrects",[128,35990,270],{"class":134},[128,35992,6656],{"class":166},[128,35994,35995],{"class":130,"line":1017},[128,35996,35997],{"class":3814},"        # 验证集损失函数\n",[128,35999,36000,36003,36005],{"class":130,"line":1022},[128,36001,36002],{"class":138},"        val_loss",[128,36004,270],{"class":134},[128,36006,35809],{"class":166},[128,36008,36009],{"class":130,"line":1027},[128,36010,36011],{"class":3814},"        # 验证集准确度\n",[128,36013,36014,36017,36019],{"class":130,"line":1033},[128,36015,36016],{"class":138},"        val_corrects",[128,36018,270],{"class":134},[128,36020,6656],{"class":166},[128,36022,36023],{"class":130,"line":1038},[128,36024,36025],{"class":3814},"        # 训练集样本数量\n",[128,36027,36028,36031,36033],{"class":130,"line":1050},[128,36029,36030],{"class":138},"        train_num",[128,36032,270],{"class":134},[128,36034,6656],{"class":166},[128,36036,36037],{"class":130,"line":1055},[128,36038,36039],{"class":3814},"        # 验证集样本数量\n",[128,36041,36042,36045,36047],{"class":130,"line":1060},[128,36043,36044],{"class":138},"        val_num",[128,36046,270],{"class":134},[128,36048,6656],{"class":166},[128,36050,36051],{"class":130,"line":1070},[128,36052,36053],{"class":3814},"        # 将数据放到设备,并开始训练\n",[128,36055,36056,36058,36060,36062,36064],{"class":130,"line":1086},[128,36057,2141],{"class":134},[128,36059,35070],{"class":138},[128,36061,549],{"class":134},[128,36063,35075],{"class":166},[128,36065,36066],{"class":138},"(train_dataloader):\n",[128,36068,36069],{"class":130,"line":1095},[128,36070,36071],{"class":3814},"            # 将特征放入到训练设备\n",[128,36073,36074,36077,36079],{"class":130,"line":1100},[128,36075,36076],{"class":138},"            b_x",[128,36078,270],{"class":134},[128,36080,36081],{"class":138},"b_x.to(device)\n",[128,36083,36084],{"class":130,"line":1113},[128,36085,36086],{"class":3814},"            # 将标签放入到训练设备当中\n",[128,36088,36089,36092,36094],{"class":130,"line":1124},[128,36090,36091],{"class":138},"            b_y",[128,36093,270],{"class":134},[128,36095,36096],{"class":138},"b_y.to(device)\n",[128,36098,36099],{"class":130,"line":1129},[128,36100,36101],{"class":3814},"            # 设置模型为训练模式\n",[128,36103,36104],{"class":130,"line":1134},[128,36105,36106],{"class":138},"            model.train()\n",[128,36108,36109],{"class":130,"line":1150},[128,36110,36111],{"class":3814},"            # 将数据放到模型当中,开始前向传播\n",[128,36113,36114],{"class":130,"line":1164},[128,36115,36116],{"class":3814},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[128,36118,36119,36122,36124],{"class":130,"line":1178},[128,36120,36121],{"class":138},"            output",[128,36123,270],{"class":134},[128,36125,36126],{"class":138},"model(b_x)\n",[128,36128,36129],{"class":130,"line":1183},[128,36130,36131],{"class":3814},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[128,36133,36134,36137,36139,36142,36145,36147,36149],{"class":130,"line":1199},[128,36135,36136],{"class":138},"            pre_lab",[128,36138,270],{"class":134},[128,36140,36141],{"class":138},"torch.argmax(output,",[128,36143,36144],{"class":266},"dim",[128,36146,270],{"class":134},[128,36148,2592],{"class":166},[128,36150,180],{"class":138},[128,36152,36153],{"class":130,"line":1214},[128,36154,36155],{"class":3814},"            # 计算每一个batch的损失函数\n",[128,36157,36158,36161,36163],{"class":130,"line":1229},[128,36159,36160],{"class":138},"            loss",[128,36162,270],{"class":134},[128,36164,36165],{"class":138},"criterion(output,b_y)\n",[128,36167,36168],{"class":130,"line":1234},[128,36169,36170],{"class":3814},"            # 将梯度初始化为0\n",[128,36172,36173],{"class":130,"line":1239},[128,36174,36175],{"class":138},"            optimizer.zero_grad()\n",[128,36177,36178],{"class":130,"line":1251},[128,36179,36180],{"class":3814},"            # 梯度置为0后再进行反向传播\n",[128,36182,36183],{"class":130,"line":1256},[128,36184,36185],{"class":138},"            loss.backward()\n",[128,36187,36188],{"class":130,"line":1261},[128,36189,36190],{"class":3814},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[128,36192,36193],{"class":130,"line":1271},[128,36194,36195],{"class":138},"            optimizer.step()\n",[128,36197,36198],{"class":130,"line":1287},[128,36199,36200],{"class":3814},"            # loss.item()指的是batch的平均损失\n",[128,36202,36203,36206,36208,36211,36213,36216,36218],{"class":130,"line":1296},[128,36204,36205],{"class":138},"            train_loss",[128,36207,13023],{"class":134},[128,36209,36210],{"class":138},"loss.item()",[128,36212,4205],{"class":134},[128,36214,36215],{"class":138},"b_x.size(",[128,36217,2452],{"class":166},[128,36219,180],{"class":138},[128,36221,36222],{"class":130,"line":1301},[128,36223,36224],{"class":3814},"            # 计算每个批次中正确预测的数量\n",[128,36226,36227,36230,36232,36235,36237],{"class":130,"line":1314},[128,36228,36229],{"class":138},"            train_corrects",[128,36231,13023],{"class":134},[128,36233,36234],{"class":138},"torch.sum(pre_lab",[128,36236,570],{"class":134},[128,36238,36239],{"class":138},"b_y.data)\n",[128,36241,36242],{"class":130,"line":1325},[128,36243,36244],{"class":3814},"            # 计算目前为止一共处理了多少样本\n",[128,36246,36247,36250,36252,36254,36256],{"class":130,"line":1330},[128,36248,36249],{"class":138},"            train_num",[128,36251,13023],{"class":134},[128,36253,36215],{"class":138},[128,36255,2452],{"class":166},[128,36257,180],{"class":138},[128,36259,36260],{"class":130,"line":1335},[128,36261,36262],{"class":3814},"        # 验证数据\n",[128,36264,36265,36267,36270,36272,36274],{"class":130,"line":1341},[128,36266,2141],{"class":134},[128,36268,36269],{"class":138}," step ,(b_x,b_y) ",[128,36271,549],{"class":134},[128,36273,35075],{"class":166},[128,36275,36276],{"class":138},"(val_dataloader):\n",[128,36278,36279],{"class":130,"line":1346},[128,36280,36281],{"class":3814},"            # 将特征放到验证设备当中\n",[128,36283,36284,36286,36288],{"class":130,"line":1351},[128,36285,36076],{"class":138},[128,36287,270],{"class":134},[128,36289,36081],{"class":138},[128,36291,36292],{"class":130,"line":1362},[128,36293,36294],{"class":3814},"            # 将标签放到放到训练设备当中\n",[128,36296,36297,36299,36301],{"class":130,"line":1370},[128,36298,36091],{"class":138},[128,36300,270],{"class":134},[128,36302,36096],{"class":138},[128,36304,36305],{"class":130,"line":1397},[128,36306,36307],{"class":3814},"            # 开启验证模式，设置模型为评估模式\n",[128,36309,36310],{"class":130,"line":1417},[128,36311,36312],{"class":138},"            model.eval()\n",[128,36314,36315,36318],{"class":130,"line":1437},[128,36316,36317],{"class":134},"            with",[128,36319,36320],{"class":138}," torch.no_grad():\n",[128,36322,36323],{"class":130,"line":1458},[128,36324,36325],{"class":3814},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[128,36327,36328,36331,36333],{"class":130,"line":1464},[128,36329,36330],{"class":138},"                output ",[128,36332,270],{"class":134},[128,36334,36335],{"class":138}," model(b_x)\n",[128,36337,36338],{"class":130,"line":1469},[128,36339,36340],{"class":3814},"                # 查找每一行中最大值对应的下标\n",[128,36342,36343,36346,36348,36351,36353,36355,36357],{"class":130,"line":1474},[128,36344,36345],{"class":138},"                pre_lab ",[128,36347,270],{"class":134},[128,36349,36350],{"class":138}," torch.argmax(output, ",[128,36352,36144],{"class":266},[128,36354,270],{"class":134},[128,36356,2592],{"class":166},[128,36358,180],{"class":138},[128,36360,36361],{"class":130,"line":1484},[128,36362,36363],{"class":3814},"                # 计算验证集上的当前 batch 损失\n",[128,36365,36366,36369,36371],{"class":130,"line":1493},[128,36367,36368],{"class":138},"                val_batch_loss ",[128,36370,270],{"class":134},[128,36372,36373],{"class":138}," criterion(output, b_y)\n",[128,36375,36376],{"class":130,"line":1505},[128,36377,36378],{"class":3814},"                # 对损失函数进行累加（按样本数加权）\n",[128,36380,36381,36384,36386,36389,36391,36394,36396],{"class":130,"line":1510},[128,36382,36383],{"class":138},"                val_loss ",[128,36385,13023],{"class":134},[128,36387,36388],{"class":138}," val_batch_loss.item() ",[128,36390,4205],{"class":134},[128,36392,36393],{"class":138}," b_x.size(",[128,36395,2452],{"class":166},[128,36397,180],{"class":138},[128,36399,36400,36403,36405,36408,36410],{"class":130,"line":1515},[128,36401,36402],{"class":138},"                val_corrects ",[128,36404,13023],{"class":134},[128,36406,36407],{"class":138}," torch.sum(pre_lab ",[128,36409,570],{"class":134},[128,36411,36412],{"class":138}," b_y.data)\n",[128,36414,36415],{"class":130,"line":1543},[128,36416,36417],{"class":3814},"                # 当前用于验证的样本数量\n",[128,36419,36420,36423,36425,36427,36429],{"class":130,"line":1554},[128,36421,36422],{"class":138},"            val_num ",[128,36424,13023],{"class":134},[128,36426,36393],{"class":138},[128,36428,2452],{"class":166},[128,36430,180],{"class":138},[128,36432,36433],{"class":130,"line":1560},[128,36434,36435],{"class":3814},"        # 计算并保存每一次迭代的loss值和准确率\n",[128,36437,36438],{"class":130,"line":1565},[128,36439,36440],{"class":3814},"        # 计算并保存训练集的loss值\n",[128,36442,36443,36446,36448],{"class":130,"line":1570},[128,36444,36445],{"class":138},"        train_loss_all.append(train_loss",[128,36447,4333],{"class":134},[128,36449,36450],{"class":138},"train_num)\n",[128,36452,36453],{"class":130,"line":1580},[128,36454,36455],{"class":3814},"        # 取双精度\n",[128,36457,36458],{"class":130,"line":1591},[128,36459,36460],{"class":3814},"        # 计算并保存训练集的准确率\n",[128,36462,36463,36466,36468],{"class":130,"line":1596},[128,36464,36465],{"class":138},"        train_acc_all.append(train_corrects.double().item()",[128,36467,4333],{"class":134},[128,36469,36450],{"class":138},[128,36471,36472],{"class":130,"line":1605},[128,36473,36474],{"class":3814},"        # 计算并保存验证集的loss值\n",[128,36476,36477,36480,36482],{"class":130,"line":1611},[128,36478,36479],{"class":138},"        val_loss_all.append(val_loss",[128,36481,4333],{"class":134},[128,36483,36484],{"class":138},"val_num)\n",[128,36486,36487],{"class":130,"line":1628},[128,36488,36489],{"class":3814},"        # 计算并保存验证集的准确率\n",[128,36491,36492,36495,36497],{"class":130,"line":1633},[128,36493,36494],{"class":138},"        val_acc_all.append(val_corrects.double().item()",[128,36496,4333],{"class":134},[128,36498,36484],{"class":138},[128,36500,36501],{"class":130,"line":1648},[128,36502,160],{"emptyLinePlaceholder":159},[128,36504,36505],{"class":130,"line":1654},[128,36506,36507],{"class":3814},"        # 打印训练一轮的loss值和准确率\n",[128,36509,36510,36512,36514,36516,36518,36521,36523,36526,36528,36531,36533,36535,36537,36539,36542,36544,36546,36549,36551,36553],{"class":130,"line":1669},[128,36511,313],{"class":166},[128,36513,253],{"class":138},[128,36515,7160],{"class":176},[128,36517,35925],{"class":166},[128,36519,36520],{"class":176},"train loss:",[128,36522,1379],{"class":166},[128,36524,36525],{"class":134},":.4f",[128,36527,1453],{"class":166},[128,36529,36530],{"class":176}," train acc:",[128,36532,1379],{"class":166},[128,36534,36525],{"class":134},[128,36536,1453],{"class":166},[128,36538,7160],{"class":176},[128,36540,36541],{"class":138},".format(epoch,train_loss_all[",[128,36543,4281],{"class":134},[128,36545,2592],{"class":166},[128,36547,36548],{"class":138},"],train_acc_all[",[128,36550,4281],{"class":134},[128,36552,2592],{"class":166},[128,36554,36555],{"class":138},"]))\n",[128,36557,36558,36560,36562,36564,36566,36569,36571,36573,36575,36578,36580,36582,36584,36586,36589,36591,36593,36596,36598,36600],{"class":130,"line":1675},[128,36559,313],{"class":166},[128,36561,253],{"class":138},[128,36563,7160],{"class":176},[128,36565,35925],{"class":166},[128,36567,36568],{"class":176},"val loss:",[128,36570,1379],{"class":166},[128,36572,36525],{"class":134},[128,36574,1453],{"class":166},[128,36576,36577],{"class":176}," val acc:",[128,36579,1379],{"class":166},[128,36581,36525],{"class":134},[128,36583,1453],{"class":166},[128,36585,7160],{"class":176},[128,36587,36588],{"class":138},".format(epoch,val_loss_all[",[128,36590,4281],{"class":134},[128,36592,2592],{"class":166},[128,36594,36595],{"class":138},"],val_acc_all[",[128,36597,4281],{"class":134},[128,36599,2592],{"class":166},[128,36601,36555],{"class":138},[128,36603,36604],{"class":130,"line":1689},[128,36605,160],{"emptyLinePlaceholder":159},[128,36607,36608],{"class":130,"line":1695},[128,36609,36610],{"class":3814},"        # 判断准确度--->保存最优模型\n",[128,36612,36613,36615,36618,36620,36622,36624,36626],{"class":130,"line":1709},[128,36614,558],{"class":134},[128,36616,36617],{"class":138}," val_acc_all[",[128,36619,4281],{"class":134},[128,36621,2592],{"class":166},[128,36623,1388],{"class":138},[128,36625,4705],{"class":134},[128,36627,36628],{"class":138},"best_acc:\n",[128,36630,36631],{"class":130,"line":1715},[128,36632,36633],{"class":3814},"            # 保存当前模型准确度\n",[128,36635,36636,36639,36641,36643,36646,36648,36650],{"class":130,"line":1729},[128,36637,36638],{"class":138},"            best_acc:",[128,36640,3798],{"class":166},[128,36642,270],{"class":134},[128,36644,36645],{"class":138},"val_acc_all[",[128,36647,4281],{"class":134},[128,36649,2592],{"class":166},[128,36651,2376],{"class":138},[128,36653,36654],{"class":130,"line":1735},[128,36655,36656],{"class":3814},"            # 保存当前的准确度\n",[128,36658,36659],{"class":130,"line":1749},[128,36660,36661],{"class":3814},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[128,36663,36664,36667,36669],{"class":130,"line":1761},[128,36665,36666],{"class":138},"            best_model_wts",[128,36668,270],{"class":134},[128,36670,35781],{"class":138},[128,36672,36673],{"class":130,"line":1767},[128,36674,160],{"emptyLinePlaceholder":159},[128,36676,36677],{"class":130,"line":1775},[128,36678,36679],{"class":3814},"        # 计算耗时\n",[128,36681,36682,36685,36687,36690,36692],{"class":130,"line":1787},[128,36683,36684],{"class":138},"        time_use",[128,36686,270],{"class":134},[128,36688,36689],{"class":138},"time.time()",[128,36691,4281],{"class":134},[128,36693,36694],{"class":138},"since\n",[128,36696,36697,36699,36701,36704,36706,36709,36711,36713,36715,36717,36719,36722,36725,36728,36730,36733,36735,36737],{"class":130,"line":1792},[128,36698,313],{"class":166},[128,36700,253],{"class":138},[128,36702,36703],{"class":176},"'训练和验证耗费的时间",[128,36705,1379],{"class":166},[128,36707,36708],{"class":134},":.0f",[128,36710,1453],{"class":166},[128,36712,4293],{"class":176},[128,36714,1379],{"class":166},[128,36716,36708],{"class":134},[128,36718,1453],{"class":166},[128,36720,36721],{"class":176},"s'",[128,36723,36724],{"class":138},".format(time_use",[128,36726,36727],{"class":134},"\u002F\u002F",[128,36729,4654],{"class":166},[128,36731,36732],{"class":138},",time_use",[128,36734,4078],{"class":134},[128,36736,4654],{"class":166},[128,36738,3034],{"class":138},[128,36740,36741],{"class":130,"line":1797},[128,36742,36743],{"class":3814},"    # 选择最优参数\n",[128,36745,36746],{"class":130,"line":1814},[128,36747,36748],{"class":3814},"    # 加载最高准确率下的模型参数\n",[128,36750,36752],{"class":130,"line":36751},167,[128,36753,36754],{"class":3814},"    # model.load_state_dict(best_model_wts)\n",[128,36756,36758,36761,36764],{"class":130,"line":36757},168,[128,36759,36760],{"class":138},"    torch.save(model.state_dict(best_model_wts), ",[128,36762,36763],{"class":176},"'.\u002Fbest_model.pth'",[128,36765,180],{"class":138},[128,36767,36769],{"class":130,"line":36768},169,[128,36770,36771],{"class":3814},"    # 或者写成\n",[128,36773,36775],{"class":130,"line":36774},170,[128,36776,36777],{"class":3814},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[128,36779,36781],{"class":130,"line":36780},171,[128,36782,36783],{"class":3814},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[128,36785,36787,36790,36792,36795,36798,36800],{"class":130,"line":36786},172,[128,36788,36789],{"class":138},"    train_process",[128,36791,270],{"class":134},[128,36793,36794],{"class":138},"pd.DataFrame(",[128,36796,36797],{"class":266},"data",[128,36799,270],{"class":134},[128,36801,5157],{"class":138},[128,36803,36805,36808,36810,36813],{"class":130,"line":36804},173,[128,36806,36807],{"class":176},"        \"epoch\"",[128,36809,4607],{"class":138},[128,36811,36812],{"class":166},"range",[128,36814,36815],{"class":138},"(num_epochs),\n",[128,36817,36819,36822],{"class":130,"line":36818},174,[128,36820,36821],{"class":176},"        \"train_loss_all\"",[128,36823,36824],{"class":138},":train_loss_all,\n",[128,36826,36828,36831],{"class":130,"line":36827},175,[128,36829,36830],{"class":176},"        \"val_loss_all\"",[128,36832,36833],{"class":138},":val_loss_all,\n",[128,36835,36837,36840],{"class":130,"line":36836},176,[128,36838,36839],{"class":176},"        \"train_acc_all\"",[128,36841,36842],{"class":138},":train_acc_all,\n",[128,36844,36846,36849],{"class":130,"line":36845},177,[128,36847,36848],{"class":176},"        \"val_acc_all\"",[128,36850,36851],{"class":138},":val_acc_all\n",[128,36853,36855],{"class":130,"line":36854},178,[128,36856,917],{"class":138},[128,36858,36860],{"class":130,"line":36859},179,[128,36861,36862],{"class":3814},"    # 返回训练保存的过程\n",[128,36864,36866,36868],{"class":130,"line":36865},180,[128,36867,587],{"class":134},[128,36869,36870],{"class":138}," train_process\n",[128,36872,36874],{"class":130,"line":36873},181,[128,36875,160],{"emptyLinePlaceholder":159},[128,36877,36879],{"class":130,"line":36878},182,[128,36880,36881],{"class":3814},"# 将loss值和精度按照图片的形式展示出来\n",[128,36883,36885,36887,36890],{"class":130,"line":36884},183,[128,36886,196],{"class":134},[128,36888,36889],{"class":199}," matplot_acc_loss",[128,36891,36892],{"class":138},"(train_process):\n",[128,36894,36896],{"class":130,"line":36895},184,[128,36897,36898],{"class":3814},"    # 设置图的大小\n",[128,36900,36902,36905,36907,36909,36911,36913,36915,36917],{"class":130,"line":36901},185,[128,36903,36904],{"class":138},"    plt.figure(",[128,36906,35162],{"class":266},[128,36908,270],{"class":134},[128,36910,253],{"class":138},[128,36912,4247],{"class":166},[128,36914,4128],{"class":138},[128,36916,4043],{"class":166},[128,36918,3034],{"class":138},[128,36920,36922],{"class":130,"line":36921},186,[128,36923,36924],{"class":3814},"    # 设置图中有几张图\n",[128,36926,36928],{"class":130,"line":36927},187,[128,36929,36930],{"class":3814},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[128,36932,36934],{"class":130,"line":36933},188,[128,36935,36936],{"class":3814},"    # ①loss图\n",[128,36938,36940,36942,36944,36946,36948,36950,36952],{"class":130,"line":36939},189,[128,36941,35196],{"class":138},[128,36943,2592],{"class":166},[128,36945,4128],{"class":138},[128,36947,409],{"class":166},[128,36949,4128],{"class":138},[128,36951,2592],{"class":166},[128,36953,180],{"class":138},[128,36955,36957],{"class":130,"line":36956},190,[128,36958,36959],{"class":3814},"    # 补充:\n",[128,36961,36963],{"class":130,"line":36962},191,[128,36964,36965],{"class":3814},"    # plt.subplot(nrows, ncols, index)\n",[128,36967,36969],{"class":130,"line":36968},192,[128,36970,36971],{"class":3814},"    # nrows：行数\n",[128,36973,36975],{"class":130,"line":36974},193,[128,36976,36977],{"class":3814},"    # ncols：列数\n",[128,36979,36981],{"class":130,"line":36980},194,[128,36982,36983],{"class":3814},"    # index：目前选中第几个子图（从1开始）\n",[128,36985,36987,36990,36993,36996,36999,37001,37004,37006,37009],{"class":130,"line":36986},195,[128,36988,36989],{"class":138},"    plt.plot(train_process[",[128,36991,36992],{"class":176},"\"epoch\"",[128,36994,36995],{"class":138},"],train_process.train_loss_all,",[128,36997,36998],{"class":176},"'ro-'",[128,37000,4128],{"class":138},[128,37002,37003],{"class":266},"label",[128,37005,270],{"class":134},[128,37007,37008],{"class":176},"'train loss'",[128,37010,180],{"class":138},[128,37012,37014,37016,37018,37021,37024,37026,37028,37030,37033],{"class":130,"line":37013},196,[128,37015,36989],{"class":138},[128,37017,36992],{"class":176},[128,37019,37020],{"class":138},"],train_process.val_loss_all,",[128,37022,37023],{"class":176},"'bs--'",[128,37025,4128],{"class":138},[128,37027,37003],{"class":266},[128,37029,270],{"class":134},[128,37031,37032],{"class":176},"'val loss'",[128,37034,180],{"class":138},[128,37036,37038],{"class":130,"line":37037},197,[128,37039,37040],{"class":3814},"    # 添加一个图例\n",[128,37042,37044],{"class":130,"line":37043},198,[128,37045,37046],{"class":138},"    plt.legend()\n",[128,37048,37050],{"class":130,"line":37049},199,[128,37051,37052],{"class":3814},"    # 给轴添加标签\n",[128,37054,37056,37059,37062],{"class":130,"line":37055},200,[128,37057,37058],{"class":138},"    plt.xlabel(",[128,37060,37061],{"class":176},"'epoch'",[128,37063,180],{"class":138},[128,37065,37067,37070,37073],{"class":130,"line":37066},201,[128,37068,37069],{"class":138},"    plt.ylabel(",[128,37071,37072],{"class":176},"'loss'",[128,37074,180],{"class":138},[128,37076,37078],{"class":130,"line":37077},202,[128,37079,37080],{"class":3814},"    # ②准确度图\n",[128,37082,37084,37086,37088,37090,37092,37094,37096],{"class":130,"line":37083},203,[128,37085,35196],{"class":138},[128,37087,2592],{"class":166},[128,37089,4128],{"class":138},[128,37091,409],{"class":166},[128,37093,4128],{"class":138},[128,37095,409],{"class":166},[128,37097,180],{"class":138},[128,37099,37101,37103,37105,37108,37110,37112,37114,37116,37119],{"class":130,"line":37100},204,[128,37102,36989],{"class":138},[128,37104,36992],{"class":176},[128,37106,37107],{"class":138},"],train_process.train_acc_all,",[128,37109,36998],{"class":176},[128,37111,4128],{"class":138},[128,37113,37003],{"class":266},[128,37115,270],{"class":134},[128,37117,37118],{"class":176},"'train acc'",[128,37120,180],{"class":138},[128,37122,37124,37126,37128,37131,37133,37135,37137,37139,37142],{"class":130,"line":37123},205,[128,37125,36989],{"class":138},[128,37127,36992],{"class":176},[128,37129,37130],{"class":138},"],train_process.val_acc_all,",[128,37132,37023],{"class":176},[128,37134,4128],{"class":138},[128,37136,37003],{"class":266},[128,37138,270],{"class":134},[128,37140,37141],{"class":176},"'val acc'",[128,37143,180],{"class":138},[128,37145,37147],{"class":130,"line":37146},206,[128,37148,37149],{"class":3814},"    # 添加图例\n",[128,37151,37153],{"class":130,"line":37152},207,[128,37154,37046],{"class":138},[128,37156,37158,37160,37162],{"class":130,"line":37157},208,[128,37159,37058],{"class":138},[128,37161,36992],{"class":176},[128,37163,180],{"class":138},[128,37165,37167,37169,37172],{"class":130,"line":37166},209,[128,37168,37069],{"class":138},[128,37170,37171],{"class":176},"\"acc\"",[128,37173,180],{"class":138},[128,37175,37177],{"class":130,"line":37176},210,[128,37178,37179],{"class":138},"    plt.show()\n",[128,37181,37183],{"class":130,"line":37182},211,[128,37184,160],{"emptyLinePlaceholder":159},[128,37186,37188],{"class":130,"line":37187},212,[128,37189,37190],{"class":3814},"# 正式开始训练:\n",[128,37192,37194,37196,37198,37200,37202],{"class":130,"line":37193},213,[128,37195,1800],{"class":134},[128,37197,1803],{"class":166},[128,37199,570],{"class":134},[128,37201,34697],{"class":176},[128,37203,241],{"class":138},[128,37205,37207],{"class":130,"line":37206},214,[128,37208,37209],{"class":3814},"    # 将模型实例化\n",[128,37211,37213,37216,37218],{"class":130,"line":37212},215,[128,37214,37215],{"class":138},"    LeNet",[128,37217,270],{"class":134},[128,37219,37220],{"class":138},"LeNet()\n",[128,37222,37224,37227,37229],{"class":130,"line":37223},216,[128,37225,37226],{"class":138},"    train_dataloader,val_dataloader",[128,37228,270],{"class":134},[128,37230,37231],{"class":138},"train_val_data_process()\n",[128,37233,37235,37237,37239,37242,37245,37247,37249],{"class":130,"line":37234},217,[128,37236,36789],{"class":138},[128,37238,270],{"class":134},[128,37240,37241],{"class":138},"train_model_process(LeNet,train_dataloader,val_dataloader,",[128,37243,37244],{"class":266},"num_epochs",[128,37246,270],{"class":134},[128,37248,4449],{"class":166},[128,37250,180],{"class":138},[128,37252,37254],{"class":130,"line":37253},218,[128,37255,37256],{"class":138},"    matplot_acc_loss(train_process)\n",[19,37258,37259],{},"画图的补充点学习：",[19,37261,37262],{},[5074,37263],{"alt":112,"src":37264},"\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,37266,37267],{"start":156},[29,37268,37269],{},"测试",[106,37271,37273],{"className":122,"code":37272,"language":124,"meta":112,"style":112},"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",[114,37274,37275,37281,37291,37303,37313,37318,37328,37338,37342,37347,37356,37373,37384,37401,37412,37428,37433,37444,37455,37466,37473,37477,37482,37492,37497,37514,37522,37526,37531,37540,37549,37553,37558,37563,37568,37574,37579,37591,37601,37611,37616,37620,37625,37634,37639,37655,37660,37665,37670,37684,37689,37703,37707,37712,37727,37732,37744,37748,37753,37765,37770,37778,37783,37788,37798,37803,37812,37817,37822,37826,37831,37836,37852,37860,37865,37870,37929,37935,37940,37951,37959,37967,37971,37976,37980,37985,37993,37998,38014,38019,38029,38039],{"__ignoreMap":112},[128,37276,37277,37279],{"class":130,"line":131},[128,37278,135],{"class":134},[128,37280,33876],{"class":138},[128,37282,37283,37285,37287,37289],{"class":130,"line":142},[128,37284,135],{"class":134},[128,37286,34885],{"class":138},[128,37288,279],{"class":134},[128,37290,34890],{"class":138},[128,37292,37293,37295,37298,37300],{"class":130,"line":156},[128,37294,145],{"class":134},[128,37296,37297],{"class":138}," jupyter_client.consoleapp ",[128,37299,135],{"class":134},[128,37301,37302],{"class":138}," classes\n",[128,37304,37305,37307,37309,37311],{"class":130,"line":163},[128,37306,145],{"class":134},[128,37308,34868],{"class":138},[128,37310,135],{"class":134},[128,37312,34873],{"class":138},[128,37314,37315],{"class":130,"line":183},[128,37316,37317],{"class":3814},"# 导入数据集\n",[128,37319,37320,37322,37324,37326],{"class":130,"line":188},[128,37321,145],{"class":134},[128,37323,34839],{"class":138},[128,37325,135],{"class":134},[128,37327,34844],{"class":138},[128,37329,37330,37332,37334,37336],{"class":130,"line":193},[128,37331,145],{"class":134},[128,37333,35383],{"class":138},[128,37335,135],{"class":134},[128,37337,35388],{"class":138},[128,37339,37340],{"class":130,"line":206},[128,37341,160],{"emptyLinePlaceholder":159},[128,37343,37344],{"class":130,"line":221},[128,37345,37346],{"class":3814},"# 测试数据处理\n",[128,37348,37349,37351,37354],{"class":130,"line":230},[128,37350,196],{"class":134},[128,37352,37353],{"class":199}," test_data_process",[128,37355,203],{"class":138},[128,37357,37358,37361,37363,37365,37367,37369,37371],{"class":130,"line":235},[128,37359,37360],{"class":138},"    test_data",[128,37362,270],{"class":134},[128,37364,34925],{"class":138},[128,37366,34928],{"class":266},[128,37368,270],{"class":134},[128,37370,34933],{"class":176},[128,37372,2665],{"class":138},[128,37374,37375,37378,37380,37382],{"class":130,"line":244},[128,37376,37377],{"class":266},"                           train",[128,37379,270],{"class":134},[128,37381,399],{"class":166},[128,37383,2665],{"class":138},[128,37385,37386,37389,37391,37393,37395,37397,37399],{"class":130,"line":287},[128,37387,37388],{"class":266},"                           transform",[128,37390,270],{"class":134},[128,37392,34962],{"class":138},[128,37394,34965],{"class":266},[128,37396,270],{"class":134},[128,37398,4648],{"class":166},[128,37400,34973],{"class":138},[128,37402,37403,37406,37408,37410],{"class":130,"line":301},[128,37404,37405],{"class":266},"                           download",[128,37407,270],{"class":134},[128,37409,34945],{"class":166},[128,37411,180],{"class":138},[128,37413,37414,37417,37419,37421,37423,37425],{"class":130,"line":310},[128,37415,37416],{"class":138},"    test_dataloader",[128,37418,270],{"class":134},[128,37420,35003],{"class":138},[128,37422,35006],{"class":266},[128,37424,270],{"class":134},[128,37426,37427],{"class":138},"test_data,\n",[128,37429,37430],{"class":130,"line":323},[128,37431,37432],{"class":3814},"                                    # 这里是一张一张进行测试\n",[128,37434,37435,37438,37440,37442],{"class":130,"line":330},[128,37436,37437],{"class":266},"                                    batch_size",[128,37439,270],{"class":134},[128,37441,2592],{"class":166},[128,37443,2665],{"class":138},[128,37445,37446,37449,37451,37453],{"class":130,"line":335},[128,37447,37448],{"class":266},"                                    shuffle",[128,37450,270],{"class":134},[128,37452,34945],{"class":166},[128,37454,2665],{"class":138},[128,37456,37457,37460,37462,37464],{"class":130,"line":340},[128,37458,37459],{"class":266},"                                    num_workers",[128,37461,270],{"class":134},[128,37463,2452],{"class":166},[128,37465,180],{"class":138},[128,37467,37468,37470],{"class":130,"line":351},[128,37469,587],{"class":134},[128,37471,37472],{"class":138}," test_dataloader\n",[128,37474,37475],{"class":130,"line":384},[128,37476,160],{"emptyLinePlaceholder":159},[128,37478,37479],{"class":130,"line":414},[128,37480,37481],{"class":3814},"# 定义模型测试函数\n",[128,37483,37484,37486,37489],{"class":130,"line":419},[128,37485,196],{"class":134},[128,37487,37488],{"class":199}," test_model_process",[128,37490,37491],{"class":138},"(model,test_dataloader):\n",[128,37493,37494],{"class":130,"line":424},[128,37495,37496],{"class":3814},"    # 将模型放到设备当中，先进行判断\n",[128,37498,37499,37501,37503,37505,37507,37509,37511],{"class":130,"line":434},[128,37500,34709],{"class":138},[128,37502,270],{"class":134},[128,37504,34716],{"class":176},[128,37506,5302],{"class":134},[128,37508,34721],{"class":138},[128,37510,5299],{"class":134},[128,37512,37513],{"class":176}," \"cpu\"\n",[128,37515,37516,37518,37520],{"class":130,"line":447},[128,37517,34761],{"class":138},[128,37519,270],{"class":134},[128,37521,35756],{"class":138},[128,37523,37524],{"class":130,"line":459},[128,37525,160],{"emptyLinePlaceholder":159},[128,37527,37528],{"class":130,"line":471},[128,37529,37530],{"class":3814},"    # 设置初始化参数\n",[128,37532,37533,37536,37538],{"class":130,"line":483},[128,37534,37535],{"class":138},"    test_corrects",[128,37537,270],{"class":134},[128,37539,35809],{"class":166},[128,37541,37542,37545,37547],{"class":130,"line":495},[128,37543,37544],{"class":138},"    test_num",[128,37546,270],{"class":134},[128,37548,6656],{"class":166},[128,37550,37551],{"class":130,"line":507},[128,37552,160],{"emptyLinePlaceholder":159},[128,37554,37555],{"class":130,"line":519},[128,37556,37557],{"class":3814},"    # 进行模型测试\n",[128,37559,37560],{"class":130,"line":524},[128,37561,37562],{"class":3814},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[128,37564,37565],{"class":130,"line":529},[128,37566,37567],{"class":3814},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[128,37569,37570,37572],{"class":130,"line":540},[128,37571,354],{"class":134},[128,37573,36320],{"class":138},[128,37575,37576],{"class":130,"line":555},[128,37577,37578],{"class":3814},"        # 从数据中进行\n",[128,37580,37581,37583,37586,37588],{"class":130,"line":576},[128,37582,2141],{"class":134},[128,37584,37585],{"class":138}," test_data_x,test_data_y ",[128,37587,549],{"class":134},[128,37589,37590],{"class":138}," test_dataloader:\n",[128,37592,37593,37596,37598],{"class":130,"line":584},[128,37594,37595],{"class":138},"            test_data_x",[128,37597,270],{"class":134},[128,37599,37600],{"class":138},"test_data_x.to(device)\n",[128,37602,37603,37606,37608],{"class":130,"line":593},[128,37604,37605],{"class":138},"            test_data_y",[128,37607,270],{"class":134},[128,37609,37610],{"class":138},"test_data_y.to(device)\n",[128,37612,37613],{"class":130,"line":598},[128,37614,37615],{"class":3814},"            # 设置为验证模式\n",[128,37617,37618],{"class":130,"line":603},[128,37619,36312],{"class":138},[128,37621,37622],{"class":130,"line":614},[128,37623,37624],{"class":3814},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[128,37626,37627,37629,37631],{"class":130,"line":625},[128,37628,36121],{"class":138},[128,37630,270],{"class":134},[128,37632,37633],{"class":138},"model(test_data_x)\n",[128,37635,37636],{"class":130,"line":633},[128,37637,37638],{"class":3814},"            # 查找每一行中最大值对应的下标\n",[128,37640,37641,37643,37645,37647,37649,37651,37653],{"class":130,"line":649},[128,37642,36136],{"class":138},[128,37644,270],{"class":134},[128,37646,36141],{"class":138},[128,37648,36144],{"class":266},[128,37650,270],{"class":134},[128,37652,2592],{"class":166},[128,37654,180],{"class":138},[128,37656,37657],{"class":130,"line":660},[128,37658,37659],{"class":3814},"            # 计算正确率\n",[128,37661,37662],{"class":130,"line":673},[128,37663,37664],{"class":3814},"            # .data表示是一个不带梯度信息的tensor\n",[128,37666,37667],{"class":130,"line":678},[128,37668,37669],{"class":3814},"            # 如果预测正确，则准确度test_corrects加1\n",[128,37671,37672,37675,37677,37679,37681],{"class":130,"line":683},[128,37673,37674],{"class":138},"            test_corrects",[128,37676,13023],{"class":134},[128,37678,36234],{"class":138},[128,37680,570],{"class":134},[128,37682,37683],{"class":138},"test_data_y.data)\n",[128,37685,37686],{"class":130,"line":693},[128,37687,37688],{"class":3814},"            # 将所有的测试样本进行累计\n",[128,37690,37691,37694,37696,37699,37701],{"class":130,"line":702},[128,37692,37693],{"class":138},"            test_num",[128,37695,13023],{"class":134},[128,37697,37698],{"class":138},"test_data_x.size(",[128,37700,2452],{"class":166},[128,37702,180],{"class":138},[128,37704,37705],{"class":130,"line":709},[128,37706,160],{"emptyLinePlaceholder":159},[128,37708,37709],{"class":130,"line":723},[128,37710,37711],{"class":3814},"        # 计算准确度\n",[128,37713,37714,37717,37719,37722,37724],{"class":130,"line":732},[128,37715,37716],{"class":138},"        test_acc",[128,37718,270],{"class":134},[128,37720,37721],{"class":138},"test_corrects.double().item()",[128,37723,4333],{"class":134},[128,37725,37726],{"class":138},"test_num\n",[128,37728,37729],{"class":130,"line":744},[128,37730,37731],{"class":3814},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[128,37733,37734,37736,37738,37741],{"class":130,"line":749},[128,37735,313],{"class":166},[128,37737,253],{"class":138},[128,37739,37740],{"class":176},"\"测试的准确率：\"",[128,37742,37743],{"class":138},",test_acc)\n",[128,37745,37746],{"class":130,"line":754},[128,37747,160],{"emptyLinePlaceholder":159},[128,37749,37750],{"class":130,"line":764},[128,37751,37752],{"class":3814},"# 实现模型的测试功能\n",[128,37754,37755,37757,37759,37761,37763],{"class":130,"line":782},[128,37756,1800],{"class":134},[128,37758,1803],{"class":166},[128,37760,570],{"class":134},[128,37762,34697],{"class":176},[128,37764,241],{"class":138},[128,37766,37767],{"class":130,"line":787},[128,37768,37769],{"class":3814},"    # 加载模型\n",[128,37771,37772,37774,37776],{"class":130,"line":795},[128,37773,34761],{"class":138},[128,37775,270],{"class":134},[128,37777,37220],{"class":138},[128,37779,37780],{"class":130,"line":807},[128,37781,37782],{"class":3814},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[128,37784,37785],{"class":130,"line":813},[128,37786,37787],{"class":3814},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[128,37789,37790,37793,37796],{"class":130,"line":818},[128,37791,37792],{"class":138},"    model.load_state_dict(torch.load(",[128,37794,37795],{"class":176},"'best_model.pth'",[128,37797,3034],{"class":138},[128,37799,37800],{"class":130,"line":835},[128,37801,37802],{"class":3814},"    # 数据加载\n",[128,37804,37805,37807,37809],{"class":130,"line":851},[128,37806,37416],{"class":138},[128,37808,270],{"class":134},[128,37810,37811],{"class":138},"test_data_process()\n",[128,37813,37814],{"class":130,"line":867},[128,37815,37816],{"class":3814},"    # 加载模型测试的函数\n",[128,37818,37819],{"class":130,"line":872},[128,37820,37821],{"class":138},"    test_model_process(model,test_dataloader)\n",[128,37823,37824],{"class":130,"line":878},[128,37825,160],{"emptyLinePlaceholder":159},[128,37827,37828],{"class":130,"line":887},[128,37829,37830],{"class":3814},"    # 验证集推理实现：\n",[128,37832,37833],{"class":130,"line":896},[128,37834,37835],{"class":3814},"    # 加载数据加载的更详细一些\n",[128,37837,37838,37840,37842,37844,37846,37848,37850],{"class":130,"line":905},[128,37839,34709],{"class":138},[128,37841,270],{"class":134},[128,37843,34716],{"class":176},[128,37845,5302],{"class":134},[128,37847,34721],{"class":138},[128,37849,5299],{"class":134},[128,37851,37513],{"class":176},[128,37853,37854,37856,37858],{"class":130,"line":914},[128,37855,34761],{"class":138},[128,37857,270],{"class":134},[128,37859,35756],{"class":138},[128,37861,37862],{"class":130,"line":920},[128,37863,37864],{"class":3814},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[128,37866,37867],{"class":130,"line":926},[128,37868,37869],{"class":3814},"    # 顺序不可改变\n",[128,37871,37872,37875,37877,37879,37882,37884,37887,37889,37892,37894,37897,37899,37902,37904,37907,37909,37912,37914,37917,37919,37922,37924,37927],{"class":130,"line":938},[128,37873,37874],{"class":138},"    classes",[128,37876,270],{"class":134},[128,37878,4638],{"class":138},[128,37880,37881],{"class":176},"'T-shirt\u002Ftop'",[128,37883,4128],{"class":138},[128,37885,37886],{"class":176},"'Trouser'",[128,37888,4128],{"class":138},[128,37890,37891],{"class":176},"'Pullover'",[128,37893,4128],{"class":138},[128,37895,37896],{"class":176},"'Dress'",[128,37898,4128],{"class":138},[128,37900,37901],{"class":176},"'Coat'",[128,37903,4128],{"class":138},[128,37905,37906],{"class":176},"'Sandal'",[128,37908,4128],{"class":138},[128,37910,37911],{"class":176},"'Shirt'",[128,37913,4128],{"class":138},[128,37915,37916],{"class":176},"'Sneaker'",[128,37918,4128],{"class":138},[128,37920,37921],{"class":176},"'Bag'",[128,37923,4128],{"class":138},[128,37925,37926],{"class":176},"'Ankle boot'",[128,37928,2376],{"class":138},[128,37930,37931,37933],{"class":130,"line":943},[128,37932,354],{"class":134},[128,37934,36320],{"class":138},[128,37936,37937],{"class":130,"line":948},[128,37938,37939],{"class":3814},"        # 将数据和标签都放到设备当中\n",[128,37941,37942,37944,37947,37949],{"class":130,"line":958},[128,37943,2141],{"class":134},[128,37945,37946],{"class":138}," b_x,b_y ",[128,37948,549],{"class":134},[128,37950,37590],{"class":138},[128,37952,37953,37955,37957],{"class":130,"line":974},[128,37954,36076],{"class":138},[128,37956,270],{"class":134},[128,37958,36081],{"class":138},[128,37960,37961,37963,37965],{"class":130,"line":985},[128,37962,36091],{"class":138},[128,37964,270],{"class":134},[128,37966,36096],{"class":138},[128,37968,37969],{"class":130,"line":990},[128,37970,160],{"emptyLinePlaceholder":159},[128,37972,37973],{"class":130,"line":1005},[128,37974,37975],{"class":3814},"            # 设置模型为验证模式\n",[128,37977,37978],{"class":130,"line":1017},[128,37979,36312],{"class":138},[128,37981,37982],{"class":130,"line":1022},[128,37983,37984],{"class":3814},"            # 模型推理结果\n",[128,37986,37987,37989,37991],{"class":130,"line":1027},[128,37988,36121],{"class":138},[128,37990,270],{"class":134},[128,37992,36126],{"class":138},[128,37994,37995],{"class":130,"line":1033},[128,37996,37997],{"class":3814},"            # 获取最大下标，最大下标就是类别号\n",[128,37999,38000,38002,38004,38006,38008,38010,38012],{"class":130,"line":1038},[128,38001,36136],{"class":138},[128,38003,270],{"class":134},[128,38005,36141],{"class":138},[128,38007,36144],{"class":266},[128,38009,270],{"class":134},[128,38011,2592],{"class":166},[128,38013,180],{"class":138},[128,38015,38016],{"class":130,"line":1050},[128,38017,38018],{"class":3814},"            # 取出张量中的数值\n",[128,38020,38021,38024,38026],{"class":130,"line":1055},[128,38022,38023],{"class":138},"            result",[128,38025,270],{"class":134},[128,38027,38028],{"class":138},"pre_lab.item()\n",[128,38030,38031,38034,38036],{"class":130,"line":1060},[128,38032,38033],{"class":138},"            label",[128,38035,270],{"class":134},[128,38037,38038],{"class":138},"b_y.item()\n",[128,38040,38041,38043,38045,38048,38051,38054,38056,38059],{"class":130,"line":1070},[128,38042,663],{"class":166},[128,38044,253],{"class":138},[128,38046,38047],{"class":176},"\"预测值：\"",[128,38049,38050],{"class":138},",classes[result],",[128,38052,38053],{"class":176},"\"------\"",[128,38055,4128],{"class":138},[128,38057,38058],{"class":176},"\"真实值：\"",[128,38060,38061],{"class":138},",classes[label])\n",[19,38063,38064],{},"（2）AlexNet",[26,38066,38067],{},[29,38068,38069],{},"神经网络构建",[106,38071,38073],{"className":122,"code":38072,"language":124,"meta":112,"style":112},"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",[114,38074,38075,38081,38091,38101,38113,38117,38134,38142,38157,38169,38211,38238,38281,38307,38351,38394,38437,38464,38468,38478,38483,38511,38530,38549,38553,38558,38566,38581,38591,38605,38615,38630,38645,38660,38671,38675,38680,38690,38705,38710,38724,38739,38751,38756,38767,38772,38778,38783,38795,38815,38820,38829],{"__ignoreMap":112},[128,38076,38077,38079],{"class":130,"line":131},[128,38078,135],{"class":134},[128,38080,33876],{"class":138},[128,38082,38083,38085,38087,38089],{"class":130,"line":142},[128,38084,145],{"class":134},[128,38086,34218],{"class":138},[128,38088,135],{"class":134},[128,38090,34223],{"class":138},[128,38092,38093,38095,38097,38099],{"class":130,"line":156},[128,38094,145],{"class":134},[128,38096,34235],{"class":138},[128,38098,135],{"class":134},[128,38100,34240],{"class":138},[128,38102,38103,38105,38108,38110],{"class":130,"line":163},[128,38104,135],{"class":134},[128,38106,38107],{"class":138}," torch.nn.functional ",[128,38109,279],{"class":134},[128,38111,38112],{"class":138}," F\n",[128,38114,38115],{"class":130,"line":183},[128,38116,160],{"emptyLinePlaceholder":159},[128,38118,38119,38121,38124,38126,38128,38130,38132],{"class":130,"line":188},[128,38120,1901],{"class":134},[128,38122,38123],{"class":199}," AlexNet",[128,38125,253],{"class":138},[128,38127,34256],{"class":199},[128,38129,4307],{"class":138},[128,38131,34261],{"class":199},[128,38133,34264],{"class":138},[128,38135,38136,38138,38140],{"class":130,"line":193},[128,38137,1946],{"class":134},[128,38139,2108],{"class":166},[128,38141,1952],{"class":138},[128,38143,38144,38146,38149,38151,38153,38155],{"class":130,"line":206},[128,38145,34292],{"class":166},[128,38147,38148],{"class":138},"(AlexNet,",[128,38150,1970],{"class":166},[128,38152,34300],{"class":138},[128,38154,34303],{"class":166},[128,38156,5563],{"class":138},[128,38158,38159,38161,38164,38166],{"class":130,"line":221},[128,38160,2115],{"class":166},[128,38162,38163],{"class":138},".ReLu",[128,38165,270],{"class":134},[128,38167,38168],{"class":138},"nn.ReLU()\n",[128,38170,38171,38173,38175,38177,38179,38181,38183,38185,38187,38189,38191,38193,38195,38197,38199,38201,38203,38205,38207,38209],{"class":130,"line":230},[128,38172,2115],{"class":166},[128,38174,34321],{"class":138},[128,38176,270],{"class":134},[128,38178,34326],{"class":138},[128,38180,34329],{"class":266},[128,38182,270],{"class":134},[128,38184,2592],{"class":166},[128,38186,4128],{"class":138},[128,38188,34338],{"class":266},[128,38190,270],{"class":134},[128,38192,3962],{"class":166},[128,38194,4128],{"class":138},[128,38196,34347],{"class":266},[128,38198,270],{"class":134},[128,38200,4222],{"class":166},[128,38202,4128],{"class":138},[128,38204,34402],{"class":266},[128,38206,270],{"class":134},[128,38208,4043],{"class":166},[128,38210,180],{"class":138},[128,38212,38213,38215,38217,38219,38222,38224,38226,38228,38230,38232,38234,38236],{"class":130,"line":235},[128,38214,2115],{"class":166},[128,38216,34386],{"class":138},[128,38218,270],{"class":134},[128,38220,38221],{"class":138},"nn.MaxPool2d(",[128,38223,34347],{"class":266},[128,38225,270],{"class":134},[128,38227,3827],{"class":166},[128,38229,4128],{"class":138},[128,38231,34402],{"class":266},[128,38233,270],{"class":134},[128,38235,409],{"class":166},[128,38237,180],{"class":138},[128,38239,38240,38242,38244,38246,38248,38250,38252,38254,38256,38258,38260,38263,38265,38267,38269,38271,38273,38275,38277,38279],{"class":130,"line":244},[128,38241,2115],{"class":166},[128,38243,34415],{"class":138},[128,38245,270],{"class":134},[128,38247,34326],{"class":138},[128,38249,34329],{"class":266},[128,38251,270],{"class":134},[128,38253,3962],{"class":166},[128,38255,4128],{"class":138},[128,38257,34338],{"class":266},[128,38259,270],{"class":134},[128,38261,38262],{"class":166},"256",[128,38264,4128],{"class":138},[128,38266,34347],{"class":266},[128,38268,270],{"class":134},[128,38270,4069],{"class":166},[128,38272,4128],{"class":138},[128,38274,34356],{"class":266},[128,38276,270],{"class":134},[128,38278,409],{"class":166},[128,38280,180],{"class":138},[128,38282,38283,38285,38287,38289,38291,38293,38295,38297,38299,38301,38303,38305],{"class":130,"line":287},[128,38284,2115],{"class":166},[128,38286,34450],{"class":138},[128,38288,270],{"class":134},[128,38290,38221],{"class":138},[128,38292,34347],{"class":266},[128,38294,270],{"class":134},[128,38296,3827],{"class":166},[128,38298,4128],{"class":138},[128,38300,34402],{"class":266},[128,38302,270],{"class":134},[128,38304,409],{"class":166},[128,38306,180],{"class":138},[128,38308,38309,38311,38314,38316,38318,38320,38322,38324,38326,38328,38330,38333,38335,38337,38339,38341,38343,38345,38347,38349],{"class":130,"line":301},[128,38310,2115],{"class":166},[128,38312,38313],{"class":138},".c5",[128,38315,270],{"class":134},[128,38317,34326],{"class":138},[128,38319,34329],{"class":266},[128,38321,270],{"class":134},[128,38323,38262],{"class":166},[128,38325,4128],{"class":138},[128,38327,34338],{"class":266},[128,38329,270],{"class":134},[128,38331,38332],{"class":166},"384",[128,38334,4128],{"class":138},[128,38336,34347],{"class":266},[128,38338,270],{"class":134},[128,38340,3827],{"class":166},[128,38342,4128],{"class":138},[128,38344,34356],{"class":266},[128,38346,270],{"class":134},[128,38348,2592],{"class":166},[128,38350,180],{"class":138},[128,38352,38353,38355,38358,38360,38362,38364,38366,38368,38370,38372,38374,38376,38378,38380,38382,38384,38386,38388,38390,38392],{"class":130,"line":310},[128,38354,2115],{"class":166},[128,38356,38357],{"class":138},".c6",[128,38359,270],{"class":134},[128,38361,34326],{"class":138},[128,38363,34329],{"class":266},[128,38365,270],{"class":134},[128,38367,38332],{"class":166},[128,38369,4128],{"class":138},[128,38371,34338],{"class":266},[128,38373,270],{"class":134},[128,38375,38332],{"class":166},[128,38377,4128],{"class":138},[128,38379,34347],{"class":266},[128,38381,270],{"class":134},[128,38383,3827],{"class":166},[128,38385,4128],{"class":138},[128,38387,34356],{"class":266},[128,38389,270],{"class":134},[128,38391,2592],{"class":166},[128,38393,180],{"class":138},[128,38395,38396,38398,38401,38403,38405,38407,38409,38411,38413,38415,38417,38419,38421,38423,38425,38427,38429,38431,38433,38435],{"class":130,"line":323},[128,38397,2115],{"class":166},[128,38399,38400],{"class":138},".c7",[128,38402,270],{"class":134},[128,38404,34326],{"class":138},[128,38406,34329],{"class":266},[128,38408,270],{"class":134},[128,38410,38332],{"class":166},[128,38412,4128],{"class":138},[128,38414,34338],{"class":266},[128,38416,270],{"class":134},[128,38418,38262],{"class":166},[128,38420,4128],{"class":138},[128,38422,34347],{"class":266},[128,38424,270],{"class":134},[128,38426,3827],{"class":166},[128,38428,4128],{"class":138},[128,38430,34356],{"class":266},[128,38432,270],{"class":134},[128,38434,2592],{"class":166},[128,38436,180],{"class":138},[128,38438,38439,38441,38444,38446,38448,38450,38452,38454,38456,38458,38460,38462],{"class":130,"line":330},[128,38440,2115],{"class":166},[128,38442,38443],{"class":138},".s8",[128,38445,270],{"class":134},[128,38447,38221],{"class":138},[128,38449,34347],{"class":266},[128,38451,270],{"class":134},[128,38453,3827],{"class":166},[128,38455,4128],{"class":138},[128,38457,34402],{"class":266},[128,38459,270],{"class":134},[128,38461,409],{"class":166},[128,38463,180],{"class":138},[128,38465,38466],{"class":130,"line":335},[128,38467,34475],{"class":3814},[128,38469,38470,38472,38474,38476],{"class":130,"line":340},[128,38471,2115],{"class":166},[128,38473,34482],{"class":138},[128,38475,270],{"class":134},[128,38477,34487],{"class":138},[128,38479,38480],{"class":130,"line":351},[128,38481,38482],{"class":3814},"       # 定义全连接层\n",[128,38484,38485,38487,38490,38492,38494,38496,38498,38500,38502,38504,38506,38509],{"class":130,"line":384},[128,38486,2115],{"class":166},[128,38488,38489],{"class":138},".f1",[128,38491,270],{"class":134},[128,38493,34504],{"class":138},[128,38495,4094],{"class":166},[128,38497,4205],{"class":134},[128,38499,4094],{"class":166},[128,38501,4205],{"class":134},[128,38503,38262],{"class":166},[128,38505,4128],{"class":138},[128,38507,38508],{"class":166},"4096",[128,38510,180],{"class":138},[128,38512,38513,38515,38518,38520,38522,38524,38526,38528],{"class":130,"line":414},[128,38514,2115],{"class":166},[128,38516,38517],{"class":138},".f2",[128,38519,270],{"class":134},[128,38521,34504],{"class":138},[128,38523,38508],{"class":166},[128,38525,4128],{"class":138},[128,38527,38508],{"class":166},[128,38529,180],{"class":138},[128,38531,38532,38534,38537,38539,38541,38543,38545,38547],{"class":130,"line":419},[128,38533,2115],{"class":166},[128,38535,38536],{"class":138},".f3",[128,38538,270],{"class":134},[128,38540,34504],{"class":138},[128,38542,38508],{"class":166},[128,38544,4128],{"class":138},[128,38546,4196],{"class":166},[128,38548,180],{"class":138},[128,38550,38551],{"class":130,"line":424},[128,38552,160],{"emptyLinePlaceholder":159},[128,38554,38555],{"class":130,"line":434},[128,38556,38557],{"class":3814},"    # 定义前向传播\n",[128,38559,38560,38562,38564],{"class":130,"line":447},[128,38561,1946],{"class":134},[128,38563,34566],{"class":199},[128,38565,34569],{"class":138},[128,38567,38568,38570,38572,38574,38577,38579],{"class":130,"line":459},[128,38569,34574],{"class":138},[128,38571,270],{"class":134},[128,38573,1970],{"class":166},[128,38575,38576],{"class":138},".ReLu(",[128,38578,1970],{"class":166},[128,38580,34586],{"class":138},[128,38582,38583,38585,38587,38589],{"class":130,"line":471},[128,38584,34574],{"class":138},[128,38586,270],{"class":134},[128,38588,1970],{"class":166},[128,38590,34597],{"class":138},[128,38592,38593,38595,38597,38599,38601,38603],{"class":130,"line":483},[128,38594,34574],{"class":138},[128,38596,270],{"class":134},[128,38598,1970],{"class":166},[128,38600,38576],{"class":138},[128,38602,1970],{"class":166},[128,38604,34612],{"class":138},[128,38606,38607,38609,38611,38613],{"class":130,"line":495},[128,38608,34574],{"class":138},[128,38610,270],{"class":134},[128,38612,1970],{"class":166},[128,38614,34623],{"class":138},[128,38616,38617,38619,38621,38623,38625,38627],{"class":130,"line":507},[128,38618,34574],{"class":138},[128,38620,270],{"class":134},[128,38622,1970],{"class":166},[128,38624,38576],{"class":138},[128,38626,1970],{"class":166},[128,38628,38629],{"class":138},".c5(x))\n",[128,38631,38632,38634,38636,38638,38640,38642],{"class":130,"line":519},[128,38633,34574],{"class":138},[128,38635,270],{"class":134},[128,38637,1970],{"class":166},[128,38639,38576],{"class":138},[128,38641,1970],{"class":166},[128,38643,38644],{"class":138},".c6(x))\n",[128,38646,38647,38649,38651,38653,38655,38657],{"class":130,"line":524},[128,38648,34574],{"class":138},[128,38650,270],{"class":134},[128,38652,1970],{"class":166},[128,38654,38576],{"class":138},[128,38656,1970],{"class":166},[128,38658,38659],{"class":138},".c7(x))\n",[128,38661,38662,38664,38666,38668],{"class":130,"line":529},[128,38663,34574],{"class":138},[128,38665,270],{"class":134},[128,38667,1970],{"class":166},[128,38669,38670],{"class":138},".s8(x)\n",[128,38672,38673],{"class":130,"line":540},[128,38674,160],{"emptyLinePlaceholder":159},[128,38676,38677],{"class":130,"line":555},[128,38678,38679],{"class":3814},"        # 展平加线性全连接层\n",[128,38681,38682,38684,38686,38688],{"class":130,"line":576},[128,38683,34574],{"class":138},[128,38685,270],{"class":134},[128,38687,1970],{"class":166},[128,38689,34634],{"class":138},[128,38691,38692,38694,38696,38698,38700,38702],{"class":130,"line":584},[128,38693,34574],{"class":138},[128,38695,270],{"class":134},[128,38697,1970],{"class":166},[128,38699,38576],{"class":138},[128,38701,1970],{"class":166},[128,38703,38704],{"class":138},".f1(x))\n",[128,38706,38707],{"class":130,"line":593},[128,38708,38709],{"class":3814},"        # 还需要dropout对神经元随机进行失活\n",[128,38711,38712,38714,38716,38719,38722],{"class":130,"line":598},[128,38713,34574],{"class":138},[128,38715,270],{"class":134},[128,38717,38718],{"class":138},"F.dropout(x,",[128,38720,38721],{"class":166},"0.5",[128,38723,180],{"class":138},[128,38725,38726,38728,38730,38732,38734,38736],{"class":130,"line":603},[128,38727,34574],{"class":138},[128,38729,270],{"class":134},[128,38731,1970],{"class":166},[128,38733,38576],{"class":138},[128,38735,1970],{"class":166},[128,38737,38738],{"class":138},".f2(x))\n",[128,38740,38741,38743,38745,38747,38749],{"class":130,"line":614},[128,38742,34574],{"class":138},[128,38744,270],{"class":134},[128,38746,38718],{"class":138},[128,38748,38721],{"class":166},[128,38750,180],{"class":138},[128,38752,38753],{"class":130,"line":625},[128,38754,38755],{"class":3814},"        # 直接输出\n",[128,38757,38758,38760,38762,38764],{"class":130,"line":633},[128,38759,34574],{"class":138},[128,38761,270],{"class":134},[128,38763,1970],{"class":166},[128,38765,38766],{"class":138},".f3(x)\n",[128,38768,38769],{"class":130,"line":649},[128,38770,38771],{"class":3814},"        # 前向传播输出\n",[128,38773,38774,38776],{"class":130,"line":660},[128,38775,224],{"class":134},[128,38777,34682],{"class":138},[128,38779,38780],{"class":130,"line":673},[128,38781,38782],{"class":3814},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[128,38784,38785,38787,38789,38791,38793],{"class":130,"line":678},[128,38786,1800],{"class":134},[128,38788,1803],{"class":166},[128,38790,570],{"class":134},[128,38792,34697],{"class":176},[128,38794,241],{"class":138},[128,38796,38797,38799,38801,38803,38805,38807,38809,38811,38813],{"class":130,"line":683},[128,38798,34709],{"class":138},[128,38800,270],{"class":134},[128,38802,33931],{"class":138},[128,38804,34716],{"class":176},[128,38806,5302],{"class":134},[128,38808,34721],{"class":138},[128,38810,5299],{"class":134},[128,38812,33956],{"class":176},[128,38814,180],{"class":138},[128,38816,38817],{"class":130,"line":693},[128,38818,38819],{"class":3814},"    # 模型实例化，然后将实例化的模型放到设备中\n",[128,38821,38822,38824,38826],{"class":130,"line":702},[128,38823,34761],{"class":138},[128,38825,270],{"class":134},[128,38827,38828],{"class":138},"AlexNet().to(device)\n",[128,38830,38831,38833,38835,38837,38839,38842,38844,38846],{"class":130,"line":709},[128,38832,437],{"class":166},[128,38834,34773],{"class":138},[128,38836,2592],{"class":166},[128,38838,4128],{"class":138},[128,38840,38841],{"class":166},"227",[128,38843,4128],{"class":138},[128,38845,38841],{"class":166},[128,38847,34786],{"class":138},[26,38849,38850],{"start":142},[29,38851,34799],{},[106,38853,38855],{"className":122,"code":38854,"language":124,"meta":112,"style":112},"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",[114,38856,38857,38863,38869,38879,38885,38895,38905,38915,38925,38935,38939,38950,38960,38964,38968,38972,38980,38992,39002,39018,39028,39060,39074,39084,39094,39098,39108,39122,39132,39142,39152,39158,39162,39166,39170,39174,39178,39186,39206,39210,39214,39218,39222,39226,39242,39246,39250,39258,39262,39266,39274,39278,39282,39286,39294,39298,39302,39306,39310,39318,39322,39330,39334,39342,39346,39354,39358,39366,39370,39374,39382,39386,39390,39394,39406,39430,39444,39448,39452,39456,39464,39468,39476,39480,39488,39492,39500,39504,39512,39516,39524,39528,39540,39544,39552,39556,39564,39568,39572,39576,39580,39588,39592,39608,39612,39620,39624,39628,39632,39636,39640,39644,39648,39664,39668,39680,39684,39696,39700,39712,39716,39724,39728,39736,39740,39744,39749,39755,39759,39768,39772,39789,39793,39802,39806,39824,39837,39842,39855,39859,39863,39871,39875,39879,39887,39891,39899,39903,39911,39915,39919,39961,40003,40007,40011,40027,40031,40047,40051,40055,40063,40067,40071,40083,40121,40126,40131,40140,40144,40158,40168,40174,40180,40186,40192,40196,40200,40206,40210,40214,40222,40226,40244,40248,40252,40256,40272,40276,40280,40284,40288,40292,40312,40332,40336,40340,40344,40352,40360,40364,40380,40400,40420,40424,40428,40436,40444,40448,40452,40456,40468,40472,40482,40490,40507],{"__ignoreMap":112},[128,38858,38859,38861],{"class":130,"line":131},[128,38860,135],{"class":134},[128,38862,35291],{"class":138},[128,38864,38865,38867],{"class":130,"line":142},[128,38866,135],{"class":134},[128,38868,35298],{"class":138},[128,38870,38871,38873,38875,38877],{"class":130,"line":156},[128,38872,135],{"class":134},[128,38874,35309],{"class":138},[128,38876,279],{"class":134},[128,38878,35314],{"class":138},[128,38880,38881,38883],{"class":130,"line":163},[128,38882,135],{"class":134},[128,38884,33876],{"class":138},[128,38886,38887,38889,38891,38893],{"class":130,"line":183},[128,38888,145],{"class":134},[128,38890,34885],{"class":138},[128,38892,135],{"class":134},[128,38894,35331],{"class":138},[128,38896,38897,38899,38901,38903],{"class":130,"line":188},[128,38898,145],{"class":134},[128,38900,34839],{"class":138},[128,38902,135],{"class":134},[128,38904,34844],{"class":138},[128,38906,38907,38909,38911,38913],{"class":130,"line":193},[128,38908,145],{"class":134},[128,38910,34868],{"class":138},[128,38912,135],{"class":134},[128,38914,34873],{"class":138},[128,38916,38917,38919,38921,38923],{"class":130,"line":206},[128,38918,135],{"class":134},[128,38920,34885],{"class":138},[128,38922,279],{"class":134},[128,38924,34890],{"class":138},[128,38926,38927,38929,38931,38933],{"class":130,"line":221},[128,38928,135],{"class":134},[128,38930,34902],{"class":138},[128,38932,279],{"class":134},[128,38934,34907],{"class":138},[128,38936,38937],{"class":130,"line":230},[128,38938,35376],{"class":3814},[128,38940,38941,38943,38945,38947],{"class":130,"line":235},[128,38942,145],{"class":134},[128,38944,35383],{"class":138},[128,38946,135],{"class":134},[128,38948,38949],{"class":138}," AlexNet\n",[128,38951,38952,38954,38956,38958],{"class":130,"line":244},[128,38953,145],{"class":134},[128,38955,34218],{"class":138},[128,38957,135],{"class":134},[128,38959,34223],{"class":138},[128,38961,38962],{"class":130,"line":287},[128,38963,160],{"emptyLinePlaceholder":159},[128,38965,38966],{"class":130,"line":301},[128,38967,160],{"emptyLinePlaceholder":159},[128,38969,38970],{"class":130,"line":310},[128,38971,35411],{"class":3814},[128,38973,38974,38976,38978],{"class":130,"line":323},[128,38975,196],{"class":134},[128,38977,35418],{"class":199},[128,38979,203],{"class":138},[128,38981,38982,38984,38986,38988,38990],{"class":130,"line":330},[128,38983,35425],{"class":138},[128,38985,270],{"class":134},[128,38987,34925],{"class":138},[128,38989,34933],{"class":176},[128,38991,2665],{"class":138},[128,38993,38994,38996,38998,39000],{"class":130,"line":335},[128,38995,35438],{"class":266},[128,38997,270],{"class":134},[128,38999,34945],{"class":166},[128,39001,2665],{"class":138},[128,39003,39004,39006,39008,39010,39012,39014,39016],{"class":130,"line":340},[128,39005,35449],{"class":266},[128,39007,270],{"class":134},[128,39009,34962],{"class":138},[128,39011,34965],{"class":266},[128,39013,270],{"class":134},[128,39015,38841],{"class":166},[128,39017,34973],{"class":138},[128,39019,39020,39022,39024,39026],{"class":130,"line":351},[128,39021,35466],{"class":266},[128,39023,270],{"class":134},[128,39025,34945],{"class":166},[128,39027,180],{"class":138},[128,39029,39030,39032,39034,39036,39038,39040,39042,39044,39046,39048,39050,39052,39054,39056,39058],{"class":130,"line":384},[128,39031,35477],{"class":138},[128,39033,270],{"class":134},[128,39035,35482],{"class":138},[128,39037,35485],{"class":166},[128,39039,253],{"class":138},[128,39041,35490],{"class":166},[128,39043,4205],{"class":134},[128,39045,10915],{"class":166},[128,39047,35497],{"class":138},[128,39049,35485],{"class":166},[128,39051,253],{"class":138},[128,39053,35504],{"class":166},[128,39055,4205],{"class":134},[128,39057,10915],{"class":166},[128,39059,35511],{"class":138},[128,39061,39062,39064,39066,39068,39070,39072],{"class":130,"line":414},[128,39063,35516],{"class":138},[128,39065,270],{"class":134},[128,39067,35521],{"class":138},[128,39069,35006],{"class":266},[128,39071,270],{"class":134},[128,39073,35011],{"class":138},[128,39075,39076,39078,39080,39082],{"class":130,"line":419},[128,39077,35532],{"class":266},[128,39079,270],{"class":134},[128,39081,35537],{"class":166},[128,39083,2665],{"class":138},[128,39085,39086,39088,39090,39092],{"class":130,"line":424},[128,39087,35544],{"class":266},[128,39089,270],{"class":134},[128,39091,34945],{"class":166},[128,39093,2665],{"class":138},[128,39095,39096],{"class":130,"line":434},[128,39097,35555],{"class":3814},[128,39099,39100,39102,39104,39106],{"class":130,"line":447},[128,39101,35560],{"class":266},[128,39103,270],{"class":134},[128,39105,4145],{"class":166},[128,39107,180],{"class":138},[128,39109,39110,39112,39114,39116,39118,39120],{"class":130,"line":459},[128,39111,35571],{"class":138},[128,39113,270],{"class":134},[128,39115,35003],{"class":138},[128,39117,35006],{"class":266},[128,39119,270],{"class":134},[128,39121,35582],{"class":138},[128,39123,39124,39126,39128,39130],{"class":130,"line":471},[128,39125,35587],{"class":266},[128,39127,270],{"class":134},[128,39129,35537],{"class":166},[128,39131,2665],{"class":138},[128,39133,39134,39136,39138,39140],{"class":130,"line":483},[128,39135,35598],{"class":266},[128,39137,270],{"class":134},[128,39139,34945],{"class":166},[128,39141,2665],{"class":138},[128,39143,39144,39146,39148,39150],{"class":130,"line":495},[128,39145,35609],{"class":266},[128,39147,270],{"class":134},[128,39149,4145],{"class":166},[128,39151,180],{"class":138},[128,39153,39154,39156],{"class":130,"line":507},[128,39155,587],{"class":134},[128,39157,35622],{"class":138},[128,39159,39160],{"class":130,"line":519},[128,39161,160],{"emptyLinePlaceholder":159},[128,39163,39164],{"class":130,"line":524},[128,39165,35631],{"class":3814},[128,39167,39168],{"class":130,"line":529},[128,39169,35636],{"class":3814},[128,39171,39172],{"class":130,"line":540},[128,39173,160],{"emptyLinePlaceholder":159},[128,39175,39176],{"class":130,"line":555},[128,39177,35645],{"class":3814},[128,39179,39180,39182,39184],{"class":130,"line":576},[128,39181,196],{"class":134},[128,39183,35652],{"class":199},[128,39185,35655],{"class":138},[128,39187,39188,39190,39192,39194,39196,39198,39200,39202,39204],{"class":130,"line":584},[128,39189,34709],{"class":138},[128,39191,270],{"class":134},[128,39193,33931],{"class":138},[128,39195,34716],{"class":176},[128,39197,5302],{"class":134},[128,39199,34721],{"class":138},[128,39201,5299],{"class":134},[128,39203,35674],{"class":176},[128,39205,180],{"class":138},[128,39207,39208],{"class":130,"line":593},[128,39209,160],{"emptyLinePlaceholder":159},[128,39211,39212],{"class":130,"line":598},[128,39213,160],{"emptyLinePlaceholder":159},[128,39215,39216],{"class":130,"line":603},[128,39217,35689],{"class":3814},[128,39219,39220],{"class":130,"line":614},[128,39221,35694],{"class":3814},[128,39223,39224],{"class":130,"line":625},[128,39225,35699],{"class":3814},[128,39227,39228,39230,39232,39234,39236,39238,39240],{"class":130,"line":633},[128,39229,35704],{"class":138},[128,39231,270],{"class":134},[128,39233,35709],{"class":138},[128,39235,35712],{"class":266},[128,39237,270],{"class":134},[128,39239,35717],{"class":166},[128,39241,180],{"class":138},[128,39243,39244],{"class":130,"line":649},[128,39245,160],{"emptyLinePlaceholder":159},[128,39247,39248],{"class":130,"line":660},[128,39249,35728],{"class":3814},[128,39251,39252,39254,39256],{"class":130,"line":673},[128,39253,35733],{"class":138},[128,39255,270],{"class":134},[128,39257,35738],{"class":138},[128,39259,39260],{"class":130,"line":678},[128,39261,160],{"emptyLinePlaceholder":159},[128,39263,39264],{"class":130,"line":683},[128,39265,35747],{"class":3814},[128,39267,39268,39270,39272],{"class":130,"line":693},[128,39269,34761],{"class":138},[128,39271,270],{"class":134},[128,39273,35756],{"class":138},[128,39275,39276],{"class":130,"line":702},[128,39277,35761],{"class":3814},[128,39279,39280],{"class":130,"line":709},[128,39281,35766],{"class":3814},[128,39283,39284],{"class":130,"line":723},[128,39285,35771],{"class":3814},[128,39287,39288,39290,39292],{"class":130,"line":732},[128,39289,35776],{"class":138},[128,39291,270],{"class":134},[128,39293,35781],{"class":138},[128,39295,39296],{"class":130,"line":744},[128,39297,160],{"emptyLinePlaceholder":159},[128,39299,39300],{"class":130,"line":749},[128,39301,160],{"emptyLinePlaceholder":159},[128,39303,39304],{"class":130,"line":754},[128,39305,35794],{"class":3814},[128,39307,39308],{"class":130,"line":764},[128,39309,35799],{"class":3814},[128,39311,39312,39314,39316],{"class":130,"line":782},[128,39313,35804],{"class":138},[128,39315,270],{"class":134},[128,39317,35809],{"class":166},[128,39319,39320],{"class":130,"line":787},[128,39321,35814],{"class":3814},[128,39323,39324,39326,39328],{"class":130,"line":795},[128,39325,35819],{"class":138},[128,39327,270],{"class":134},[128,39329,35824],{"class":138},[128,39331,39332],{"class":130,"line":807},[128,39333,35829],{"class":3814},[128,39335,39336,39338,39340],{"class":130,"line":813},[128,39337,35834],{"class":138},[128,39339,270],{"class":134},[128,39341,35824],{"class":138},[128,39343,39344],{"class":130,"line":818},[128,39345,35843],{"class":3814},[128,39347,39348,39350,39352],{"class":130,"line":835},[128,39349,35848],{"class":138},[128,39351,270],{"class":134},[128,39353,35824],{"class":138},[128,39355,39356],{"class":130,"line":851},[128,39357,35857],{"class":3814},[128,39359,39360,39362,39364],{"class":130,"line":867},[128,39361,35862],{"class":138},[128,39363,270],{"class":134},[128,39365,35824],{"class":138},[128,39367,39368],{"class":130,"line":872},[128,39369,160],{"emptyLinePlaceholder":159},[128,39371,39372],{"class":130,"line":878},[128,39373,35875],{"class":3814},[128,39375,39376,39378,39380],{"class":130,"line":887},[128,39377,35880],{"class":138},[128,39379,270],{"class":134},[128,39381,35885],{"class":138},[128,39383,39384],{"class":130,"line":896},[128,39385,160],{"emptyLinePlaceholder":159},[128,39387,39388],{"class":130,"line":905},[128,39389,160],{"emptyLinePlaceholder":159},[128,39391,39392],{"class":130,"line":914},[128,39393,35898],{"class":3814},[128,39395,39396,39398,39400,39402,39404],{"class":130,"line":920},[128,39397,543],{"class":134},[128,39399,35905],{"class":138},[128,39401,549],{"class":134},[128,39403,35910],{"class":166},[128,39405,35913],{"class":138},[128,39407,39408,39410,39412,39414,39416,39418,39420,39422,39424,39426,39428],{"class":130,"line":926},[128,39409,313],{"class":166},[128,39411,253],{"class":138},[128,39413,35922],{"class":176},[128,39415,35925],{"class":166},[128,39417,4333],{"class":176},[128,39419,35925],{"class":166},[128,39421,1376],{"class":176},[128,39423,35934],{"class":138},[128,39425,4281],{"class":134},[128,39427,2592],{"class":166},[128,39429,3034],{"class":138},[128,39431,39432,39434,39436,39438,39440,39442],{"class":130,"line":938},[128,39433,313],{"class":166},[128,39435,253],{"class":138},[128,39437,35949],{"class":176},[128,39439,4205],{"class":134},[128,39441,4196],{"class":166},[128,39443,180],{"class":138},[128,39445,39446],{"class":130,"line":943},[128,39447,160],{"emptyLinePlaceholder":159},[128,39449,39450],{"class":130,"line":948},[128,39451,35964],{"class":3814},[128,39453,39454],{"class":130,"line":958},[128,39455,35969],{"class":3814},[128,39457,39458,39460,39462],{"class":130,"line":974},[128,39459,35974],{"class":138},[128,39461,270],{"class":134},[128,39463,35809],{"class":166},[128,39465,39466],{"class":130,"line":985},[128,39467,35983],{"class":3814},[128,39469,39470,39472,39474],{"class":130,"line":990},[128,39471,35988],{"class":138},[128,39473,270],{"class":134},[128,39475,6656],{"class":166},[128,39477,39478],{"class":130,"line":1005},[128,39479,35997],{"class":3814},[128,39481,39482,39484,39486],{"class":130,"line":1017},[128,39483,36002],{"class":138},[128,39485,270],{"class":134},[128,39487,35809],{"class":166},[128,39489,39490],{"class":130,"line":1022},[128,39491,36011],{"class":3814},[128,39493,39494,39496,39498],{"class":130,"line":1027},[128,39495,36016],{"class":138},[128,39497,270],{"class":134},[128,39499,6656],{"class":166},[128,39501,39502],{"class":130,"line":1033},[128,39503,36025],{"class":3814},[128,39505,39506,39508,39510],{"class":130,"line":1038},[128,39507,36030],{"class":138},[128,39509,270],{"class":134},[128,39511,6656],{"class":166},[128,39513,39514],{"class":130,"line":1050},[128,39515,36039],{"class":3814},[128,39517,39518,39520,39522],{"class":130,"line":1055},[128,39519,36044],{"class":138},[128,39521,270],{"class":134},[128,39523,6656],{"class":166},[128,39525,39526],{"class":130,"line":1060},[128,39527,36053],{"class":3814},[128,39529,39530,39532,39534,39536,39538],{"class":130,"line":1070},[128,39531,2141],{"class":134},[128,39533,35070],{"class":138},[128,39535,549],{"class":134},[128,39537,35075],{"class":166},[128,39539,36066],{"class":138},[128,39541,39542],{"class":130,"line":1086},[128,39543,36071],{"class":3814},[128,39545,39546,39548,39550],{"class":130,"line":1095},[128,39547,36076],{"class":138},[128,39549,270],{"class":134},[128,39551,36081],{"class":138},[128,39553,39554],{"class":130,"line":1100},[128,39555,36086],{"class":3814},[128,39557,39558,39560,39562],{"class":130,"line":1113},[128,39559,36091],{"class":138},[128,39561,270],{"class":134},[128,39563,36096],{"class":138},[128,39565,39566],{"class":130,"line":1124},[128,39567,36101],{"class":3814},[128,39569,39570],{"class":130,"line":1129},[128,39571,36106],{"class":138},[128,39573,39574],{"class":130,"line":1134},[128,39575,36111],{"class":3814},[128,39577,39578],{"class":130,"line":1150},[128,39579,36116],{"class":3814},[128,39581,39582,39584,39586],{"class":130,"line":1164},[128,39583,36121],{"class":138},[128,39585,270],{"class":134},[128,39587,36126],{"class":138},[128,39589,39590],{"class":130,"line":1178},[128,39591,36131],{"class":3814},[128,39593,39594,39596,39598,39600,39602,39604,39606],{"class":130,"line":1183},[128,39595,36136],{"class":138},[128,39597,270],{"class":134},[128,39599,36141],{"class":138},[128,39601,36144],{"class":266},[128,39603,270],{"class":134},[128,39605,2592],{"class":166},[128,39607,180],{"class":138},[128,39609,39610],{"class":130,"line":1199},[128,39611,36155],{"class":3814},[128,39613,39614,39616,39618],{"class":130,"line":1214},[128,39615,36160],{"class":138},[128,39617,270],{"class":134},[128,39619,36165],{"class":138},[128,39621,39622],{"class":130,"line":1229},[128,39623,36170],{"class":3814},[128,39625,39626],{"class":130,"line":1234},[128,39627,36175],{"class":138},[128,39629,39630],{"class":130,"line":1239},[128,39631,36180],{"class":3814},[128,39633,39634],{"class":130,"line":1251},[128,39635,36185],{"class":138},[128,39637,39638],{"class":130,"line":1256},[128,39639,36190],{"class":3814},[128,39641,39642],{"class":130,"line":1261},[128,39643,36195],{"class":138},[128,39645,39646],{"class":130,"line":1271},[128,39647,36200],{"class":3814},[128,39649,39650,39652,39654,39656,39658,39660,39662],{"class":130,"line":1287},[128,39651,36205],{"class":138},[128,39653,13023],{"class":134},[128,39655,36210],{"class":138},[128,39657,4205],{"class":134},[128,39659,36215],{"class":138},[128,39661,2452],{"class":166},[128,39663,180],{"class":138},[128,39665,39666],{"class":130,"line":1296},[128,39667,36224],{"class":3814},[128,39669,39670,39672,39674,39676,39678],{"class":130,"line":1301},[128,39671,36229],{"class":138},[128,39673,13023],{"class":134},[128,39675,36234],{"class":138},[128,39677,570],{"class":134},[128,39679,36239],{"class":138},[128,39681,39682],{"class":130,"line":1314},[128,39683,36244],{"class":3814},[128,39685,39686,39688,39690,39692,39694],{"class":130,"line":1325},[128,39687,36249],{"class":138},[128,39689,13023],{"class":134},[128,39691,36215],{"class":138},[128,39693,2452],{"class":166},[128,39695,180],{"class":138},[128,39697,39698],{"class":130,"line":1330},[128,39699,36262],{"class":3814},[128,39701,39702,39704,39706,39708,39710],{"class":130,"line":1335},[128,39703,2141],{"class":134},[128,39705,36269],{"class":138},[128,39707,549],{"class":134},[128,39709,35075],{"class":166},[128,39711,36276],{"class":138},[128,39713,39714],{"class":130,"line":1341},[128,39715,36281],{"class":3814},[128,39717,39718,39720,39722],{"class":130,"line":1346},[128,39719,36076],{"class":138},[128,39721,270],{"class":134},[128,39723,36081],{"class":138},[128,39725,39726],{"class":130,"line":1351},[128,39727,36294],{"class":3814},[128,39729,39730,39732,39734],{"class":130,"line":1362},[128,39731,36091],{"class":138},[128,39733,270],{"class":134},[128,39735,36096],{"class":138},[128,39737,39738],{"class":130,"line":1370},[128,39739,36307],{"class":3814},[128,39741,39742],{"class":130,"line":1397},[128,39743,36312],{"class":138},[128,39745,39746],{"class":130,"line":1417},[128,39747,39748],{"class":3814},"            # 验证时不计算梯度以节省内存\u002F计算\n",[128,39750,39751,39753],{"class":130,"line":1437},[128,39752,36317],{"class":134},[128,39754,36320],{"class":138},[128,39756,39757],{"class":130,"line":1458},[128,39758,36325],{"class":3814},[128,39760,39761,39764,39766],{"class":130,"line":1464},[128,39762,39763],{"class":138},"                output",[128,39765,270],{"class":134},[128,39767,36126],{"class":138},[128,39769,39770],{"class":130,"line":1469},[128,39771,36340],{"class":3814},[128,39773,39774,39777,39779,39781,39783,39785,39787],{"class":130,"line":1474},[128,39775,39776],{"class":138},"                pre_lab",[128,39778,270],{"class":134},[128,39780,36141],{"class":138},[128,39782,36144],{"class":266},[128,39784,270],{"class":134},[128,39786,2592],{"class":166},[128,39788,180],{"class":138},[128,39790,39791],{"class":130,"line":1484},[128,39792,36363],{"class":3814},[128,39794,39795,39798,39800],{"class":130,"line":1493},[128,39796,39797],{"class":138},"                val_batch_loss",[128,39799,270],{"class":134},[128,39801,36165],{"class":138},[128,39803,39804],{"class":130,"line":1505},[128,39805,36378],{"class":3814},[128,39807,39808,39811,39813,39816,39818,39820,39822],{"class":130,"line":1510},[128,39809,39810],{"class":138},"                val_loss",[128,39812,13023],{"class":134},[128,39814,39815],{"class":138},"val_batch_loss.item()",[128,39817,4205],{"class":134},[128,39819,36215],{"class":138},[128,39821,2452],{"class":166},[128,39823,180],{"class":138},[128,39825,39826,39829,39831,39833,39835],{"class":130,"line":1515},[128,39827,39828],{"class":138},"                val_corrects",[128,39830,13023],{"class":134},[128,39832,36234],{"class":138},[128,39834,570],{"class":134},[128,39836,36239],{"class":138},[128,39838,39839],{"class":130,"line":1543},[128,39840,39841],{"class":3814},"            # 当前用于验证的样本数量\n",[128,39843,39844,39847,39849,39851,39853],{"class":130,"line":1554},[128,39845,39846],{"class":138},"            val_num",[128,39848,13023],{"class":134},[128,39850,36215],{"class":138},[128,39852,2452],{"class":166},[128,39854,180],{"class":138},[128,39856,39857],{"class":130,"line":1560},[128,39858,36435],{"class":3814},[128,39860,39861],{"class":130,"line":1565},[128,39862,36440],{"class":3814},[128,39864,39865,39867,39869],{"class":130,"line":1570},[128,39866,36445],{"class":138},[128,39868,4333],{"class":134},[128,39870,36450],{"class":138},[128,39872,39873],{"class":130,"line":1580},[128,39874,36455],{"class":3814},[128,39876,39877],{"class":130,"line":1591},[128,39878,36460],{"class":3814},[128,39880,39881,39883,39885],{"class":130,"line":1596},[128,39882,36465],{"class":138},[128,39884,4333],{"class":134},[128,39886,36450],{"class":138},[128,39888,39889],{"class":130,"line":1605},[128,39890,36474],{"class":3814},[128,39892,39893,39895,39897],{"class":130,"line":1611},[128,39894,36479],{"class":138},[128,39896,4333],{"class":134},[128,39898,36484],{"class":138},[128,39900,39901],{"class":130,"line":1628},[128,39902,36489],{"class":3814},[128,39904,39905,39907,39909],{"class":130,"line":1633},[128,39906,36494],{"class":138},[128,39908,4333],{"class":134},[128,39910,36484],{"class":138},[128,39912,39913],{"class":130,"line":1648},[128,39914,160],{"emptyLinePlaceholder":159},[128,39916,39917],{"class":130,"line":1654},[128,39918,36507],{"class":3814},[128,39920,39921,39923,39925,39927,39929,39931,39933,39935,39937,39939,39941,39943,39945,39947,39949,39951,39953,39955,39957,39959],{"class":130,"line":1669},[128,39922,313],{"class":166},[128,39924,253],{"class":138},[128,39926,7160],{"class":176},[128,39928,35925],{"class":166},[128,39930,36520],{"class":176},[128,39932,1379],{"class":166},[128,39934,36525],{"class":134},[128,39936,1453],{"class":166},[128,39938,36530],{"class":176},[128,39940,1379],{"class":166},[128,39942,36525],{"class":134},[128,39944,1453],{"class":166},[128,39946,7160],{"class":176},[128,39948,36541],{"class":138},[128,39950,4281],{"class":134},[128,39952,2592],{"class":166},[128,39954,36548],{"class":138},[128,39956,4281],{"class":134},[128,39958,2592],{"class":166},[128,39960,36555],{"class":138},[128,39962,39963,39965,39967,39969,39971,39973,39975,39977,39979,39981,39983,39985,39987,39989,39991,39993,39995,39997,39999,40001],{"class":130,"line":1675},[128,39964,313],{"class":166},[128,39966,253],{"class":138},[128,39968,7160],{"class":176},[128,39970,35925],{"class":166},[128,39972,36568],{"class":176},[128,39974,1379],{"class":166},[128,39976,36525],{"class":134},[128,39978,1453],{"class":166},[128,39980,36577],{"class":176},[128,39982,1379],{"class":166},[128,39984,36525],{"class":134},[128,39986,1453],{"class":166},[128,39988,7160],{"class":176},[128,39990,36588],{"class":138},[128,39992,4281],{"class":134},[128,39994,2592],{"class":166},[128,39996,36595],{"class":138},[128,39998,4281],{"class":134},[128,40000,2592],{"class":166},[128,40002,36555],{"class":138},[128,40004,40005],{"class":130,"line":1689},[128,40006,160],{"emptyLinePlaceholder":159},[128,40008,40009],{"class":130,"line":1695},[128,40010,36610],{"class":3814},[128,40012,40013,40015,40017,40019,40021,40023,40025],{"class":130,"line":1709},[128,40014,558],{"class":134},[128,40016,36617],{"class":138},[128,40018,4281],{"class":134},[128,40020,2592],{"class":166},[128,40022,1388],{"class":138},[128,40024,4705],{"class":134},[128,40026,36628],{"class":138},[128,40028,40029],{"class":130,"line":1715},[128,40030,36633],{"class":3814},[128,40032,40033,40035,40037,40039,40041,40043,40045],{"class":130,"line":1729},[128,40034,36638],{"class":138},[128,40036,3798],{"class":166},[128,40038,270],{"class":134},[128,40040,36645],{"class":138},[128,40042,4281],{"class":134},[128,40044,2592],{"class":166},[128,40046,2376],{"class":138},[128,40048,40049],{"class":130,"line":1735},[128,40050,36656],{"class":3814},[128,40052,40053],{"class":130,"line":1749},[128,40054,36661],{"class":3814},[128,40056,40057,40059,40061],{"class":130,"line":1761},[128,40058,36666],{"class":138},[128,40060,270],{"class":134},[128,40062,35781],{"class":138},[128,40064,40065],{"class":130,"line":1767},[128,40066,160],{"emptyLinePlaceholder":159},[128,40068,40069],{"class":130,"line":1775},[128,40070,36679],{"class":3814},[128,40072,40073,40075,40077,40079,40081],{"class":130,"line":1787},[128,40074,36684],{"class":138},[128,40076,270],{"class":134},[128,40078,36689],{"class":138},[128,40080,4281],{"class":134},[128,40082,36694],{"class":138},[128,40084,40085,40087,40089,40091,40093,40095,40097,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119],{"class":130,"line":1792},[128,40086,313],{"class":166},[128,40088,253],{"class":138},[128,40090,36703],{"class":176},[128,40092,1379],{"class":166},[128,40094,36708],{"class":134},[128,40096,1453],{"class":166},[128,40098,4293],{"class":176},[128,40100,1379],{"class":166},[128,40102,36708],{"class":134},[128,40104,1453],{"class":166},[128,40106,36721],{"class":176},[128,40108,36724],{"class":138},[128,40110,36727],{"class":134},[128,40112,4654],{"class":166},[128,40114,36732],{"class":138},[128,40116,4078],{"class":134},[128,40118,4654],{"class":166},[128,40120,3034],{"class":138},[128,40122,40123],{"class":130,"line":1797},[128,40124,40125],{"class":3814},"    # 选择最优参数并保存\n",[128,40127,40128],{"class":130,"line":1814},[128,40129,40130],{"class":3814},"    # 保存最佳模型权重字典\n",[128,40132,40133,40136,40138],{"class":130,"line":36751},[128,40134,40135],{"class":138},"    torch.save(best_model_wts,",[128,40137,36763],{"class":176},[128,40139,180],{"class":138},[128,40141,40142],{"class":130,"line":36757},[128,40143,36783],{"class":3814},[128,40145,40146,40148,40150,40152,40154,40156],{"class":130,"line":36768},[128,40147,36789],{"class":138},[128,40149,270],{"class":134},[128,40151,36794],{"class":138},[128,40153,36797],{"class":266},[128,40155,270],{"class":134},[128,40157,5157],{"class":138},[128,40159,40160,40162,40164,40166],{"class":130,"line":36774},[128,40161,36807],{"class":176},[128,40163,4607],{"class":138},[128,40165,36812],{"class":166},[128,40167,36815],{"class":138},[128,40169,40170,40172],{"class":130,"line":36780},[128,40171,36821],{"class":176},[128,40173,36824],{"class":138},[128,40175,40176,40178],{"class":130,"line":36786},[128,40177,36830],{"class":176},[128,40179,36833],{"class":138},[128,40181,40182,40184],{"class":130,"line":36804},[128,40183,36839],{"class":176},[128,40185,36842],{"class":138},[128,40187,40188,40190],{"class":130,"line":36818},[128,40189,36848],{"class":176},[128,40191,36851],{"class":138},[128,40193,40194],{"class":130,"line":36827},[128,40195,917],{"class":138},[128,40197,40198],{"class":130,"line":36836},[128,40199,36862],{"class":3814},[128,40201,40202,40204],{"class":130,"line":36845},[128,40203,587],{"class":134},[128,40205,36870],{"class":138},[128,40207,40208],{"class":130,"line":36854},[128,40209,160],{"emptyLinePlaceholder":159},[128,40211,40212],{"class":130,"line":36859},[128,40213,36881],{"class":3814},[128,40215,40216,40218,40220],{"class":130,"line":36865},[128,40217,196],{"class":134},[128,40219,36889],{"class":199},[128,40221,36892],{"class":138},[128,40223,40224],{"class":130,"line":36873},[128,40225,36898],{"class":3814},[128,40227,40228,40230,40232,40234,40236,40238,40240,40242],{"class":130,"line":36878},[128,40229,36904],{"class":138},[128,40231,35162],{"class":266},[128,40233,270],{"class":134},[128,40235,253],{"class":138},[128,40237,4247],{"class":166},[128,40239,4128],{"class":138},[128,40241,4043],{"class":166},[128,40243,3034],{"class":138},[128,40245,40246],{"class":130,"line":36884},[128,40247,36924],{"class":3814},[128,40249,40250],{"class":130,"line":36895},[128,40251,36930],{"class":3814},[128,40253,40254],{"class":130,"line":36901},[128,40255,36936],{"class":3814},[128,40257,40258,40260,40262,40264,40266,40268,40270],{"class":130,"line":36921},[128,40259,35196],{"class":138},[128,40261,2592],{"class":166},[128,40263,4128],{"class":138},[128,40265,409],{"class":166},[128,40267,4128],{"class":138},[128,40269,2592],{"class":166},[128,40271,180],{"class":138},[128,40273,40274],{"class":130,"line":36927},[128,40275,36959],{"class":3814},[128,40277,40278],{"class":130,"line":36933},[128,40279,36965],{"class":3814},[128,40281,40282],{"class":130,"line":36939},[128,40283,36971],{"class":3814},[128,40285,40286],{"class":130,"line":36956},[128,40287,36977],{"class":3814},[128,40289,40290],{"class":130,"line":36962},[128,40291,36983],{"class":3814},[128,40293,40294,40296,40298,40300,40302,40304,40306,40308,40310],{"class":130,"line":36968},[128,40295,36989],{"class":138},[128,40297,36992],{"class":176},[128,40299,36995],{"class":138},[128,40301,36998],{"class":176},[128,40303,4128],{"class":138},[128,40305,37003],{"class":266},[128,40307,270],{"class":134},[128,40309,37008],{"class":176},[128,40311,180],{"class":138},[128,40313,40314,40316,40318,40320,40322,40324,40326,40328,40330],{"class":130,"line":36974},[128,40315,36989],{"class":138},[128,40317,36992],{"class":176},[128,40319,37020],{"class":138},[128,40321,37023],{"class":176},[128,40323,4128],{"class":138},[128,40325,37003],{"class":266},[128,40327,270],{"class":134},[128,40329,37032],{"class":176},[128,40331,180],{"class":138},[128,40333,40334],{"class":130,"line":36980},[128,40335,37040],{"class":3814},[128,40337,40338],{"class":130,"line":36986},[128,40339,37046],{"class":138},[128,40341,40342],{"class":130,"line":37013},[128,40343,37052],{"class":3814},[128,40345,40346,40348,40350],{"class":130,"line":37037},[128,40347,37058],{"class":138},[128,40349,37061],{"class":176},[128,40351,180],{"class":138},[128,40353,40354,40356,40358],{"class":130,"line":37043},[128,40355,37069],{"class":138},[128,40357,37072],{"class":176},[128,40359,180],{"class":138},[128,40361,40362],{"class":130,"line":37049},[128,40363,37080],{"class":3814},[128,40365,40366,40368,40370,40372,40374,40376,40378],{"class":130,"line":37055},[128,40367,35196],{"class":138},[128,40369,2592],{"class":166},[128,40371,4128],{"class":138},[128,40373,409],{"class":166},[128,40375,4128],{"class":138},[128,40377,409],{"class":166},[128,40379,180],{"class":138},[128,40381,40382,40384,40386,40388,40390,40392,40394,40396,40398],{"class":130,"line":37066},[128,40383,36989],{"class":138},[128,40385,36992],{"class":176},[128,40387,37107],{"class":138},[128,40389,36998],{"class":176},[128,40391,4128],{"class":138},[128,40393,37003],{"class":266},[128,40395,270],{"class":134},[128,40397,37118],{"class":176},[128,40399,180],{"class":138},[128,40401,40402,40404,40406,40408,40410,40412,40414,40416,40418],{"class":130,"line":37077},[128,40403,36989],{"class":138},[128,40405,36992],{"class":176},[128,40407,37130],{"class":138},[128,40409,37023],{"class":176},[128,40411,4128],{"class":138},[128,40413,37003],{"class":266},[128,40415,270],{"class":134},[128,40417,37141],{"class":176},[128,40419,180],{"class":138},[128,40421,40422],{"class":130,"line":37083},[128,40423,37149],{"class":3814},[128,40425,40426],{"class":130,"line":37100},[128,40427,37046],{"class":138},[128,40429,40430,40432,40434],{"class":130,"line":37123},[128,40431,37058],{"class":138},[128,40433,36992],{"class":176},[128,40435,180],{"class":138},[128,40437,40438,40440,40442],{"class":130,"line":37146},[128,40439,37069],{"class":138},[128,40441,37171],{"class":176},[128,40443,180],{"class":138},[128,40445,40446],{"class":130,"line":37152},[128,40447,37179],{"class":138},[128,40449,40450],{"class":130,"line":37157},[128,40451,160],{"emptyLinePlaceholder":159},[128,40453,40454],{"class":130,"line":37166},[128,40455,37190],{"class":3814},[128,40457,40458,40460,40462,40464,40466],{"class":130,"line":37176},[128,40459,1800],{"class":134},[128,40461,1803],{"class":166},[128,40463,570],{"class":134},[128,40465,34697],{"class":176},[128,40467,241],{"class":138},[128,40469,40470],{"class":130,"line":37182},[128,40471,37209],{"class":3814},[128,40473,40474,40477,40479],{"class":130,"line":37187},[128,40475,40476],{"class":138},"    AlexNet",[128,40478,270],{"class":134},[128,40480,40481],{"class":138},"AlexNet()\n",[128,40483,40484,40486,40488],{"class":130,"line":37193},[128,40485,37226],{"class":138},[128,40487,270],{"class":134},[128,40489,37231],{"class":138},[128,40491,40492,40494,40496,40499,40501,40503,40505],{"class":130,"line":37206},[128,40493,36789],{"class":138},[128,40495,270],{"class":134},[128,40497,40498],{"class":138},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[128,40500,37244],{"class":266},[128,40502,270],{"class":134},[128,40504,4449],{"class":166},[128,40506,180],{"class":138},[128,40508,40509],{"class":130,"line":37212},[128,40510,37256],{"class":138},[26,40512,40513],{"start":156},[29,40514,37269],{},[106,40516,40518],{"className":122,"code":40517,"language":124,"meta":112,"style":112},"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",[114,40519,40520,40526,40536,40546,40556,40560,40570,40580,40591,40595,40599,40603,40611,40627,40637,40653,40663,40677,40681,40691,40701,40711,40717,40721,40725,40733,40737,40753,40761,40765,40769,40777,40785,40789,40793,40797,40801,40807,40811,40821,40829,40837,40841,40845,40849,40857,40861,40877,40881,40885,40889,40901,40905,40917,40921,40925,40937,40941,40951,40955,40959,40971,40975,40983,40987,40991,40999,41003,41011,41015,41019,41023,41027,41031,41047,41055,41059,41063,41111,41117,41121,41131,41139,41147,41151,41155,41159,41163,41171,41175,41191,41195,41203,41211],{"__ignoreMap":112},[128,40521,40522,40524],{"class":130,"line":131},[128,40523,135],{"class":134},[128,40525,33876],{"class":138},[128,40527,40528,40530,40532,40534],{"class":130,"line":142},[128,40529,135],{"class":134},[128,40531,34885],{"class":138},[128,40533,279],{"class":134},[128,40535,34890],{"class":138},[128,40537,40538,40540,40542,40544],{"class":130,"line":156},[128,40539,145],{"class":134},[128,40541,37297],{"class":138},[128,40543,135],{"class":134},[128,40545,37302],{"class":138},[128,40547,40548,40550,40552,40554],{"class":130,"line":163},[128,40549,145],{"class":134},[128,40551,34868],{"class":138},[128,40553,135],{"class":134},[128,40555,34873],{"class":138},[128,40557,40558],{"class":130,"line":183},[128,40559,37317],{"class":3814},[128,40561,40562,40564,40566,40568],{"class":130,"line":188},[128,40563,145],{"class":134},[128,40565,34839],{"class":138},[128,40567,135],{"class":134},[128,40569,34844],{"class":138},[128,40571,40572,40574,40576,40578],{"class":130,"line":193},[128,40573,145],{"class":134},[128,40575,35383],{"class":138},[128,40577,135],{"class":134},[128,40579,38949],{"class":138},[128,40581,40582,40584,40587,40589],{"class":130,"line":206},[128,40583,145],{"class":134},[128,40585,40586],{"class":138}," 练习.AlexNet.model ",[128,40588,135],{"class":134},[128,40590,38949],{"class":138},[128,40592,40593],{"class":130,"line":221},[128,40594,160],{"emptyLinePlaceholder":159},[128,40596,40597],{"class":130,"line":230},[128,40598,160],{"emptyLinePlaceholder":159},[128,40600,40601],{"class":130,"line":235},[128,40602,37346],{"class":3814},[128,40604,40605,40607,40609],{"class":130,"line":244},[128,40606,196],{"class":134},[128,40608,37353],{"class":199},[128,40610,203],{"class":138},[128,40612,40613,40615,40617,40619,40621,40623,40625],{"class":130,"line":287},[128,40614,37360],{"class":138},[128,40616,270],{"class":134},[128,40618,34925],{"class":138},[128,40620,34928],{"class":266},[128,40622,270],{"class":134},[128,40624,34933],{"class":176},[128,40626,2665],{"class":138},[128,40628,40629,40631,40633,40635],{"class":130,"line":301},[128,40630,37377],{"class":266},[128,40632,270],{"class":134},[128,40634,399],{"class":166},[128,40636,2665],{"class":138},[128,40638,40639,40641,40643,40645,40647,40649,40651],{"class":130,"line":310},[128,40640,37388],{"class":266},[128,40642,270],{"class":134},[128,40644,34962],{"class":138},[128,40646,34965],{"class":266},[128,40648,270],{"class":134},[128,40650,38841],{"class":166},[128,40652,34973],{"class":138},[128,40654,40655,40657,40659,40661],{"class":130,"line":323},[128,40656,37405],{"class":266},[128,40658,270],{"class":134},[128,40660,34945],{"class":166},[128,40662,180],{"class":138},[128,40664,40665,40667,40669,40671,40673,40675],{"class":130,"line":330},[128,40666,37416],{"class":138},[128,40668,270],{"class":134},[128,40670,35003],{"class":138},[128,40672,35006],{"class":266},[128,40674,270],{"class":134},[128,40676,37427],{"class":138},[128,40678,40679],{"class":130,"line":335},[128,40680,37432],{"class":3814},[128,40682,40683,40685,40687,40689],{"class":130,"line":340},[128,40684,37437],{"class":266},[128,40686,270],{"class":134},[128,40688,2592],{"class":166},[128,40690,2665],{"class":138},[128,40692,40693,40695,40697,40699],{"class":130,"line":351},[128,40694,37448],{"class":266},[128,40696,270],{"class":134},[128,40698,34945],{"class":166},[128,40700,2665],{"class":138},[128,40702,40703,40705,40707,40709],{"class":130,"line":384},[128,40704,37459],{"class":266},[128,40706,270],{"class":134},[128,40708,2452],{"class":166},[128,40710,180],{"class":138},[128,40712,40713,40715],{"class":130,"line":414},[128,40714,587],{"class":134},[128,40716,37472],{"class":138},[128,40718,40719],{"class":130,"line":419},[128,40720,160],{"emptyLinePlaceholder":159},[128,40722,40723],{"class":130,"line":424},[128,40724,37481],{"class":3814},[128,40726,40727,40729,40731],{"class":130,"line":434},[128,40728,196],{"class":134},[128,40730,37488],{"class":199},[128,40732,37491],{"class":138},[128,40734,40735],{"class":130,"line":447},[128,40736,37496],{"class":3814},[128,40738,40739,40741,40743,40745,40747,40749,40751],{"class":130,"line":459},[128,40740,34709],{"class":138},[128,40742,270],{"class":134},[128,40744,34716],{"class":176},[128,40746,5302],{"class":134},[128,40748,34721],{"class":138},[128,40750,5299],{"class":134},[128,40752,37513],{"class":176},[128,40754,40755,40757,40759],{"class":130,"line":471},[128,40756,34761],{"class":138},[128,40758,270],{"class":134},[128,40760,35756],{"class":138},[128,40762,40763],{"class":130,"line":483},[128,40764,160],{"emptyLinePlaceholder":159},[128,40766,40767],{"class":130,"line":495},[128,40768,37530],{"class":3814},[128,40770,40771,40773,40775],{"class":130,"line":507},[128,40772,37535],{"class":138},[128,40774,270],{"class":134},[128,40776,35809],{"class":166},[128,40778,40779,40781,40783],{"class":130,"line":519},[128,40780,37544],{"class":138},[128,40782,270],{"class":134},[128,40784,6656],{"class":166},[128,40786,40787],{"class":130,"line":524},[128,40788,160],{"emptyLinePlaceholder":159},[128,40790,40791],{"class":130,"line":529},[128,40792,37557],{"class":3814},[128,40794,40795],{"class":130,"line":540},[128,40796,37562],{"class":3814},[128,40798,40799],{"class":130,"line":555},[128,40800,37567],{"class":3814},[128,40802,40803,40805],{"class":130,"line":576},[128,40804,354],{"class":134},[128,40806,36320],{"class":138},[128,40808,40809],{"class":130,"line":584},[128,40810,37578],{"class":3814},[128,40812,40813,40815,40817,40819],{"class":130,"line":593},[128,40814,2141],{"class":134},[128,40816,37585],{"class":138},[128,40818,549],{"class":134},[128,40820,37590],{"class":138},[128,40822,40823,40825,40827],{"class":130,"line":598},[128,40824,37595],{"class":138},[128,40826,270],{"class":134},[128,40828,37600],{"class":138},[128,40830,40831,40833,40835],{"class":130,"line":603},[128,40832,37605],{"class":138},[128,40834,270],{"class":134},[128,40836,37610],{"class":138},[128,40838,40839],{"class":130,"line":614},[128,40840,37615],{"class":3814},[128,40842,40843],{"class":130,"line":625},[128,40844,36312],{"class":138},[128,40846,40847],{"class":130,"line":633},[128,40848,37624],{"class":3814},[128,40850,40851,40853,40855],{"class":130,"line":649},[128,40852,36121],{"class":138},[128,40854,270],{"class":134},[128,40856,37633],{"class":138},[128,40858,40859],{"class":130,"line":660},[128,40860,37638],{"class":3814},[128,40862,40863,40865,40867,40869,40871,40873,40875],{"class":130,"line":673},[128,40864,36136],{"class":138},[128,40866,270],{"class":134},[128,40868,36141],{"class":138},[128,40870,36144],{"class":266},[128,40872,270],{"class":134},[128,40874,2592],{"class":166},[128,40876,180],{"class":138},[128,40878,40879],{"class":130,"line":678},[128,40880,37659],{"class":3814},[128,40882,40883],{"class":130,"line":683},[128,40884,37664],{"class":3814},[128,40886,40887],{"class":130,"line":693},[128,40888,37669],{"class":3814},[128,40890,40891,40893,40895,40897,40899],{"class":130,"line":702},[128,40892,37674],{"class":138},[128,40894,13023],{"class":134},[128,40896,36234],{"class":138},[128,40898,570],{"class":134},[128,40900,37683],{"class":138},[128,40902,40903],{"class":130,"line":709},[128,40904,37688],{"class":3814},[128,40906,40907,40909,40911,40913,40915],{"class":130,"line":723},[128,40908,37693],{"class":138},[128,40910,13023],{"class":134},[128,40912,37698],{"class":138},[128,40914,2452],{"class":166},[128,40916,180],{"class":138},[128,40918,40919],{"class":130,"line":732},[128,40920,160],{"emptyLinePlaceholder":159},[128,40922,40923],{"class":130,"line":744},[128,40924,37711],{"class":3814},[128,40926,40927,40929,40931,40933,40935],{"class":130,"line":749},[128,40928,37716],{"class":138},[128,40930,270],{"class":134},[128,40932,37721],{"class":138},[128,40934,4333],{"class":134},[128,40936,37726],{"class":138},[128,40938,40939],{"class":130,"line":754},[128,40940,37731],{"class":3814},[128,40942,40943,40945,40947,40949],{"class":130,"line":764},[128,40944,313],{"class":166},[128,40946,253],{"class":138},[128,40948,37740],{"class":176},[128,40950,37743],{"class":138},[128,40952,40953],{"class":130,"line":782},[128,40954,160],{"emptyLinePlaceholder":159},[128,40956,40957],{"class":130,"line":787},[128,40958,37752],{"class":3814},[128,40960,40961,40963,40965,40967,40969],{"class":130,"line":795},[128,40962,1800],{"class":134},[128,40964,1803],{"class":166},[128,40966,570],{"class":134},[128,40968,34697],{"class":176},[128,40970,241],{"class":138},[128,40972,40973],{"class":130,"line":807},[128,40974,37769],{"class":3814},[128,40976,40977,40979,40981],{"class":130,"line":813},[128,40978,34761],{"class":138},[128,40980,270],{"class":134},[128,40982,40481],{"class":138},[128,40984,40985],{"class":130,"line":818},[128,40986,37782],{"class":3814},[128,40988,40989],{"class":130,"line":835},[128,40990,37787],{"class":3814},[128,40992,40993,40995,40997],{"class":130,"line":851},[128,40994,37792],{"class":138},[128,40996,37795],{"class":176},[128,40998,3034],{"class":138},[128,41000,41001],{"class":130,"line":867},[128,41002,37802],{"class":3814},[128,41004,41005,41007,41009],{"class":130,"line":872},[128,41006,37416],{"class":138},[128,41008,270],{"class":134},[128,41010,37811],{"class":138},[128,41012,41013],{"class":130,"line":878},[128,41014,37816],{"class":3814},[128,41016,41017],{"class":130,"line":887},[128,41018,37821],{"class":138},[128,41020,41021],{"class":130,"line":896},[128,41022,160],{"emptyLinePlaceholder":159},[128,41024,41025],{"class":130,"line":905},[128,41026,37830],{"class":3814},[128,41028,41029],{"class":130,"line":914},[128,41030,37835],{"class":3814},[128,41032,41033,41035,41037,41039,41041,41043,41045],{"class":130,"line":920},[128,41034,34709],{"class":138},[128,41036,270],{"class":134},[128,41038,34716],{"class":176},[128,41040,5302],{"class":134},[128,41042,34721],{"class":138},[128,41044,5299],{"class":134},[128,41046,37513],{"class":176},[128,41048,41049,41051,41053],{"class":130,"line":926},[128,41050,34761],{"class":138},[128,41052,270],{"class":134},[128,41054,35756],{"class":138},[128,41056,41057],{"class":130,"line":938},[128,41058,37864],{"class":3814},[128,41060,41061],{"class":130,"line":943},[128,41062,37869],{"class":3814},[128,41064,41065,41067,41069,41071,41073,41075,41077,41079,41081,41083,41085,41087,41089,41091,41093,41095,41097,41099,41101,41103,41105,41107,41109],{"class":130,"line":948},[128,41066,37874],{"class":138},[128,41068,270],{"class":134},[128,41070,4638],{"class":138},[128,41072,37881],{"class":176},[128,41074,4128],{"class":138},[128,41076,37886],{"class":176},[128,41078,4128],{"class":138},[128,41080,37891],{"class":176},[128,41082,4128],{"class":138},[128,41084,37896],{"class":176},[128,41086,4128],{"class":138},[128,41088,37901],{"class":176},[128,41090,4128],{"class":138},[128,41092,37906],{"class":176},[128,41094,4128],{"class":138},[128,41096,37911],{"class":176},[128,41098,4128],{"class":138},[128,41100,37916],{"class":176},[128,41102,4128],{"class":138},[128,41104,37921],{"class":176},[128,41106,4128],{"class":138},[128,41108,37926],{"class":176},[128,41110,2376],{"class":138},[128,41112,41113,41115],{"class":130,"line":958},[128,41114,354],{"class":134},[128,41116,36320],{"class":138},[128,41118,41119],{"class":130,"line":974},[128,41120,37939],{"class":3814},[128,41122,41123,41125,41127,41129],{"class":130,"line":985},[128,41124,2141],{"class":134},[128,41126,37946],{"class":138},[128,41128,549],{"class":134},[128,41130,37590],{"class":138},[128,41132,41133,41135,41137],{"class":130,"line":990},[128,41134,36076],{"class":138},[128,41136,270],{"class":134},[128,41138,36081],{"class":138},[128,41140,41141,41143,41145],{"class":130,"line":1005},[128,41142,36091],{"class":138},[128,41144,270],{"class":134},[128,41146,36096],{"class":138},[128,41148,41149],{"class":130,"line":1017},[128,41150,160],{"emptyLinePlaceholder":159},[128,41152,41153],{"class":130,"line":1022},[128,41154,37975],{"class":3814},[128,41156,41157],{"class":130,"line":1027},[128,41158,36312],{"class":138},[128,41160,41161],{"class":130,"line":1033},[128,41162,37984],{"class":3814},[128,41164,41165,41167,41169],{"class":130,"line":1038},[128,41166,36121],{"class":138},[128,41168,270],{"class":134},[128,41170,36126],{"class":138},[128,41172,41173],{"class":130,"line":1050},[128,41174,37997],{"class":3814},[128,41176,41177,41179,41181,41183,41185,41187,41189],{"class":130,"line":1055},[128,41178,36136],{"class":138},[128,41180,270],{"class":134},[128,41182,36141],{"class":138},[128,41184,36144],{"class":266},[128,41186,270],{"class":134},[128,41188,2592],{"class":166},[128,41190,180],{"class":138},[128,41192,41193],{"class":130,"line":1060},[128,41194,38018],{"class":3814},[128,41196,41197,41199,41201],{"class":130,"line":1070},[128,41198,38023],{"class":138},[128,41200,270],{"class":134},[128,41202,38028],{"class":138},[128,41204,41205,41207,41209],{"class":130,"line":1086},[128,41206,38033],{"class":138},[128,41208,270],{"class":134},[128,41210,38038],{"class":138},[128,41212,41213,41215,41217,41219,41221,41223,41225,41227],{"class":130,"line":1095},[128,41214,663],{"class":166},[128,41216,253],{"class":138},[128,41218,38047],{"class":176},[128,41220,38050],{"class":138},[128,41222,38053],{"class":176},[128,41224,4128],{"class":138},[128,41226,38058],{"class":176},[128,41228,38061],{"class":138},[72,41230,41232],{"id":41231},"_22vgg","2.2.VGG",[25485,41234,41236],{"id":41235},"_221原理","2.2.1.原理",[19,41238,41239],{},[5074,41240],{"alt":112,"src":41241},"\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,41243,41244],{},[5074,41245],{"alt":112,"src":41246},"\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,41248,41249],{},[5074,41250],{"alt":112,"src":41251},"\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,41253,41254],{},"参数详细描述：",[19,41256,41257],{},[5074,41258],{"alt":112,"src":41259},"\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,41261,41262],{},[5074,41263],{"alt":112,"src":41264},"\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,41266,41267],{},[5074,41268],{"alt":112,"src":41269},"\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,41271,41272],{},[5074,41273],{"alt":112,"src":41274},"\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,41276,41277],{},[5074,41278],{"alt":112,"src":41279},"\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",[25485,41281,41283],{"id":41282},"_222代码实现","2.2.2.代码实现",[26,41285,41286],{},[29,41287,41288],{},"网络搭建",[106,41290,41292],{"className":122,"code":41291,"language":124,"meta":112,"style":112},"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",[114,41293,41294,41300,41312,41322,41332,41336,41353,41361,41380,41385,41390,41402,41439,41444,41480,41484,41513,41517,41522,41533,41569,41573,41609,41613,41641,41645,41650,41661,41697,41701,41737,41741,41777,41781,41809,41813,41818,41829,41866,41870,41906,41910,41946,41950,41978,41982,41987,41998,42034,42038,42074,42078,42114,42118,42146,42150,42155,42166,42171,42176,42181,42202,42206,42218,42222,42234,42238,42242,42247,42252,42266,42271,42281,42286,42301,42306,42322,42327,42336,42341,42351,42356,42361,42375,42380,42394,42402,42406,42410,42418,42429,42440,42451,42462,42473,42484,42490,42494,42499,42512,42532,42538,42547],{"__ignoreMap":112},[128,41295,41296,41298],{"class":130,"line":131},[128,41297,135],{"class":134},[128,41299,33876],{"class":138},[128,41301,41302,41304,41307,41309],{"class":130,"line":142},[128,41303,145],{"class":134},[128,41305,41306],{"class":138}," sympy.core.sympify ",[128,41308,135],{"class":134},[128,41310,41311],{"class":138}," kernS\n",[128,41313,41314,41316,41318,41320],{"class":130,"line":156},[128,41315,145],{"class":134},[128,41317,34218],{"class":138},[128,41319,135],{"class":134},[128,41321,34223],{"class":138},[128,41323,41324,41326,41328,41330],{"class":130,"line":163},[128,41325,145],{"class":134},[128,41327,34235],{"class":138},[128,41329,135],{"class":134},[128,41331,34240],{"class":138},[128,41333,41334],{"class":130,"line":183},[128,41335,160],{"emptyLinePlaceholder":159},[128,41337,41338,41340,41343,41345,41347,41349,41351],{"class":130,"line":188},[128,41339,1901],{"class":134},[128,41341,41342],{"class":199}," VGG16",[128,41344,253],{"class":138},[128,41346,34256],{"class":199},[128,41348,4307],{"class":138},[128,41350,34261],{"class":199},[128,41352,34264],{"class":138},[128,41354,41355,41357,41359],{"class":130,"line":193},[128,41356,1946],{"class":134},[128,41358,2108],{"class":166},[128,41360,1952],{"class":138},[128,41362,41363,41365,41367,41370,41372,41374,41376,41378],{"class":130,"line":206},[128,41364,34292],{"class":166},[128,41366,253],{"class":138},[128,41368,41369],{"class":166},"VGG16",[128,41371,258],{"class":138},[128,41373,1970],{"class":166},[128,41375,34300],{"class":138},[128,41377,34303],{"class":166},[128,41379,5563],{"class":138},[128,41381,41382],{"class":130,"line":221},[128,41383,41384],{"class":3814},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[128,41386,41387],{"class":130,"line":230},[128,41388,41389],{"class":3814},"        # 这里用的是灰度图\n",[128,41391,41392,41394,41397,41399],{"class":130,"line":235},[128,41393,2115],{"class":166},[128,41395,41396],{"class":138},".block1",[128,41398,270],{"class":134},[128,41400,41401],{"class":138},"nn.Sequential(\n",[128,41403,41404,41407,41409,41411,41413,41415,41417,41419,41421,41423,41425,41427,41429,41431,41433,41435,41437],{"class":130,"line":244},[128,41405,41406],{"class":138},"            nn.Conv2d(",[128,41408,34329],{"class":266},[128,41410,270],{"class":134},[128,41412,2592],{"class":166},[128,41414,4128],{"class":138},[128,41416,34338],{"class":266},[128,41418,270],{"class":134},[128,41420,3956],{"class":166},[128,41422,4128],{"class":138},[128,41424,34347],{"class":266},[128,41426,270],{"class":134},[128,41428,3827],{"class":166},[128,41430,4128],{"class":138},[128,41432,34356],{"class":266},[128,41434,270],{"class":134},[128,41436,2592],{"class":166},[128,41438,2760],{"class":138},[128,41440,41441],{"class":130,"line":287},[128,41442,41443],{"class":138},"            nn.ReLU(),\n",[128,41445,41446,41448,41450,41452,41454,41456,41458,41460,41462,41464,41466,41468,41470,41472,41474,41476,41478],{"class":130,"line":301},[128,41447,41406],{"class":138},[128,41449,34329],{"class":266},[128,41451,270],{"class":134},[128,41453,3956],{"class":166},[128,41455,4128],{"class":138},[128,41457,34338],{"class":266},[128,41459,270],{"class":134},[128,41461,3956],{"class":166},[128,41463,4128],{"class":138},[128,41465,34347],{"class":266},[128,41467,270],{"class":134},[128,41469,3827],{"class":166},[128,41471,4128],{"class":138},[128,41473,34356],{"class":266},[128,41475,270],{"class":134},[128,41477,2592],{"class":166},[128,41479,2760],{"class":138},[128,41481,41482],{"class":130,"line":310},[128,41483,41443],{"class":138},[128,41485,41486,41489,41491,41493,41495,41497,41499,41501,41503,41505,41507,41509,41511],{"class":130,"line":323},[128,41487,41488],{"class":138},"            nn.MaxPool2d(",[128,41490,34347],{"class":266},[128,41492,270],{"class":134},[128,41494,409],{"class":166},[128,41496,4128],{"class":138},[128,41498,34402],{"class":266},[128,41500,270],{"class":134},[128,41502,409],{"class":166},[128,41504,4128],{"class":138},[128,41506,34356],{"class":266},[128,41508,270],{"class":134},[128,41510,2452],{"class":166},[128,41512,180],{"class":138},[128,41514,41515],{"class":130,"line":330},[128,41516,2084],{"class":138},[128,41518,41519],{"class":130,"line":335},[128,41520,41521],{"class":3814},"        # 第二层\n",[128,41523,41524,41526,41529,41531],{"class":130,"line":340},[128,41525,2115],{"class":166},[128,41527,41528],{"class":138},".block2",[128,41530,270],{"class":134},[128,41532,41401],{"class":138},[128,41534,41535,41537,41539,41541,41543,41545,41547,41549,41551,41553,41555,41557,41559,41561,41563,41565,41567],{"class":130,"line":351},[128,41536,41406],{"class":138},[128,41538,34329],{"class":266},[128,41540,270],{"class":134},[128,41542,3956],{"class":166},[128,41544,4128],{"class":138},[128,41546,34338],{"class":266},[128,41548,270],{"class":134},[128,41550,35537],{"class":166},[128,41552,4128],{"class":138},[128,41554,34347],{"class":266},[128,41556,270],{"class":134},[128,41558,3827],{"class":166},[128,41560,4128],{"class":138},[128,41562,34356],{"class":266},[128,41564,270],{"class":134},[128,41566,2592],{"class":166},[128,41568,2760],{"class":138},[128,41570,41571],{"class":130,"line":384},[128,41572,41443],{"class":138},[128,41574,41575,41577,41579,41581,41583,41585,41587,41589,41591,41593,41595,41597,41599,41601,41603,41605,41607],{"class":130,"line":414},[128,41576,41406],{"class":138},[128,41578,34329],{"class":266},[128,41580,270],{"class":134},[128,41582,35537],{"class":166},[128,41584,4128],{"class":138},[128,41586,34338],{"class":266},[128,41588,270],{"class":134},[128,41590,35537],{"class":166},[128,41592,4128],{"class":138},[128,41594,34347],{"class":266},[128,41596,270],{"class":134},[128,41598,3827],{"class":166},[128,41600,4128],{"class":138},[128,41602,34356],{"class":266},[128,41604,270],{"class":134},[128,41606,2592],{"class":166},[128,41608,2760],{"class":138},[128,41610,41611],{"class":130,"line":419},[128,41612,41443],{"class":138},[128,41614,41615,41617,41619,41621,41623,41625,41627,41629,41631,41633,41635,41637,41639],{"class":130,"line":424},[128,41616,41488],{"class":138},[128,41618,34347],{"class":266},[128,41620,270],{"class":134},[128,41622,409],{"class":166},[128,41624,4128],{"class":138},[128,41626,34402],{"class":266},[128,41628,270],{"class":134},[128,41630,409],{"class":166},[128,41632,4128],{"class":138},[128,41634,34356],{"class":266},[128,41636,270],{"class":134},[128,41638,2452],{"class":166},[128,41640,180],{"class":138},[128,41642,41643],{"class":130,"line":434},[128,41644,2084],{"class":138},[128,41646,41647],{"class":130,"line":447},[128,41648,41649],{"class":3814},"        # 第三层\n",[128,41651,41652,41654,41657,41659],{"class":130,"line":459},[128,41653,2115],{"class":166},[128,41655,41656],{"class":138},".block3",[128,41658,270],{"class":134},[128,41660,41401],{"class":138},[128,41662,41663,41665,41667,41669,41671,41673,41675,41677,41679,41681,41683,41685,41687,41689,41691,41693,41695],{"class":130,"line":471},[128,41664,41406],{"class":138},[128,41666,34329],{"class":266},[128,41668,270],{"class":134},[128,41670,35537],{"class":166},[128,41672,4128],{"class":138},[128,41674,34338],{"class":266},[128,41676,270],{"class":134},[128,41678,38262],{"class":166},[128,41680,4128],{"class":138},[128,41682,34347],{"class":266},[128,41684,270],{"class":134},[128,41686,3827],{"class":166},[128,41688,4128],{"class":138},[128,41690,34356],{"class":266},[128,41692,270],{"class":134},[128,41694,2592],{"class":166},[128,41696,2760],{"class":138},[128,41698,41699],{"class":130,"line":483},[128,41700,41443],{"class":138},[128,41702,41703,41705,41707,41709,41711,41713,41715,41717,41719,41721,41723,41725,41727,41729,41731,41733,41735],{"class":130,"line":495},[128,41704,41406],{"class":138},[128,41706,34329],{"class":266},[128,41708,270],{"class":134},[128,41710,38262],{"class":166},[128,41712,4128],{"class":138},[128,41714,34338],{"class":266},[128,41716,270],{"class":134},[128,41718,38262],{"class":166},[128,41720,4128],{"class":138},[128,41722,34347],{"class":266},[128,41724,270],{"class":134},[128,41726,3827],{"class":166},[128,41728,4128],{"class":138},[128,41730,34356],{"class":266},[128,41732,270],{"class":134},[128,41734,2592],{"class":166},[128,41736,2760],{"class":138},[128,41738,41739],{"class":130,"line":507},[128,41740,41443],{"class":138},[128,41742,41743,41745,41747,41749,41751,41753,41755,41757,41759,41761,41763,41765,41767,41769,41771,41773,41775],{"class":130,"line":519},[128,41744,41406],{"class":138},[128,41746,34329],{"class":266},[128,41748,270],{"class":134},[128,41750,38262],{"class":166},[128,41752,4128],{"class":138},[128,41754,34338],{"class":266},[128,41756,270],{"class":134},[128,41758,38262],{"class":166},[128,41760,4128],{"class":138},[128,41762,34347],{"class":266},[128,41764,270],{"class":134},[128,41766,3827],{"class":166},[128,41768,4128],{"class":138},[128,41770,34356],{"class":266},[128,41772,270],{"class":134},[128,41774,2592],{"class":166},[128,41776,2760],{"class":138},[128,41778,41779],{"class":130,"line":524},[128,41780,41443],{"class":138},[128,41782,41783,41785,41787,41789,41791,41793,41795,41797,41799,41801,41803,41805,41807],{"class":130,"line":529},[128,41784,41488],{"class":138},[128,41786,34347],{"class":266},[128,41788,270],{"class":134},[128,41790,409],{"class":166},[128,41792,4128],{"class":138},[128,41794,34402],{"class":266},[128,41796,270],{"class":134},[128,41798,409],{"class":166},[128,41800,4128],{"class":138},[128,41802,34356],{"class":266},[128,41804,270],{"class":134},[128,41806,2452],{"class":166},[128,41808,180],{"class":138},[128,41810,41811],{"class":130,"line":540},[128,41812,2084],{"class":138},[128,41814,41815],{"class":130,"line":555},[128,41816,41817],{"class":3814},"        # 第四层\n",[128,41819,41820,41822,41825,41827],{"class":130,"line":576},[128,41821,2115],{"class":166},[128,41823,41824],{"class":138},".block4",[128,41826,270],{"class":134},[128,41828,41401],{"class":138},[128,41830,41831,41833,41835,41837,41839,41841,41843,41845,41848,41850,41852,41854,41856,41858,41860,41862,41864],{"class":130,"line":584},[128,41832,41406],{"class":138},[128,41834,34329],{"class":266},[128,41836,270],{"class":134},[128,41838,38262],{"class":166},[128,41840,4128],{"class":138},[128,41842,34338],{"class":266},[128,41844,270],{"class":134},[128,41846,41847],{"class":166},"512",[128,41849,4128],{"class":138},[128,41851,34347],{"class":266},[128,41853,270],{"class":134},[128,41855,3827],{"class":166},[128,41857,4128],{"class":138},[128,41859,34356],{"class":266},[128,41861,270],{"class":134},[128,41863,2592],{"class":166},[128,41865,2760],{"class":138},[128,41867,41868],{"class":130,"line":593},[128,41869,41443],{"class":138},[128,41871,41872,41874,41876,41878,41880,41882,41884,41886,41888,41890,41892,41894,41896,41898,41900,41902,41904],{"class":130,"line":598},[128,41873,41406],{"class":138},[128,41875,34329],{"class":266},[128,41877,270],{"class":134},[128,41879,41847],{"class":166},[128,41881,4128],{"class":138},[128,41883,34338],{"class":266},[128,41885,270],{"class":134},[128,41887,41847],{"class":166},[128,41889,4128],{"class":138},[128,41891,34347],{"class":266},[128,41893,270],{"class":134},[128,41895,3827],{"class":166},[128,41897,4128],{"class":138},[128,41899,34356],{"class":266},[128,41901,270],{"class":134},[128,41903,2592],{"class":166},[128,41905,2760],{"class":138},[128,41907,41908],{"class":130,"line":603},[128,41909,41443],{"class":138},[128,41911,41912,41914,41916,41918,41920,41922,41924,41926,41928,41930,41932,41934,41936,41938,41940,41942,41944],{"class":130,"line":614},[128,41913,41406],{"class":138},[128,41915,34329],{"class":266},[128,41917,270],{"class":134},[128,41919,41847],{"class":166},[128,41921,4128],{"class":138},[128,41923,34338],{"class":266},[128,41925,270],{"class":134},[128,41927,41847],{"class":166},[128,41929,4128],{"class":138},[128,41931,34347],{"class":266},[128,41933,270],{"class":134},[128,41935,3827],{"class":166},[128,41937,4128],{"class":138},[128,41939,34356],{"class":266},[128,41941,270],{"class":134},[128,41943,2592],{"class":166},[128,41945,2760],{"class":138},[128,41947,41948],{"class":130,"line":625},[128,41949,41443],{"class":138},[128,41951,41952,41954,41956,41958,41960,41962,41964,41966,41968,41970,41972,41974,41976],{"class":130,"line":633},[128,41953,41488],{"class":138},[128,41955,34347],{"class":266},[128,41957,270],{"class":134},[128,41959,409],{"class":166},[128,41961,4128],{"class":138},[128,41963,34402],{"class":266},[128,41965,270],{"class":134},[128,41967,409],{"class":166},[128,41969,4128],{"class":138},[128,41971,34356],{"class":266},[128,41973,270],{"class":134},[128,41975,2452],{"class":166},[128,41977,180],{"class":138},[128,41979,41980],{"class":130,"line":649},[128,41981,2084],{"class":138},[128,41983,41984],{"class":130,"line":660},[128,41985,41986],{"class":3814},"        # 第五层\n",[128,41988,41989,41991,41994,41996],{"class":130,"line":673},[128,41990,2115],{"class":166},[128,41992,41993],{"class":138},".block5",[128,41995,270],{"class":134},[128,41997,41401],{"class":138},[128,41999,42000,42002,42004,42006,42008,42010,42012,42014,42016,42018,42020,42022,42024,42026,42028,42030,42032],{"class":130,"line":678},[128,42001,41406],{"class":138},[128,42003,34329],{"class":266},[128,42005,270],{"class":134},[128,42007,41847],{"class":166},[128,42009,4128],{"class":138},[128,42011,34338],{"class":266},[128,42013,270],{"class":134},[128,42015,41847],{"class":166},[128,42017,4128],{"class":138},[128,42019,34347],{"class":266},[128,42021,270],{"class":134},[128,42023,3827],{"class":166},[128,42025,4128],{"class":138},[128,42027,34356],{"class":266},[128,42029,270],{"class":134},[128,42031,2592],{"class":166},[128,42033,2760],{"class":138},[128,42035,42036],{"class":130,"line":683},[128,42037,41443],{"class":138},[128,42039,42040,42042,42044,42046,42048,42050,42052,42054,42056,42058,42060,42062,42064,42066,42068,42070,42072],{"class":130,"line":693},[128,42041,41406],{"class":138},[128,42043,34329],{"class":266},[128,42045,270],{"class":134},[128,42047,41847],{"class":166},[128,42049,4128],{"class":138},[128,42051,34338],{"class":266},[128,42053,270],{"class":134},[128,42055,41847],{"class":166},[128,42057,4128],{"class":138},[128,42059,34347],{"class":266},[128,42061,270],{"class":134},[128,42063,3827],{"class":166},[128,42065,4128],{"class":138},[128,42067,34356],{"class":266},[128,42069,270],{"class":134},[128,42071,2592],{"class":166},[128,42073,2760],{"class":138},[128,42075,42076],{"class":130,"line":702},[128,42077,41443],{"class":138},[128,42079,42080,42082,42084,42086,42088,42090,42092,42094,42096,42098,42100,42102,42104,42106,42108,42110,42112],{"class":130,"line":709},[128,42081,41406],{"class":138},[128,42083,34329],{"class":266},[128,42085,270],{"class":134},[128,42087,41847],{"class":166},[128,42089,4128],{"class":138},[128,42091,34338],{"class":266},[128,42093,270],{"class":134},[128,42095,41847],{"class":166},[128,42097,4128],{"class":138},[128,42099,34347],{"class":266},[128,42101,270],{"class":134},[128,42103,3827],{"class":166},[128,42105,4128],{"class":138},[128,42107,34356],{"class":266},[128,42109,270],{"class":134},[128,42111,2592],{"class":166},[128,42113,2760],{"class":138},[128,42115,42116],{"class":130,"line":723},[128,42117,41443],{"class":138},[128,42119,42120,42122,42124,42126,42128,42130,42132,42134,42136,42138,42140,42142,42144],{"class":130,"line":732},[128,42121,41488],{"class":138},[128,42123,34347],{"class":266},[128,42125,270],{"class":134},[128,42127,409],{"class":166},[128,42129,4128],{"class":138},[128,42131,34402],{"class":266},[128,42133,270],{"class":134},[128,42135,409],{"class":166},[128,42137,4128],{"class":138},[128,42139,34356],{"class":266},[128,42141,270],{"class":134},[128,42143,2452],{"class":166},[128,42145,180],{"class":138},[128,42147,42148],{"class":130,"line":744},[128,42149,2084],{"class":138},[128,42151,42152],{"class":130,"line":749},[128,42153,42154],{"class":3814},"        # 全连接层\n",[128,42156,42157,42159,42162,42164],{"class":130,"line":754},[128,42158,2115],{"class":166},[128,42160,42161],{"class":138},".block6",[128,42163,270],{"class":134},[128,42165,41401],{"class":138},[128,42167,42168],{"class":130,"line":764},[128,42169,42170],{"class":3814},"            # 平展操作\n",[128,42172,42173],{"class":130,"line":782},[128,42174,42175],{"class":3814},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[128,42177,42178],{"class":130,"line":787},[128,42179,42180],{"class":138},"            nn.Flatten(),\n",[128,42182,42183,42186,42188,42190,42192,42194,42196,42198,42200],{"class":130,"line":795},[128,42184,42185],{"class":138},"            nn.Linear(",[128,42187,4119],{"class":166},[128,42189,4205],{"class":134},[128,42191,4119],{"class":166},[128,42193,4205],{"class":134},[128,42195,41847],{"class":166},[128,42197,4128],{"class":138},[128,42199,38262],{"class":166},[128,42201,2760],{"class":138},[128,42203,42204],{"class":130,"line":807},[128,42205,41443],{"class":138},[128,42207,42208,42210,42212,42214,42216],{"class":130,"line":813},[128,42209,42185],{"class":138},[128,42211,38262],{"class":166},[128,42213,4128],{"class":138},[128,42215,35537],{"class":166},[128,42217,2760],{"class":138},[128,42219,42220],{"class":130,"line":818},[128,42221,41443],{"class":138},[128,42223,42224,42226,42228,42230,42232],{"class":130,"line":835},[128,42225,42185],{"class":138},[128,42227,35537],{"class":166},[128,42229,4128],{"class":138},[128,42231,4196],{"class":166},[128,42233,180],{"class":138},[128,42235,42236],{"class":130,"line":851},[128,42237,2084],{"class":138},[128,42239,42240],{"class":130,"line":867},[128,42241,160],{"emptyLinePlaceholder":159},[128,42243,42244],{"class":130,"line":872},[128,42245,42246],{"class":3814},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[128,42248,42249],{"class":130,"line":878},[128,42250,42251],{"class":3814},"        # 循环遍历模型\n",[128,42253,42254,42256,42259,42261,42263],{"class":130,"line":887},[128,42255,2141],{"class":134},[128,42257,42258],{"class":138}," m ",[128,42260,549],{"class":134},[128,42262,2148],{"class":166},[128,42264,42265],{"class":138},".modules():\n",[128,42267,42268],{"class":130,"line":896},[128,42269,42270],{"class":3814},"            # print(m)\n",[128,42272,42273,42275,42278],{"class":130,"line":905},[128,42274,2156],{"class":134},[128,42276,42277],{"class":166}," isinstance",[128,42279,42280],{"class":138},"(m,nn.Conv2d):\n",[128,42282,42283],{"class":130,"line":914},[128,42284,42285],{"class":3814},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[128,42287,42288,42291,42294,42296,42299],{"class":130,"line":920},[128,42289,42290],{"class":138},"                nn.init.kaiming_normal_(m.weight,",[128,42292,42293],{"class":266},"nonlinearity",[128,42295,270],{"class":134},[128,42297,42298],{"class":176},"'relu'",[128,42300,180],{"class":138},[128,42302,42303],{"class":130,"line":926},[128,42304,42305],{"class":3814},"                # 判断b参数是否存在\n",[128,42307,42308,42311,42314,42316,42318,42320],{"class":130,"line":938},[128,42309,42310],{"class":134},"                if",[128,42312,42313],{"class":138}," m.bias ",[128,42315,997],{"class":134},[128,42317,212],{"class":134},[128,42319,1000],{"class":166},[128,42321,241],{"class":138},[128,42323,42324],{"class":130,"line":943},[128,42325,42326],{"class":3814},"                    # 如果参数不存在的化初始化b=0\n",[128,42328,42329,42332,42334],{"class":130,"line":948},[128,42330,42331],{"class":138},"                    nn.init.constant_(m.bias,",[128,42333,2452],{"class":166},[128,42335,180],{"class":138},[128,42337,42338],{"class":130,"line":958},[128,42339,42340],{"class":3814},"            # 全连接层初始化\n",[128,42342,42343,42346,42348],{"class":130,"line":974},[128,42344,42345],{"class":134},"            elif",[128,42347,42277],{"class":166},[128,42349,42350],{"class":138},"(m,nn.Linear):\n",[128,42352,42353],{"class":130,"line":985},[128,42354,42355],{"class":3814},"                # 这个初始化方法是利用的是正太分布的方式\n",[128,42357,42358],{"class":130,"line":990},[128,42359,42360],{"class":3814},"                # 均值为0，方差为0.01\n",[128,42362,42363,42366,42368,42370,42373],{"class":130,"line":1005},[128,42364,42365],{"class":138},"                nn.init.normal_(m.weight,",[128,42367,2452],{"class":166},[128,42369,4128],{"class":138},[128,42371,42372],{"class":166},"0.01",[128,42374,180],{"class":138},[128,42376,42377],{"class":130,"line":1017},[128,42378,42379],{"class":3814},"                # 初始化b参数\n",[128,42381,42382,42384,42386,42388,42390,42392],{"class":130,"line":1022},[128,42383,42310],{"class":134},[128,42385,42313],{"class":138},[128,42387,997],{"class":134},[128,42389,212],{"class":134},[128,42391,1000],{"class":166},[128,42393,241],{"class":138},[128,42395,42396,42398,42400],{"class":130,"line":1027},[128,42397,42331],{"class":138},[128,42399,2452],{"class":166},[128,42401,180],{"class":138},[128,42403,42404],{"class":130,"line":1033},[128,42405,160],{"emptyLinePlaceholder":159},[128,42407,42408],{"class":130,"line":1038},[128,42409,38557],{"class":3814},[128,42411,42412,42414,42416],{"class":130,"line":1050},[128,42413,1946],{"class":134},[128,42415,34566],{"class":199},[128,42417,34569],{"class":138},[128,42419,42420,42422,42424,42426],{"class":130,"line":1055},[128,42421,34574],{"class":138},[128,42423,270],{"class":134},[128,42425,1970],{"class":166},[128,42427,42428],{"class":138},".block1(x)\n",[128,42430,42431,42433,42435,42437],{"class":130,"line":1060},[128,42432,34574],{"class":138},[128,42434,270],{"class":134},[128,42436,1970],{"class":166},[128,42438,42439],{"class":138},".block2(x)\n",[128,42441,42442,42444,42446,42448],{"class":130,"line":1070},[128,42443,34574],{"class":138},[128,42445,270],{"class":134},[128,42447,1970],{"class":166},[128,42449,42450],{"class":138},".block3(x)\n",[128,42452,42453,42455,42457,42459],{"class":130,"line":1086},[128,42454,34574],{"class":138},[128,42456,270],{"class":134},[128,42458,1970],{"class":166},[128,42460,42461],{"class":138},".block4(x)\n",[128,42463,42464,42466,42468,42470],{"class":130,"line":1095},[128,42465,34574],{"class":138},[128,42467,270],{"class":134},[128,42469,1970],{"class":166},[128,42471,42472],{"class":138},".block5(x)\n",[128,42474,42475,42477,42479,42481],{"class":130,"line":1100},[128,42476,34574],{"class":138},[128,42478,270],{"class":134},[128,42480,1970],{"class":166},[128,42482,42483],{"class":138},".block6(x)\n",[128,42485,42486,42488],{"class":130,"line":1113},[128,42487,224],{"class":134},[128,42489,34682],{"class":138},[128,42491,42492],{"class":130,"line":1124},[128,42493,160],{"emptyLinePlaceholder":159},[128,42495,42496],{"class":130,"line":1129},[128,42497,42498],{"class":3814},"# 验证模型\n",[128,42500,42501,42503,42505,42507,42510],{"class":130,"line":1134},[128,42502,1800],{"class":134},[128,42504,1803],{"class":166},[128,42506,570],{"class":134},[128,42508,42509],{"class":176},"'__main__'",[128,42511,241],{"class":138},[128,42513,42514,42516,42518,42520,42522,42524,42526,42528,42530],{"class":130,"line":1150},[128,42515,34709],{"class":138},[128,42517,270],{"class":134},[128,42519,33931],{"class":138},[128,42521,34716],{"class":176},[128,42523,5302],{"class":134},[128,42525,34721],{"class":138},[128,42527,5299],{"class":134},[128,42529,33956],{"class":176},[128,42531,180],{"class":138},[128,42533,42534,42536],{"class":130,"line":1164},[128,42535,437],{"class":166},[128,42537,33965],{"class":138},[128,42539,42540,42542,42544],{"class":130,"line":1178},[128,42541,34761],{"class":138},[128,42543,270],{"class":134},[128,42545,42546],{"class":138},"VGG16().to(device)\n",[128,42548,42549,42551,42553,42555,42557,42559,42561,42563],{"class":130,"line":1183},[128,42550,437],{"class":166},[128,42552,34773],{"class":138},[128,42554,2592],{"class":166},[128,42556,4128],{"class":138},[128,42558,34970],{"class":166},[128,42560,4128],{"class":138},[128,42562,34970],{"class":166},[128,42564,34786],{"class":138},[26,42566,42567],{"start":142},[29,42568,42569],{},"训练代码",[19,42571,42572],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,42574,42575],{},"解决方式:",[19,42577,42578],{},"①权重初始化",[106,42580,42582],{"className":122,"code":42581,"language":124,"meta":112,"style":112},"# 权重初始化,保证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",[114,42583,42584,42589,42594,42606,42611,42619,42624,42637,42642,42656,42661,42670,42675,42684,42689,42694,42707,42712,42726],{"__ignoreMap":112},[128,42585,42586],{"class":130,"line":131},[128,42587,42588],{"class":3814},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[128,42590,42591],{"class":130,"line":142},[128,42592,42593],{"class":3814},"# 循环遍历模型\n",[128,42595,42596,42598,42600,42602,42604],{"class":130,"line":156},[128,42597,2404],{"class":134},[128,42599,42258],{"class":138},[128,42601,549],{"class":134},[128,42603,2148],{"class":166},[128,42605,42265],{"class":138},[128,42607,42608],{"class":130,"line":163},[128,42609,42610],{"class":3814},"    # print(m)\n",[128,42612,42613,42615,42617],{"class":130,"line":183},[128,42614,209],{"class":134},[128,42616,42277],{"class":166},[128,42618,42280],{"class":138},[128,42620,42621],{"class":130,"line":188},[128,42622,42623],{"class":3814},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[128,42625,42626,42629,42631,42633,42635],{"class":130,"line":193},[128,42627,42628],{"class":138},"        nn.init.kaiming_normal_(m.weight,",[128,42630,42293],{"class":266},[128,42632,270],{"class":134},[128,42634,42298],{"class":176},[128,42636,180],{"class":138},[128,42638,42639],{"class":130,"line":206},[128,42640,42641],{"class":3814},"        # 判断b参数是否存在\n",[128,42643,42644,42646,42648,42650,42652,42654],{"class":130,"line":221},[128,42645,558],{"class":134},[128,42647,42313],{"class":138},[128,42649,997],{"class":134},[128,42651,212],{"class":134},[128,42653,1000],{"class":166},[128,42655,241],{"class":138},[128,42657,42658],{"class":130,"line":230},[128,42659,42660],{"class":3814},"            # 如果参数不存在的化初始化b=0\n",[128,42662,42663,42666,42668],{"class":130,"line":235},[128,42664,42665],{"class":138},"            nn.init.constant_(m.bias,",[128,42667,2452],{"class":166},[128,42669,180],{"class":138},[128,42671,42672],{"class":130,"line":244},[128,42673,42674],{"class":3814},"    # 全连接层初始化\n",[128,42676,42677,42680,42682],{"class":130,"line":287},[128,42678,42679],{"class":134},"    elif",[128,42681,42277],{"class":166},[128,42683,42350],{"class":138},[128,42685,42686],{"class":130,"line":301},[128,42687,42688],{"class":3814},"        # 这个初始化方法是利用的是正太分布的方式\n",[128,42690,42691],{"class":130,"line":310},[128,42692,42693],{"class":3814},"        # 均值为0，方差为0.01\n",[128,42695,42696,42699,42701,42703,42705],{"class":130,"line":323},[128,42697,42698],{"class":138},"        nn.init.normal_(m.weight,",[128,42700,2452],{"class":166},[128,42702,4128],{"class":138},[128,42704,42372],{"class":166},[128,42706,180],{"class":138},[128,42708,42709],{"class":130,"line":330},[128,42710,42711],{"class":3814},"        # 初始化b参数\n",[128,42713,42714,42716,42718,42720,42722,42724],{"class":130,"line":335},[128,42715,558],{"class":134},[128,42717,42313],{"class":138},[128,42719,997],{"class":134},[128,42721,212],{"class":134},[128,42723,1000],{"class":166},[128,42725,241],{"class":138},[128,42727,42728,42730,42732],{"class":130,"line":340},[128,42729,42665],{"class":138},[128,42731,2452],{"class":166},[128,42733,180],{"class":138},[19,42735,42736],{},"②尽可能地增加批次",[19,42738,42739],{},"训练完整代码：",[106,42741,42742],{"className":122,"code":41291,"language":124,"meta":112,"style":112},[114,42743,42744,42750,42760,42770,42780,42784,42800,42808,42826,42830,42834,42844,42880,42884,42920,42924,42952,42956,42960,42970,43006,43010,43046,43050,43078,43082,43086,43096,43132,43136,43172,43176,43212,43216,43244,43248,43252,43262,43298,43302,43338,43342,43378,43382,43410,43414,43418,43428,43464,43468,43504,43508,43544,43548,43576,43580,43584,43594,43598,43602,43606,43626,43630,43642,43646,43658,43662,43666,43670,43674,43686,43690,43698,43702,43714,43718,43732,43736,43744,43748,43756,43760,43764,43776,43780,43794,43802,43806,43810,43818,43828,43838,43848,43858,43868,43878,43884,43888,43892,43904,43924,43930,43938],{"__ignoreMap":112},[128,42745,42746,42748],{"class":130,"line":131},[128,42747,135],{"class":134},[128,42749,33876],{"class":138},[128,42751,42752,42754,42756,42758],{"class":130,"line":142},[128,42753,145],{"class":134},[128,42755,41306],{"class":138},[128,42757,135],{"class":134},[128,42759,41311],{"class":138},[128,42761,42762,42764,42766,42768],{"class":130,"line":156},[128,42763,145],{"class":134},[128,42765,34218],{"class":138},[128,42767,135],{"class":134},[128,42769,34223],{"class":138},[128,42771,42772,42774,42776,42778],{"class":130,"line":163},[128,42773,145],{"class":134},[128,42775,34235],{"class":138},[128,42777,135],{"class":134},[128,42779,34240],{"class":138},[128,42781,42782],{"class":130,"line":183},[128,42783,160],{"emptyLinePlaceholder":159},[128,42785,42786,42788,42790,42792,42794,42796,42798],{"class":130,"line":188},[128,42787,1901],{"class":134},[128,42789,41342],{"class":199},[128,42791,253],{"class":138},[128,42793,34256],{"class":199},[128,42795,4307],{"class":138},[128,42797,34261],{"class":199},[128,42799,34264],{"class":138},[128,42801,42802,42804,42806],{"class":130,"line":193},[128,42803,1946],{"class":134},[128,42805,2108],{"class":166},[128,42807,1952],{"class":138},[128,42809,42810,42812,42814,42816,42818,42820,42822,42824],{"class":130,"line":206},[128,42811,34292],{"class":166},[128,42813,253],{"class":138},[128,42815,41369],{"class":166},[128,42817,258],{"class":138},[128,42819,1970],{"class":166},[128,42821,34300],{"class":138},[128,42823,34303],{"class":166},[128,42825,5563],{"class":138},[128,42827,42828],{"class":130,"line":221},[128,42829,41384],{"class":3814},[128,42831,42832],{"class":130,"line":230},[128,42833,41389],{"class":3814},[128,42835,42836,42838,42840,42842],{"class":130,"line":235},[128,42837,2115],{"class":166},[128,42839,41396],{"class":138},[128,42841,270],{"class":134},[128,42843,41401],{"class":138},[128,42845,42846,42848,42850,42852,42854,42856,42858,42860,42862,42864,42866,42868,42870,42872,42874,42876,42878],{"class":130,"line":244},[128,42847,41406],{"class":138},[128,42849,34329],{"class":266},[128,42851,270],{"class":134},[128,42853,2592],{"class":166},[128,42855,4128],{"class":138},[128,42857,34338],{"class":266},[128,42859,270],{"class":134},[128,42861,3956],{"class":166},[128,42863,4128],{"class":138},[128,42865,34347],{"class":266},[128,42867,270],{"class":134},[128,42869,3827],{"class":166},[128,42871,4128],{"class":138},[128,42873,34356],{"class":266},[128,42875,270],{"class":134},[128,42877,2592],{"class":166},[128,42879,2760],{"class":138},[128,42881,42882],{"class":130,"line":287},[128,42883,41443],{"class":138},[128,42885,42886,42888,42890,42892,42894,42896,42898,42900,42902,42904,42906,42908,42910,42912,42914,42916,42918],{"class":130,"line":301},[128,42887,41406],{"class":138},[128,42889,34329],{"class":266},[128,42891,270],{"class":134},[128,42893,3956],{"class":166},[128,42895,4128],{"class":138},[128,42897,34338],{"class":266},[128,42899,270],{"class":134},[128,42901,3956],{"class":166},[128,42903,4128],{"class":138},[128,42905,34347],{"class":266},[128,42907,270],{"class":134},[128,42909,3827],{"class":166},[128,42911,4128],{"class":138},[128,42913,34356],{"class":266},[128,42915,270],{"class":134},[128,42917,2592],{"class":166},[128,42919,2760],{"class":138},[128,42921,42922],{"class":130,"line":310},[128,42923,41443],{"class":138},[128,42925,42926,42928,42930,42932,42934,42936,42938,42940,42942,42944,42946,42948,42950],{"class":130,"line":323},[128,42927,41488],{"class":138},[128,42929,34347],{"class":266},[128,42931,270],{"class":134},[128,42933,409],{"class":166},[128,42935,4128],{"class":138},[128,42937,34402],{"class":266},[128,42939,270],{"class":134},[128,42941,409],{"class":166},[128,42943,4128],{"class":138},[128,42945,34356],{"class":266},[128,42947,270],{"class":134},[128,42949,2452],{"class":166},[128,42951,180],{"class":138},[128,42953,42954],{"class":130,"line":330},[128,42955,2084],{"class":138},[128,42957,42958],{"class":130,"line":335},[128,42959,41521],{"class":3814},[128,42961,42962,42964,42966,42968],{"class":130,"line":340},[128,42963,2115],{"class":166},[128,42965,41528],{"class":138},[128,42967,270],{"class":134},[128,42969,41401],{"class":138},[128,42971,42972,42974,42976,42978,42980,42982,42984,42986,42988,42990,42992,42994,42996,42998,43000,43002,43004],{"class":130,"line":351},[128,42973,41406],{"class":138},[128,42975,34329],{"class":266},[128,42977,270],{"class":134},[128,42979,3956],{"class":166},[128,42981,4128],{"class":138},[128,42983,34338],{"class":266},[128,42985,270],{"class":134},[128,42987,35537],{"class":166},[128,42989,4128],{"class":138},[128,42991,34347],{"class":266},[128,42993,270],{"class":134},[128,42995,3827],{"class":166},[128,42997,4128],{"class":138},[128,42999,34356],{"class":266},[128,43001,270],{"class":134},[128,43003,2592],{"class":166},[128,43005,2760],{"class":138},[128,43007,43008],{"class":130,"line":384},[128,43009,41443],{"class":138},[128,43011,43012,43014,43016,43018,43020,43022,43024,43026,43028,43030,43032,43034,43036,43038,43040,43042,43044],{"class":130,"line":414},[128,43013,41406],{"class":138},[128,43015,34329],{"class":266},[128,43017,270],{"class":134},[128,43019,35537],{"class":166},[128,43021,4128],{"class":138},[128,43023,34338],{"class":266},[128,43025,270],{"class":134},[128,43027,35537],{"class":166},[128,43029,4128],{"class":138},[128,43031,34347],{"class":266},[128,43033,270],{"class":134},[128,43035,3827],{"class":166},[128,43037,4128],{"class":138},[128,43039,34356],{"class":266},[128,43041,270],{"class":134},[128,43043,2592],{"class":166},[128,43045,2760],{"class":138},[128,43047,43048],{"class":130,"line":419},[128,43049,41443],{"class":138},[128,43051,43052,43054,43056,43058,43060,43062,43064,43066,43068,43070,43072,43074,43076],{"class":130,"line":424},[128,43053,41488],{"class":138},[128,43055,34347],{"class":266},[128,43057,270],{"class":134},[128,43059,409],{"class":166},[128,43061,4128],{"class":138},[128,43063,34402],{"class":266},[128,43065,270],{"class":134},[128,43067,409],{"class":166},[128,43069,4128],{"class":138},[128,43071,34356],{"class":266},[128,43073,270],{"class":134},[128,43075,2452],{"class":166},[128,43077,180],{"class":138},[128,43079,43080],{"class":130,"line":434},[128,43081,2084],{"class":138},[128,43083,43084],{"class":130,"line":447},[128,43085,41649],{"class":3814},[128,43087,43088,43090,43092,43094],{"class":130,"line":459},[128,43089,2115],{"class":166},[128,43091,41656],{"class":138},[128,43093,270],{"class":134},[128,43095,41401],{"class":138},[128,43097,43098,43100,43102,43104,43106,43108,43110,43112,43114,43116,43118,43120,43122,43124,43126,43128,43130],{"class":130,"line":471},[128,43099,41406],{"class":138},[128,43101,34329],{"class":266},[128,43103,270],{"class":134},[128,43105,35537],{"class":166},[128,43107,4128],{"class":138},[128,43109,34338],{"class":266},[128,43111,270],{"class":134},[128,43113,38262],{"class":166},[128,43115,4128],{"class":138},[128,43117,34347],{"class":266},[128,43119,270],{"class":134},[128,43121,3827],{"class":166},[128,43123,4128],{"class":138},[128,43125,34356],{"class":266},[128,43127,270],{"class":134},[128,43129,2592],{"class":166},[128,43131,2760],{"class":138},[128,43133,43134],{"class":130,"line":483},[128,43135,41443],{"class":138},[128,43137,43138,43140,43142,43144,43146,43148,43150,43152,43154,43156,43158,43160,43162,43164,43166,43168,43170],{"class":130,"line":495},[128,43139,41406],{"class":138},[128,43141,34329],{"class":266},[128,43143,270],{"class":134},[128,43145,38262],{"class":166},[128,43147,4128],{"class":138},[128,43149,34338],{"class":266},[128,43151,270],{"class":134},[128,43153,38262],{"class":166},[128,43155,4128],{"class":138},[128,43157,34347],{"class":266},[128,43159,270],{"class":134},[128,43161,3827],{"class":166},[128,43163,4128],{"class":138},[128,43165,34356],{"class":266},[128,43167,270],{"class":134},[128,43169,2592],{"class":166},[128,43171,2760],{"class":138},[128,43173,43174],{"class":130,"line":507},[128,43175,41443],{"class":138},[128,43177,43178,43180,43182,43184,43186,43188,43190,43192,43194,43196,43198,43200,43202,43204,43206,43208,43210],{"class":130,"line":519},[128,43179,41406],{"class":138},[128,43181,34329],{"class":266},[128,43183,270],{"class":134},[128,43185,38262],{"class":166},[128,43187,4128],{"class":138},[128,43189,34338],{"class":266},[128,43191,270],{"class":134},[128,43193,38262],{"class":166},[128,43195,4128],{"class":138},[128,43197,34347],{"class":266},[128,43199,270],{"class":134},[128,43201,3827],{"class":166},[128,43203,4128],{"class":138},[128,43205,34356],{"class":266},[128,43207,270],{"class":134},[128,43209,2592],{"class":166},[128,43211,2760],{"class":138},[128,43213,43214],{"class":130,"line":524},[128,43215,41443],{"class":138},[128,43217,43218,43220,43222,43224,43226,43228,43230,43232,43234,43236,43238,43240,43242],{"class":130,"line":529},[128,43219,41488],{"class":138},[128,43221,34347],{"class":266},[128,43223,270],{"class":134},[128,43225,409],{"class":166},[128,43227,4128],{"class":138},[128,43229,34402],{"class":266},[128,43231,270],{"class":134},[128,43233,409],{"class":166},[128,43235,4128],{"class":138},[128,43237,34356],{"class":266},[128,43239,270],{"class":134},[128,43241,2452],{"class":166},[128,43243,180],{"class":138},[128,43245,43246],{"class":130,"line":540},[128,43247,2084],{"class":138},[128,43249,43250],{"class":130,"line":555},[128,43251,41817],{"class":3814},[128,43253,43254,43256,43258,43260],{"class":130,"line":576},[128,43255,2115],{"class":166},[128,43257,41824],{"class":138},[128,43259,270],{"class":134},[128,43261,41401],{"class":138},[128,43263,43264,43266,43268,43270,43272,43274,43276,43278,43280,43282,43284,43286,43288,43290,43292,43294,43296],{"class":130,"line":584},[128,43265,41406],{"class":138},[128,43267,34329],{"class":266},[128,43269,270],{"class":134},[128,43271,38262],{"class":166},[128,43273,4128],{"class":138},[128,43275,34338],{"class":266},[128,43277,270],{"class":134},[128,43279,41847],{"class":166},[128,43281,4128],{"class":138},[128,43283,34347],{"class":266},[128,43285,270],{"class":134},[128,43287,3827],{"class":166},[128,43289,4128],{"class":138},[128,43291,34356],{"class":266},[128,43293,270],{"class":134},[128,43295,2592],{"class":166},[128,43297,2760],{"class":138},[128,43299,43300],{"class":130,"line":593},[128,43301,41443],{"class":138},[128,43303,43304,43306,43308,43310,43312,43314,43316,43318,43320,43322,43324,43326,43328,43330,43332,43334,43336],{"class":130,"line":598},[128,43305,41406],{"class":138},[128,43307,34329],{"class":266},[128,43309,270],{"class":134},[128,43311,41847],{"class":166},[128,43313,4128],{"class":138},[128,43315,34338],{"class":266},[128,43317,270],{"class":134},[128,43319,41847],{"class":166},[128,43321,4128],{"class":138},[128,43323,34347],{"class":266},[128,43325,270],{"class":134},[128,43327,3827],{"class":166},[128,43329,4128],{"class":138},[128,43331,34356],{"class":266},[128,43333,270],{"class":134},[128,43335,2592],{"class":166},[128,43337,2760],{"class":138},[128,43339,43340],{"class":130,"line":603},[128,43341,41443],{"class":138},[128,43343,43344,43346,43348,43350,43352,43354,43356,43358,43360,43362,43364,43366,43368,43370,43372,43374,43376],{"class":130,"line":614},[128,43345,41406],{"class":138},[128,43347,34329],{"class":266},[128,43349,270],{"class":134},[128,43351,41847],{"class":166},[128,43353,4128],{"class":138},[128,43355,34338],{"class":266},[128,43357,270],{"class":134},[128,43359,41847],{"class":166},[128,43361,4128],{"class":138},[128,43363,34347],{"class":266},[128,43365,270],{"class":134},[128,43367,3827],{"class":166},[128,43369,4128],{"class":138},[128,43371,34356],{"class":266},[128,43373,270],{"class":134},[128,43375,2592],{"class":166},[128,43377,2760],{"class":138},[128,43379,43380],{"class":130,"line":625},[128,43381,41443],{"class":138},[128,43383,43384,43386,43388,43390,43392,43394,43396,43398,43400,43402,43404,43406,43408],{"class":130,"line":633},[128,43385,41488],{"class":138},[128,43387,34347],{"class":266},[128,43389,270],{"class":134},[128,43391,409],{"class":166},[128,43393,4128],{"class":138},[128,43395,34402],{"class":266},[128,43397,270],{"class":134},[128,43399,409],{"class":166},[128,43401,4128],{"class":138},[128,43403,34356],{"class":266},[128,43405,270],{"class":134},[128,43407,2452],{"class":166},[128,43409,180],{"class":138},[128,43411,43412],{"class":130,"line":649},[128,43413,2084],{"class":138},[128,43415,43416],{"class":130,"line":660},[128,43417,41986],{"class":3814},[128,43419,43420,43422,43424,43426],{"class":130,"line":673},[128,43421,2115],{"class":166},[128,43423,41993],{"class":138},[128,43425,270],{"class":134},[128,43427,41401],{"class":138},[128,43429,43430,43432,43434,43436,43438,43440,43442,43444,43446,43448,43450,43452,43454,43456,43458,43460,43462],{"class":130,"line":678},[128,43431,41406],{"class":138},[128,43433,34329],{"class":266},[128,43435,270],{"class":134},[128,43437,41847],{"class":166},[128,43439,4128],{"class":138},[128,43441,34338],{"class":266},[128,43443,270],{"class":134},[128,43445,41847],{"class":166},[128,43447,4128],{"class":138},[128,43449,34347],{"class":266},[128,43451,270],{"class":134},[128,43453,3827],{"class":166},[128,43455,4128],{"class":138},[128,43457,34356],{"class":266},[128,43459,270],{"class":134},[128,43461,2592],{"class":166},[128,43463,2760],{"class":138},[128,43465,43466],{"class":130,"line":683},[128,43467,41443],{"class":138},[128,43469,43470,43472,43474,43476,43478,43480,43482,43484,43486,43488,43490,43492,43494,43496,43498,43500,43502],{"class":130,"line":693},[128,43471,41406],{"class":138},[128,43473,34329],{"class":266},[128,43475,270],{"class":134},[128,43477,41847],{"class":166},[128,43479,4128],{"class":138},[128,43481,34338],{"class":266},[128,43483,270],{"class":134},[128,43485,41847],{"class":166},[128,43487,4128],{"class":138},[128,43489,34347],{"class":266},[128,43491,270],{"class":134},[128,43493,3827],{"class":166},[128,43495,4128],{"class":138},[128,43497,34356],{"class":266},[128,43499,270],{"class":134},[128,43501,2592],{"class":166},[128,43503,2760],{"class":138},[128,43505,43506],{"class":130,"line":702},[128,43507,41443],{"class":138},[128,43509,43510,43512,43514,43516,43518,43520,43522,43524,43526,43528,43530,43532,43534,43536,43538,43540,43542],{"class":130,"line":709},[128,43511,41406],{"class":138},[128,43513,34329],{"class":266},[128,43515,270],{"class":134},[128,43517,41847],{"class":166},[128,43519,4128],{"class":138},[128,43521,34338],{"class":266},[128,43523,270],{"class":134},[128,43525,41847],{"class":166},[128,43527,4128],{"class":138},[128,43529,34347],{"class":266},[128,43531,270],{"class":134},[128,43533,3827],{"class":166},[128,43535,4128],{"class":138},[128,43537,34356],{"class":266},[128,43539,270],{"class":134},[128,43541,2592],{"class":166},[128,43543,2760],{"class":138},[128,43545,43546],{"class":130,"line":723},[128,43547,41443],{"class":138},[128,43549,43550,43552,43554,43556,43558,43560,43562,43564,43566,43568,43570,43572,43574],{"class":130,"line":732},[128,43551,41488],{"class":138},[128,43553,34347],{"class":266},[128,43555,270],{"class":134},[128,43557,409],{"class":166},[128,43559,4128],{"class":138},[128,43561,34402],{"class":266},[128,43563,270],{"class":134},[128,43565,409],{"class":166},[128,43567,4128],{"class":138},[128,43569,34356],{"class":266},[128,43571,270],{"class":134},[128,43573,2452],{"class":166},[128,43575,180],{"class":138},[128,43577,43578],{"class":130,"line":744},[128,43579,2084],{"class":138},[128,43581,43582],{"class":130,"line":749},[128,43583,42154],{"class":3814},[128,43585,43586,43588,43590,43592],{"class":130,"line":754},[128,43587,2115],{"class":166},[128,43589,42161],{"class":138},[128,43591,270],{"class":134},[128,43593,41401],{"class":138},[128,43595,43596],{"class":130,"line":764},[128,43597,42170],{"class":3814},[128,43599,43600],{"class":130,"line":782},[128,43601,42175],{"class":3814},[128,43603,43604],{"class":130,"line":787},[128,43605,42180],{"class":138},[128,43607,43608,43610,43612,43614,43616,43618,43620,43622,43624],{"class":130,"line":795},[128,43609,42185],{"class":138},[128,43611,4119],{"class":166},[128,43613,4205],{"class":134},[128,43615,4119],{"class":166},[128,43617,4205],{"class":134},[128,43619,41847],{"class":166},[128,43621,4128],{"class":138},[128,43623,38262],{"class":166},[128,43625,2760],{"class":138},[128,43627,43628],{"class":130,"line":807},[128,43629,41443],{"class":138},[128,43631,43632,43634,43636,43638,43640],{"class":130,"line":813},[128,43633,42185],{"class":138},[128,43635,38262],{"class":166},[128,43637,4128],{"class":138},[128,43639,35537],{"class":166},[128,43641,2760],{"class":138},[128,43643,43644],{"class":130,"line":818},[128,43645,41443],{"class":138},[128,43647,43648,43650,43652,43654,43656],{"class":130,"line":835},[128,43649,42185],{"class":138},[128,43651,35537],{"class":166},[128,43653,4128],{"class":138},[128,43655,4196],{"class":166},[128,43657,180],{"class":138},[128,43659,43660],{"class":130,"line":851},[128,43661,2084],{"class":138},[128,43663,43664],{"class":130,"line":867},[128,43665,160],{"emptyLinePlaceholder":159},[128,43667,43668],{"class":130,"line":872},[128,43669,42246],{"class":3814},[128,43671,43672],{"class":130,"line":878},[128,43673,42251],{"class":3814},[128,43675,43676,43678,43680,43682,43684],{"class":130,"line":887},[128,43677,2141],{"class":134},[128,43679,42258],{"class":138},[128,43681,549],{"class":134},[128,43683,2148],{"class":166},[128,43685,42265],{"class":138},[128,43687,43688],{"class":130,"line":896},[128,43689,42270],{"class":3814},[128,43691,43692,43694,43696],{"class":130,"line":905},[128,43693,2156],{"class":134},[128,43695,42277],{"class":166},[128,43697,42280],{"class":138},[128,43699,43700],{"class":130,"line":914},[128,43701,42285],{"class":3814},[128,43703,43704,43706,43708,43710,43712],{"class":130,"line":920},[128,43705,42290],{"class":138},[128,43707,42293],{"class":266},[128,43709,270],{"class":134},[128,43711,42298],{"class":176},[128,43713,180],{"class":138},[128,43715,43716],{"class":130,"line":926},[128,43717,42305],{"class":3814},[128,43719,43720,43722,43724,43726,43728,43730],{"class":130,"line":938},[128,43721,42310],{"class":134},[128,43723,42313],{"class":138},[128,43725,997],{"class":134},[128,43727,212],{"class":134},[128,43729,1000],{"class":166},[128,43731,241],{"class":138},[128,43733,43734],{"class":130,"line":943},[128,43735,42326],{"class":3814},[128,43737,43738,43740,43742],{"class":130,"line":948},[128,43739,42331],{"class":138},[128,43741,2452],{"class":166},[128,43743,180],{"class":138},[128,43745,43746],{"class":130,"line":958},[128,43747,42340],{"class":3814},[128,43749,43750,43752,43754],{"class":130,"line":974},[128,43751,42345],{"class":134},[128,43753,42277],{"class":166},[128,43755,42350],{"class":138},[128,43757,43758],{"class":130,"line":985},[128,43759,42355],{"class":3814},[128,43761,43762],{"class":130,"line":990},[128,43763,42360],{"class":3814},[128,43765,43766,43768,43770,43772,43774],{"class":130,"line":1005},[128,43767,42365],{"class":138},[128,43769,2452],{"class":166},[128,43771,4128],{"class":138},[128,43773,42372],{"class":166},[128,43775,180],{"class":138},[128,43777,43778],{"class":130,"line":1017},[128,43779,42379],{"class":3814},[128,43781,43782,43784,43786,43788,43790,43792],{"class":130,"line":1022},[128,43783,42310],{"class":134},[128,43785,42313],{"class":138},[128,43787,997],{"class":134},[128,43789,212],{"class":134},[128,43791,1000],{"class":166},[128,43793,241],{"class":138},[128,43795,43796,43798,43800],{"class":130,"line":1027},[128,43797,42331],{"class":138},[128,43799,2452],{"class":166},[128,43801,180],{"class":138},[128,43803,43804],{"class":130,"line":1033},[128,43805,160],{"emptyLinePlaceholder":159},[128,43807,43808],{"class":130,"line":1038},[128,43809,38557],{"class":3814},[128,43811,43812,43814,43816],{"class":130,"line":1050},[128,43813,1946],{"class":134},[128,43815,34566],{"class":199},[128,43817,34569],{"class":138},[128,43819,43820,43822,43824,43826],{"class":130,"line":1055},[128,43821,34574],{"class":138},[128,43823,270],{"class":134},[128,43825,1970],{"class":166},[128,43827,42428],{"class":138},[128,43829,43830,43832,43834,43836],{"class":130,"line":1060},[128,43831,34574],{"class":138},[128,43833,270],{"class":134},[128,43835,1970],{"class":166},[128,43837,42439],{"class":138},[128,43839,43840,43842,43844,43846],{"class":130,"line":1070},[128,43841,34574],{"class":138},[128,43843,270],{"class":134},[128,43845,1970],{"class":166},[128,43847,42450],{"class":138},[128,43849,43850,43852,43854,43856],{"class":130,"line":1086},[128,43851,34574],{"class":138},[128,43853,270],{"class":134},[128,43855,1970],{"class":166},[128,43857,42461],{"class":138},[128,43859,43860,43862,43864,43866],{"class":130,"line":1095},[128,43861,34574],{"class":138},[128,43863,270],{"class":134},[128,43865,1970],{"class":166},[128,43867,42472],{"class":138},[128,43869,43870,43872,43874,43876],{"class":130,"line":1100},[128,43871,34574],{"class":138},[128,43873,270],{"class":134},[128,43875,1970],{"class":166},[128,43877,42483],{"class":138},[128,43879,43880,43882],{"class":130,"line":1113},[128,43881,224],{"class":134},[128,43883,34682],{"class":138},[128,43885,43886],{"class":130,"line":1124},[128,43887,160],{"emptyLinePlaceholder":159},[128,43889,43890],{"class":130,"line":1129},[128,43891,42498],{"class":3814},[128,43893,43894,43896,43898,43900,43902],{"class":130,"line":1134},[128,43895,1800],{"class":134},[128,43897,1803],{"class":166},[128,43899,570],{"class":134},[128,43901,42509],{"class":176},[128,43903,241],{"class":138},[128,43905,43906,43908,43910,43912,43914,43916,43918,43920,43922],{"class":130,"line":1150},[128,43907,34709],{"class":138},[128,43909,270],{"class":134},[128,43911,33931],{"class":138},[128,43913,34716],{"class":176},[128,43915,5302],{"class":134},[128,43917,34721],{"class":138},[128,43919,5299],{"class":134},[128,43921,33956],{"class":176},[128,43923,180],{"class":138},[128,43925,43926,43928],{"class":130,"line":1164},[128,43927,437],{"class":166},[128,43929,33965],{"class":138},[128,43931,43932,43934,43936],{"class":130,"line":1178},[128,43933,34761],{"class":138},[128,43935,270],{"class":134},[128,43937,42546],{"class":138},[128,43939,43940,43942,43944,43946,43948,43950,43952,43954],{"class":130,"line":1183},[128,43941,437],{"class":166},[128,43943,34773],{"class":138},[128,43945,2592],{"class":166},[128,43947,4128],{"class":138},[128,43949,34970],{"class":166},[128,43951,4128],{"class":138},[128,43953,34970],{"class":166},[128,43955,34786],{"class":138},[26,43957,43958],{"start":156},[29,43959,43960],{},"测试代码",[106,43962,43964],{"className":122,"code":43963,"language":124,"meta":112,"style":112},"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",[114,43965,43966,43972,43982,43992,43996,44006,44017,44021,44025,44029,44037,44053,44063,44079,44089,44103,44107,44117,44127,44137,44143,44147,44151,44159,44163,44179,44187,44191,44195,44203,44211,44215,44219,44223,44227,44233,44237,44247,44255,44263,44267,44271,44275,44283,44287,44303,44307,44311,44315,44327,44331,44343,44347,44351,44363,44367,44377,44381,44385,44397,44401,44410,44414,44418,44426,44430,44438,44442,44446,44450,44454,44458,44474,44482,44486,44490,44538,44544,44548,44558,44566,44574,44578,44582,44586,44590,44598,44602,44618,44622,44630,44638],{"__ignoreMap":112},[128,43967,43968,43970],{"class":130,"line":131},[128,43969,135],{"class":134},[128,43971,33876],{"class":138},[128,43973,43974,43976,43978,43980],{"class":130,"line":142},[128,43975,135],{"class":134},[128,43977,34885],{"class":138},[128,43979,279],{"class":134},[128,43981,34890],{"class":138},[128,43983,43984,43986,43988,43990],{"class":130,"line":156},[128,43985,145],{"class":134},[128,43987,34868],{"class":138},[128,43989,135],{"class":134},[128,43991,34873],{"class":138},[128,43993,43994],{"class":130,"line":163},[128,43995,37317],{"class":3814},[128,43997,43998,44000,44002,44004],{"class":130,"line":183},[128,43999,145],{"class":134},[128,44001,34839],{"class":138},[128,44003,135],{"class":134},[128,44005,34844],{"class":138},[128,44007,44008,44010,44012,44014],{"class":130,"line":188},[128,44009,145],{"class":134},[128,44011,35383],{"class":138},[128,44013,135],{"class":134},[128,44015,44016],{"class":166}," VGG16\n",[128,44018,44019],{"class":130,"line":193},[128,44020,160],{"emptyLinePlaceholder":159},[128,44022,44023],{"class":130,"line":206},[128,44024,160],{"emptyLinePlaceholder":159},[128,44026,44027],{"class":130,"line":221},[128,44028,37346],{"class":3814},[128,44030,44031,44033,44035],{"class":130,"line":230},[128,44032,196],{"class":134},[128,44034,37353],{"class":199},[128,44036,203],{"class":138},[128,44038,44039,44041,44043,44045,44047,44049,44051],{"class":130,"line":235},[128,44040,37360],{"class":138},[128,44042,270],{"class":134},[128,44044,34925],{"class":138},[128,44046,34928],{"class":266},[128,44048,270],{"class":134},[128,44050,34933],{"class":176},[128,44052,2665],{"class":138},[128,44054,44055,44057,44059,44061],{"class":130,"line":244},[128,44056,37377],{"class":266},[128,44058,270],{"class":134},[128,44060,399],{"class":166},[128,44062,2665],{"class":138},[128,44064,44065,44067,44069,44071,44073,44075,44077],{"class":130,"line":287},[128,44066,37388],{"class":266},[128,44068,270],{"class":134},[128,44070,34962],{"class":138},[128,44072,34965],{"class":266},[128,44074,270],{"class":134},[128,44076,34970],{"class":166},[128,44078,34973],{"class":138},[128,44080,44081,44083,44085,44087],{"class":130,"line":301},[128,44082,37405],{"class":266},[128,44084,270],{"class":134},[128,44086,34945],{"class":166},[128,44088,180],{"class":138},[128,44090,44091,44093,44095,44097,44099,44101],{"class":130,"line":310},[128,44092,37416],{"class":138},[128,44094,270],{"class":134},[128,44096,35003],{"class":138},[128,44098,35006],{"class":266},[128,44100,270],{"class":134},[128,44102,37427],{"class":138},[128,44104,44105],{"class":130,"line":323},[128,44106,37432],{"class":3814},[128,44108,44109,44111,44113,44115],{"class":130,"line":330},[128,44110,37437],{"class":266},[128,44112,270],{"class":134},[128,44114,2592],{"class":166},[128,44116,2665],{"class":138},[128,44118,44119,44121,44123,44125],{"class":130,"line":335},[128,44120,37448],{"class":266},[128,44122,270],{"class":134},[128,44124,34945],{"class":166},[128,44126,2665],{"class":138},[128,44128,44129,44131,44133,44135],{"class":130,"line":340},[128,44130,37459],{"class":266},[128,44132,270],{"class":134},[128,44134,2452],{"class":166},[128,44136,180],{"class":138},[128,44138,44139,44141],{"class":130,"line":351},[128,44140,587],{"class":134},[128,44142,37472],{"class":138},[128,44144,44145],{"class":130,"line":384},[128,44146,160],{"emptyLinePlaceholder":159},[128,44148,44149],{"class":130,"line":414},[128,44150,37481],{"class":3814},[128,44152,44153,44155,44157],{"class":130,"line":419},[128,44154,196],{"class":134},[128,44156,37488],{"class":199},[128,44158,37491],{"class":138},[128,44160,44161],{"class":130,"line":424},[128,44162,37496],{"class":3814},[128,44164,44165,44167,44169,44171,44173,44175,44177],{"class":130,"line":434},[128,44166,34709],{"class":138},[128,44168,270],{"class":134},[128,44170,34716],{"class":176},[128,44172,5302],{"class":134},[128,44174,34721],{"class":138},[128,44176,5299],{"class":134},[128,44178,37513],{"class":176},[128,44180,44181,44183,44185],{"class":130,"line":447},[128,44182,34761],{"class":138},[128,44184,270],{"class":134},[128,44186,35756],{"class":138},[128,44188,44189],{"class":130,"line":459},[128,44190,160],{"emptyLinePlaceholder":159},[128,44192,44193],{"class":130,"line":471},[128,44194,37530],{"class":3814},[128,44196,44197,44199,44201],{"class":130,"line":483},[128,44198,37535],{"class":138},[128,44200,270],{"class":134},[128,44202,35809],{"class":166},[128,44204,44205,44207,44209],{"class":130,"line":495},[128,44206,37544],{"class":138},[128,44208,270],{"class":134},[128,44210,6656],{"class":166},[128,44212,44213],{"class":130,"line":507},[128,44214,160],{"emptyLinePlaceholder":159},[128,44216,44217],{"class":130,"line":519},[128,44218,37557],{"class":3814},[128,44220,44221],{"class":130,"line":524},[128,44222,37562],{"class":3814},[128,44224,44225],{"class":130,"line":529},[128,44226,37567],{"class":3814},[128,44228,44229,44231],{"class":130,"line":540},[128,44230,354],{"class":134},[128,44232,36320],{"class":138},[128,44234,44235],{"class":130,"line":555},[128,44236,37578],{"class":3814},[128,44238,44239,44241,44243,44245],{"class":130,"line":576},[128,44240,2141],{"class":134},[128,44242,37585],{"class":138},[128,44244,549],{"class":134},[128,44246,37590],{"class":138},[128,44248,44249,44251,44253],{"class":130,"line":584},[128,44250,37595],{"class":138},[128,44252,270],{"class":134},[128,44254,37600],{"class":138},[128,44256,44257,44259,44261],{"class":130,"line":593},[128,44258,37605],{"class":138},[128,44260,270],{"class":134},[128,44262,37610],{"class":138},[128,44264,44265],{"class":130,"line":598},[128,44266,37615],{"class":3814},[128,44268,44269],{"class":130,"line":603},[128,44270,36312],{"class":138},[128,44272,44273],{"class":130,"line":614},[128,44274,37624],{"class":3814},[128,44276,44277,44279,44281],{"class":130,"line":625},[128,44278,36121],{"class":138},[128,44280,270],{"class":134},[128,44282,37633],{"class":138},[128,44284,44285],{"class":130,"line":633},[128,44286,37638],{"class":3814},[128,44288,44289,44291,44293,44295,44297,44299,44301],{"class":130,"line":649},[128,44290,36136],{"class":138},[128,44292,270],{"class":134},[128,44294,36141],{"class":138},[128,44296,36144],{"class":266},[128,44298,270],{"class":134},[128,44300,2592],{"class":166},[128,44302,180],{"class":138},[128,44304,44305],{"class":130,"line":660},[128,44306,37659],{"class":3814},[128,44308,44309],{"class":130,"line":673},[128,44310,37664],{"class":3814},[128,44312,44313],{"class":130,"line":678},[128,44314,37669],{"class":3814},[128,44316,44317,44319,44321,44323,44325],{"class":130,"line":683},[128,44318,37674],{"class":138},[128,44320,13023],{"class":134},[128,44322,36234],{"class":138},[128,44324,570],{"class":134},[128,44326,37683],{"class":138},[128,44328,44329],{"class":130,"line":693},[128,44330,37688],{"class":3814},[128,44332,44333,44335,44337,44339,44341],{"class":130,"line":702},[128,44334,37693],{"class":138},[128,44336,13023],{"class":134},[128,44338,37698],{"class":138},[128,44340,2452],{"class":166},[128,44342,180],{"class":138},[128,44344,44345],{"class":130,"line":709},[128,44346,160],{"emptyLinePlaceholder":159},[128,44348,44349],{"class":130,"line":723},[128,44350,37711],{"class":3814},[128,44352,44353,44355,44357,44359,44361],{"class":130,"line":732},[128,44354,37716],{"class":138},[128,44356,270],{"class":134},[128,44358,37721],{"class":138},[128,44360,4333],{"class":134},[128,44362,37726],{"class":138},[128,44364,44365],{"class":130,"line":744},[128,44366,37731],{"class":3814},[128,44368,44369,44371,44373,44375],{"class":130,"line":749},[128,44370,313],{"class":166},[128,44372,253],{"class":138},[128,44374,37740],{"class":176},[128,44376,37743],{"class":138},[128,44378,44379],{"class":130,"line":754},[128,44380,160],{"emptyLinePlaceholder":159},[128,44382,44383],{"class":130,"line":764},[128,44384,37752],{"class":3814},[128,44386,44387,44389,44391,44393,44395],{"class":130,"line":782},[128,44388,1800],{"class":134},[128,44390,1803],{"class":166},[128,44392,570],{"class":134},[128,44394,34697],{"class":176},[128,44396,241],{"class":138},[128,44398,44399],{"class":130,"line":787},[128,44400,37769],{"class":3814},[128,44402,44403,44405,44407],{"class":130,"line":795},[128,44404,34761],{"class":138},[128,44406,270],{"class":134},[128,44408,44409],{"class":138},"VGG16()\n",[128,44411,44412],{"class":130,"line":807},[128,44413,37782],{"class":3814},[128,44415,44416],{"class":130,"line":813},[128,44417,37787],{"class":3814},[128,44419,44420,44422,44424],{"class":130,"line":818},[128,44421,37792],{"class":138},[128,44423,37795],{"class":176},[128,44425,3034],{"class":138},[128,44427,44428],{"class":130,"line":835},[128,44429,37802],{"class":3814},[128,44431,44432,44434,44436],{"class":130,"line":851},[128,44433,37416],{"class":138},[128,44435,270],{"class":134},[128,44437,37811],{"class":138},[128,44439,44440],{"class":130,"line":867},[128,44441,37816],{"class":3814},[128,44443,44444],{"class":130,"line":872},[128,44445,37821],{"class":138},[128,44447,44448],{"class":130,"line":878},[128,44449,160],{"emptyLinePlaceholder":159},[128,44451,44452],{"class":130,"line":887},[128,44453,37830],{"class":3814},[128,44455,44456],{"class":130,"line":896},[128,44457,37835],{"class":3814},[128,44459,44460,44462,44464,44466,44468,44470,44472],{"class":130,"line":905},[128,44461,34709],{"class":138},[128,44463,270],{"class":134},[128,44465,34716],{"class":176},[128,44467,5302],{"class":134},[128,44469,34721],{"class":138},[128,44471,5299],{"class":134},[128,44473,37513],{"class":176},[128,44475,44476,44478,44480],{"class":130,"line":914},[128,44477,34761],{"class":138},[128,44479,270],{"class":134},[128,44481,35756],{"class":138},[128,44483,44484],{"class":130,"line":920},[128,44485,37864],{"class":3814},[128,44487,44488],{"class":130,"line":926},[128,44489,37869],{"class":3814},[128,44491,44492,44494,44496,44498,44500,44502,44504,44506,44508,44510,44512,44514,44516,44518,44520,44522,44524,44526,44528,44530,44532,44534,44536],{"class":130,"line":938},[128,44493,37874],{"class":138},[128,44495,270],{"class":134},[128,44497,4638],{"class":138},[128,44499,37881],{"class":176},[128,44501,4128],{"class":138},[128,44503,37886],{"class":176},[128,44505,4128],{"class":138},[128,44507,37891],{"class":176},[128,44509,4128],{"class":138},[128,44511,37896],{"class":176},[128,44513,4128],{"class":138},[128,44515,37901],{"class":176},[128,44517,4128],{"class":138},[128,44519,37906],{"class":176},[128,44521,4128],{"class":138},[128,44523,37911],{"class":176},[128,44525,4128],{"class":138},[128,44527,37916],{"class":176},[128,44529,4128],{"class":138},[128,44531,37921],{"class":176},[128,44533,4128],{"class":138},[128,44535,37926],{"class":176},[128,44537,2376],{"class":138},[128,44539,44540,44542],{"class":130,"line":943},[128,44541,354],{"class":134},[128,44543,36320],{"class":138},[128,44545,44546],{"class":130,"line":948},[128,44547,37939],{"class":3814},[128,44549,44550,44552,44554,44556],{"class":130,"line":958},[128,44551,2141],{"class":134},[128,44553,37946],{"class":138},[128,44555,549],{"class":134},[128,44557,37590],{"class":138},[128,44559,44560,44562,44564],{"class":130,"line":974},[128,44561,36076],{"class":138},[128,44563,270],{"class":134},[128,44565,36081],{"class":138},[128,44567,44568,44570,44572],{"class":130,"line":985},[128,44569,36091],{"class":138},[128,44571,270],{"class":134},[128,44573,36096],{"class":138},[128,44575,44576],{"class":130,"line":990},[128,44577,160],{"emptyLinePlaceholder":159},[128,44579,44580],{"class":130,"line":1005},[128,44581,37975],{"class":3814},[128,44583,44584],{"class":130,"line":1017},[128,44585,36312],{"class":138},[128,44587,44588],{"class":130,"line":1022},[128,44589,37984],{"class":3814},[128,44591,44592,44594,44596],{"class":130,"line":1027},[128,44593,36121],{"class":138},[128,44595,270],{"class":134},[128,44597,36126],{"class":138},[128,44599,44600],{"class":130,"line":1033},[128,44601,37997],{"class":3814},[128,44603,44604,44606,44608,44610,44612,44614,44616],{"class":130,"line":1038},[128,44605,36136],{"class":138},[128,44607,270],{"class":134},[128,44609,36141],{"class":138},[128,44611,36144],{"class":266},[128,44613,270],{"class":134},[128,44615,2592],{"class":166},[128,44617,180],{"class":138},[128,44619,44620],{"class":130,"line":1050},[128,44621,38018],{"class":3814},[128,44623,44624,44626,44628],{"class":130,"line":1055},[128,44625,38023],{"class":138},[128,44627,270],{"class":134},[128,44629,38028],{"class":138},[128,44631,44632,44634,44636],{"class":130,"line":1060},[128,44633,38033],{"class":138},[128,44635,270],{"class":134},[128,44637,38038],{"class":138},[128,44639,44640,44642,44644,44646,44648,44650,44652,44654],{"class":130,"line":1070},[128,44641,663],{"class":166},[128,44643,253],{"class":138},[128,44645,38047],{"class":176},[128,44647,38050],{"class":138},[128,44649,38053],{"class":176},[128,44651,4128],{"class":138},[128,44653,38058],{"class":176},[128,44655,38061],{"class":138},[72,44657,44659],{"id":44658},"_23googlenet","2.3.GoogLeNet",[25485,44661,44663],{"id":44662},"_231原理","2.3.1.原理",[26,44665,44666],{},[29,44667,44668],{},"网络结构",[19,44670,44671],{},[5074,44672],{"alt":112,"src":44673},"\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,44675,44676],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,44678,44679],{},[5074,44680],{"alt":112,"src":44681},"\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,44683,44684],{},[5074,44685],{"alt":112,"src":44686},"\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,44688,44689],{},[5074,44690],{"alt":112,"src":44691},"\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,44693,44694],{"start":142},[29,44695,44696],{},"1x1卷积的优点",[19,44698,44699],{},[5074,44700],{"alt":112,"src":44701},"\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,44703,44704],{"start":156},[29,44705,44706],{},"全局平均池化层优点",[19,44708,44709],{},[5074,44710],{"alt":112,"src":44711},"\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,44713,44714],{},[5074,44715],{"alt":112,"src":44716},"\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,44718,44719],{"start":163},[29,44720,44721],{},"参数详细描述",[19,44723,44724],{},[5074,44725],{"alt":112,"src":44726},"\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,44728,44729],{},[5074,44730],{"alt":112,"src":44731},"\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,44733,44734],{},[5074,44735],{"alt":112,"src":44736},"\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,44738,44739],{},[5074,44740],{"alt":112,"src":44741},"\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,44743,44744],{},[5074,44745],{"alt":112,"src":44746},"\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,44748,44749],{},[5074,44750],{"alt":112,"src":44751},"\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,44753,44754],{},[5074,44755],{"alt":112,"src":44756},"\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,44758,44759],{},[5074,44760],{"alt":112,"src":44761},"\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,44763,44764],{},[5074,44765],{"alt":112,"src":44766},"\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,44768,44769],{},[5074,44770],{"alt":112,"src":44771},"\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,44773,44774],{},[5074,44775],{"alt":112,"src":44776},"\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,44778,44779],{},[5074,44780],{"alt":112,"src":44781},"\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,44783,44784],{},[5074,44785],{"alt":112,"src":44786},"\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,44788,44789],{},[5074,44790],{"alt":112,"src":44791},"\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,44793,44794],{},[5074,44795],{"alt":112,"src":44796},"\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,44798,44799],{},[5074,44800],{"alt":112,"src":44801},"\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,44803,44804],{},[5074,44805],{"alt":112,"src":44806},"\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,44808,44809],{},[5074,44810],{"alt":112,"src":44811},"\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,44813,44814],{},[5074,44815],{"alt":112,"src":44816},"\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,44818,44819],{},[5074,44820],{"alt":112,"src":44821},"\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,44823,44824],{},[5074,44825],{"alt":112,"src":44826},"\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",[25485,44828,44830],{"id":44829},"_232代码实现","2.3.2.代码实现",[26,44832,44833],{},[29,44834,34190],{},[19,44836,44837],{},"根据原理一步一步搭建即可",[106,44839,44841],{"className":122,"code":44840,"language":124,"meta":112,"style":112},"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",[114,44842,44843,44849,44859,44869,44873,44890,44899,44914,44924,44929,44962,44967,45004,45051,45056,45092,45139,45144,45149,45184,45216,45220,45228,45244,45268,45293,45314,45319,45334,45338,45342,45347,45364,45369,45378,45393,45404,45448,45452,45480,45484,45495,45523,45527,45564,45568,45596,45600,45611,45647,45679,45707,45711,45722,45756,45788,45820,45853,45887,45915,45919,45930,45963,45995,46009,46013,46026,46030,46035,46047,46055,46077,46082,46087,46092,46097,46102,46107,46121,46129,46138,46151,46166,46175,46179,46187,46198,46209,46220,46231,46242,46248,46252,46257,46269,46289,46298],{"__ignoreMap":112},[128,44844,44845,44847],{"class":130,"line":131},[128,44846,135],{"class":134},[128,44848,33876],{"class":138},[128,44850,44851,44853,44855,44857],{"class":130,"line":142},[128,44852,145],{"class":134},[128,44854,34218],{"class":138},[128,44856,135],{"class":134},[128,44858,34223],{"class":138},[128,44860,44861,44863,44865,44867],{"class":130,"line":156},[128,44862,145],{"class":134},[128,44864,34235],{"class":138},[128,44866,135],{"class":134},[128,44868,34240],{"class":138},[128,44870,44871],{"class":130,"line":163},[128,44872,160],{"emptyLinePlaceholder":159},[128,44874,44875,44877,44880,44882,44884,44886,44888],{"class":130,"line":183},[128,44876,1901],{"class":134},[128,44878,44879],{"class":199}," Inception",[128,44881,253],{"class":138},[128,44883,34256],{"class":199},[128,44885,4307],{"class":138},[128,44887,34261],{"class":199},[128,44889,34264],{"class":138},[128,44891,44892,44894,44896],{"class":130,"line":188},[128,44893,1946],{"class":134},[128,44895,2108],{"class":166},[128,44897,44898],{"class":138},"(self,in_channels,c1,c2,c3,c4):\n",[128,44900,44901,44903,44906,44908,44910,44912],{"class":130,"line":193},[128,44902,34292],{"class":166},[128,44904,44905],{"class":138},"(Inception,",[128,44907,1970],{"class":166},[128,44909,34300],{"class":138},[128,44911,34303],{"class":166},[128,44913,5563],{"class":138},[128,44915,44916,44918,44920,44922],{"class":130,"line":206},[128,44917,2115],{"class":166},[128,44919,38163],{"class":138},[128,44921,270],{"class":134},[128,44923,38168],{"class":138},[128,44925,44926],{"class":130,"line":221},[128,44927,44928],{"class":3814},"        # 路线1：定义1*1卷积\n",[128,44930,44931,44933,44936,44938,44940,44942,44944,44947,44949,44951,44954,44956,44958,44960],{"class":130,"line":230},[128,44932,2115],{"class":166},[128,44934,44935],{"class":138},".p1_1",[128,44937,270],{"class":134},[128,44939,34326],{"class":138},[128,44941,34329],{"class":266},[128,44943,270],{"class":134},[128,44945,44946],{"class":138},"in_channels,",[128,44948,34338],{"class":266},[128,44950,270],{"class":134},[128,44952,44953],{"class":138},"c1,",[128,44955,34347],{"class":266},[128,44957,270],{"class":134},[128,44959,2592],{"class":166},[128,44961,180],{"class":138},[128,44963,44964],{"class":130,"line":235},[128,44965,44966],{"class":3814},"        # 路线2：定义1*1卷积和3*3\n",[128,44968,44969,44971,44974,44976,44978,44980,44982,44984,44986,44988,44991,44993,44996,44998,45000,45002],{"class":130,"line":244},[128,44970,2115],{"class":166},[128,44972,44973],{"class":138},".p2_1",[128,44975,270],{"class":134},[128,44977,34326],{"class":138},[128,44979,34329],{"class":266},[128,44981,270],{"class":134},[128,44983,44946],{"class":138},[128,44985,34338],{"class":266},[128,44987,270],{"class":134},[128,44989,44990],{"class":138},"c2[",[128,44992,2452],{"class":166},[128,44994,44995],{"class":138},"],",[128,44997,34347],{"class":266},[128,44999,270],{"class":134},[128,45001,2592],{"class":166},[128,45003,180],{"class":138},[128,45005,45006,45008,45011,45013,45015,45017,45019,45021,45023,45025,45027,45029,45031,45033,45035,45037,45039,45041,45043,45045,45047,45049],{"class":130,"line":287},[128,45007,2115],{"class":166},[128,45009,45010],{"class":138},".p2_2",[128,45012,270],{"class":134},[128,45014,34326],{"class":138},[128,45016,34329],{"class":266},[128,45018,270],{"class":134},[128,45020,44990],{"class":138},[128,45022,2452],{"class":166},[128,45024,44995],{"class":138},[128,45026,34338],{"class":266},[128,45028,270],{"class":134},[128,45030,44990],{"class":138},[128,45032,2592],{"class":166},[128,45034,44995],{"class":138},[128,45036,34347],{"class":266},[128,45038,270],{"class":134},[128,45040,3827],{"class":166},[128,45042,4128],{"class":138},[128,45044,34356],{"class":266},[128,45046,270],{"class":134},[128,45048,2592],{"class":166},[128,45050,180],{"class":138},[128,45052,45053],{"class":130,"line":301},[128,45054,45055],{"class":3814},"        # 路线3：定义1*1卷积和5*5\n",[128,45057,45058,45060,45063,45065,45067,45069,45071,45073,45075,45077,45080,45082,45084,45086,45088,45090],{"class":130,"line":310},[128,45059,2115],{"class":166},[128,45061,45062],{"class":138},".p3_1",[128,45064,270],{"class":134},[128,45066,34326],{"class":138},[128,45068,34329],{"class":266},[128,45070,270],{"class":134},[128,45072,44946],{"class":138},[128,45074,34338],{"class":266},[128,45076,270],{"class":134},[128,45078,45079],{"class":138},"c3[",[128,45081,2452],{"class":166},[128,45083,44995],{"class":138},[128,45085,34347],{"class":266},[128,45087,270],{"class":134},[128,45089,2592],{"class":166},[128,45091,180],{"class":138},[128,45093,45094,45096,45099,45101,45103,45105,45107,45109,45111,45113,45115,45117,45119,45121,45123,45125,45127,45129,45131,45133,45135,45137],{"class":130,"line":323},[128,45095,2115],{"class":166},[128,45097,45098],{"class":138},".p3_2",[128,45100,270],{"class":134},[128,45102,34326],{"class":138},[128,45104,34329],{"class":266},[128,45106,270],{"class":134},[128,45108,45079],{"class":138},[128,45110,2452],{"class":166},[128,45112,44995],{"class":138},[128,45114,34338],{"class":266},[128,45116,270],{"class":134},[128,45118,45079],{"class":138},[128,45120,2592],{"class":166},[128,45122,44995],{"class":138},[128,45124,34347],{"class":266},[128,45126,270],{"class":134},[128,45128,4069],{"class":166},[128,45130,4128],{"class":138},[128,45132,34356],{"class":266},[128,45134,270],{"class":134},[128,45136,409],{"class":166},[128,45138,180],{"class":138},[128,45140,45141],{"class":130,"line":330},[128,45142,45143],{"class":3814},"        # 路线4：定义3*3最大池化和1*1卷积\n",[128,45145,45146],{"class":130,"line":335},[128,45147,45148],{"class":3814},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[128,45150,45151,45153,45156,45158,45160,45162,45164,45166,45168,45170,45172,45174,45176,45178,45180,45182],{"class":130,"line":340},[128,45152,2115],{"class":166},[128,45154,45155],{"class":138},".p4_1",[128,45157,270],{"class":134},[128,45159,38221],{"class":138},[128,45161,34347],{"class":266},[128,45163,270],{"class":134},[128,45165,3827],{"class":166},[128,45167,4128],{"class":138},[128,45169,34402],{"class":266},[128,45171,270],{"class":134},[128,45173,2592],{"class":166},[128,45175,4128],{"class":138},[128,45177,34356],{"class":266},[128,45179,270],{"class":134},[128,45181,2592],{"class":166},[128,45183,180],{"class":138},[128,45185,45186,45188,45191,45193,45195,45197,45199,45201,45203,45205,45208,45210,45212,45214],{"class":130,"line":351},[128,45187,2115],{"class":166},[128,45189,45190],{"class":138},".p4_2",[128,45192,270],{"class":134},[128,45194,34326],{"class":138},[128,45196,34329],{"class":266},[128,45198,270],{"class":134},[128,45200,44946],{"class":138},[128,45202,34338],{"class":266},[128,45204,270],{"class":134},[128,45206,45207],{"class":138},"c4,",[128,45209,34347],{"class":266},[128,45211,270],{"class":134},[128,45213,2592],{"class":166},[128,45215,180],{"class":138},[128,45217,45218],{"class":130,"line":384},[128,45219,160],{"emptyLinePlaceholder":159},[128,45221,45222,45224,45226],{"class":130,"line":414},[128,45223,1946],{"class":134},[128,45225,34566],{"class":199},[128,45227,34569],{"class":138},[128,45229,45230,45233,45235,45237,45239,45241],{"class":130,"line":419},[128,45231,45232],{"class":138},"        p1",[128,45234,270],{"class":134},[128,45236,1970],{"class":166},[128,45238,38576],{"class":138},[128,45240,1970],{"class":166},[128,45242,45243],{"class":138},".p1_1(x))\n",[128,45245,45246,45248,45250,45252,45254,45256,45259,45261,45263,45265],{"class":130,"line":424},[128,45247,10642],{"class":138},[128,45249,270],{"class":134},[128,45251,1970],{"class":166},[128,45253,38576],{"class":138},[128,45255,1970],{"class":166},[128,45257,45258],{"class":138},".p2_2(",[128,45260,1970],{"class":166},[128,45262,38576],{"class":138},[128,45264,1970],{"class":166},[128,45266,45267],{"class":138},".p2_1(x))))\n",[128,45269,45270,45273,45275,45277,45279,45281,45284,45286,45288,45290],{"class":130,"line":434},[128,45271,45272],{"class":138},"        p3",[128,45274,270],{"class":134},[128,45276,1970],{"class":166},[128,45278,38576],{"class":138},[128,45280,1970],{"class":166},[128,45282,45283],{"class":138},".p3_2(",[128,45285,1970],{"class":166},[128,45287,38576],{"class":138},[128,45289,1970],{"class":166},[128,45291,45292],{"class":138},".p3_1(x))))\n",[128,45294,45295,45298,45300,45302,45304,45306,45309,45311],{"class":130,"line":447},[128,45296,45297],{"class":138},"        p4",[128,45299,270],{"class":134},[128,45301,1970],{"class":166},[128,45303,38576],{"class":138},[128,45305,1970],{"class":166},[128,45307,45308],{"class":138},".p4_2(",[128,45310,1970],{"class":166},[128,45312,45313],{"class":138},".p4_1(x)))\n",[128,45315,45316],{"class":130,"line":459},[128,45317,45318],{"class":3814},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[128,45320,45321,45323,45326,45328,45330,45332],{"class":130,"line":471},[128,45322,224],{"class":134},[128,45324,45325],{"class":138}," torch.cat((p1,p2,p3,p4),",[128,45327,36144],{"class":266},[128,45329,270],{"class":134},[128,45331,2592],{"class":166},[128,45333,180],{"class":138},[128,45335,45336],{"class":130,"line":483},[128,45337,160],{"emptyLinePlaceholder":159},[128,45339,45340],{"class":130,"line":495},[128,45341,160],{"emptyLinePlaceholder":159},[128,45343,45344],{"class":130,"line":507},[128,45345,45346],{"class":3814},"# 搭建GoogLeNet网络\n",[128,45348,45349,45351,45354,45356,45358,45360,45362],{"class":130,"line":519},[128,45350,1901],{"class":134},[128,45352,45353],{"class":199}," GoogLeNet",[128,45355,253],{"class":138},[128,45357,34256],{"class":199},[128,45359,4307],{"class":138},[128,45361,34261],{"class":199},[128,45363,34264],{"class":138},[128,45365,45366],{"class":130,"line":524},[128,45367,45368],{"class":3814},"    # 必须把Inception导入到里边\n",[128,45370,45371,45373,45375],{"class":130,"line":529},[128,45372,1946],{"class":134},[128,45374,2108],{"class":166},[128,45376,45377],{"class":138},"(self,Inception):\n",[128,45379,45380,45382,45385,45387,45389,45391],{"class":130,"line":540},[128,45381,34292],{"class":166},[128,45383,45384],{"class":138},"(GoogLeNet,",[128,45386,1970],{"class":166},[128,45388,34300],{"class":138},[128,45390,34303],{"class":166},[128,45392,5563],{"class":138},[128,45394,45395,45397,45400,45402],{"class":130,"line":555},[128,45396,2115],{"class":166},[128,45398,45399],{"class":138},".b1",[128,45401,270],{"class":134},[128,45403,41401],{"class":138},[128,45405,45406,45408,45410,45412,45414,45416,45418,45420,45422,45424,45426,45428,45430,45432,45434,45436,45438,45440,45442,45444,45446],{"class":130,"line":576},[128,45407,41406],{"class":138},[128,45409,34329],{"class":266},[128,45411,270],{"class":134},[128,45413,2592],{"class":166},[128,45415,4128],{"class":138},[128,45417,34338],{"class":266},[128,45419,270],{"class":134},[128,45421,3956],{"class":166},[128,45423,4128],{"class":138},[128,45425,34347],{"class":266},[128,45427,270],{"class":134},[128,45429,4119],{"class":166},[128,45431,4128],{"class":138},[128,45433,34402],{"class":266},[128,45435,270],{"class":134},[128,45437,409],{"class":166},[128,45439,4128],{"class":138},[128,45441,34356],{"class":266},[128,45443,270],{"class":134},[128,45445,3827],{"class":166},[128,45447,2760],{"class":138},[128,45449,45450],{"class":130,"line":584},[128,45451,41443],{"class":138},[128,45453,45454,45456,45458,45460,45462,45464,45466,45468,45470,45472,45474,45476,45478],{"class":130,"line":593},[128,45455,41488],{"class":138},[128,45457,34347],{"class":266},[128,45459,270],{"class":134},[128,45461,3827],{"class":166},[128,45463,4128],{"class":138},[128,45465,34402],{"class":266},[128,45467,270],{"class":134},[128,45469,409],{"class":166},[128,45471,4128],{"class":138},[128,45473,34356],{"class":266},[128,45475,270],{"class":134},[128,45477,2592],{"class":166},[128,45479,180],{"class":138},[128,45481,45482],{"class":130,"line":598},[128,45483,2084],{"class":138},[128,45485,45486,45488,45491,45493],{"class":130,"line":603},[128,45487,2115],{"class":166},[128,45489,45490],{"class":138},".b2",[128,45492,270],{"class":134},[128,45494,41401],{"class":138},[128,45496,45497,45499,45501,45503,45505,45507,45509,45511,45513,45515,45517,45519,45521],{"class":130,"line":614},[128,45498,41406],{"class":138},[128,45500,34329],{"class":266},[128,45502,270],{"class":134},[128,45504,3956],{"class":166},[128,45506,4128],{"class":138},[128,45508,34338],{"class":266},[128,45510,270],{"class":134},[128,45512,3956],{"class":166},[128,45514,4128],{"class":138},[128,45516,34347],{"class":266},[128,45518,270],{"class":134},[128,45520,2592],{"class":166},[128,45522,2760],{"class":138},[128,45524,45525],{"class":130,"line":625},[128,45526,41443],{"class":138},[128,45528,45529,45531,45533,45535,45537,45539,45541,45543,45546,45548,45550,45552,45554,45556,45558,45560,45562],{"class":130,"line":633},[128,45530,41406],{"class":138},[128,45532,34329],{"class":266},[128,45534,270],{"class":134},[128,45536,3956],{"class":166},[128,45538,4128],{"class":138},[128,45540,34338],{"class":266},[128,45542,270],{"class":134},[128,45544,45545],{"class":166},"192",[128,45547,4128],{"class":138},[128,45549,34347],{"class":266},[128,45551,270],{"class":134},[128,45553,3827],{"class":166},[128,45555,4128],{"class":138},[128,45557,34356],{"class":266},[128,45559,270],{"class":134},[128,45561,2592],{"class":166},[128,45563,2760],{"class":138},[128,45565,45566],{"class":130,"line":649},[128,45567,41443],{"class":138},[128,45569,45570,45572,45574,45576,45578,45580,45582,45584,45586,45588,45590,45592,45594],{"class":130,"line":660},[128,45571,41488],{"class":138},[128,45573,34347],{"class":266},[128,45575,270],{"class":134},[128,45577,3827],{"class":166},[128,45579,4128],{"class":138},[128,45581,34402],{"class":266},[128,45583,270],{"class":134},[128,45585,409],{"class":166},[128,45587,4128],{"class":138},[128,45589,34356],{"class":266},[128,45591,270],{"class":134},[128,45593,2592],{"class":166},[128,45595,180],{"class":138},[128,45597,45598],{"class":130,"line":673},[128,45599,2084],{"class":138},[128,45601,45602,45604,45607,45609],{"class":130,"line":678},[128,45603,2115],{"class":166},[128,45605,45606],{"class":138},".b3",[128,45608,270],{"class":134},[128,45610,41401],{"class":138},[128,45612,45613,45616,45618,45620,45622,45625,45627,45629,45631,45634,45636,45638,45640,45643,45645],{"class":130,"line":683},[128,45614,45615],{"class":138},"            Inception(",[128,45617,45545],{"class":166},[128,45619,4128],{"class":138},[128,45621,3956],{"class":166},[128,45623,45624],{"class":138},",(",[128,45626,3962],{"class":166},[128,45628,4128],{"class":138},[128,45630,35537],{"class":166},[128,45632,45633],{"class":138},"),(",[128,45635,4350],{"class":166},[128,45637,4128],{"class":138},[128,45639,3950],{"class":166},[128,45641,45642],{"class":138},"),",[128,45644,3950],{"class":166},[128,45646,2760],{"class":138},[128,45648,45649,45651,45653,45655,45657,45659,45661,45663,45665,45667,45669,45671,45673,45675,45677],{"class":130,"line":693},[128,45650,45615],{"class":138},[128,45652,38262],{"class":166},[128,45654,4128],{"class":138},[128,45656,35537],{"class":166},[128,45658,45624],{"class":138},[128,45660,35537],{"class":166},[128,45662,4128],{"class":138},[128,45664,45545],{"class":166},[128,45666,45633],{"class":138},[128,45668,3950],{"class":166},[128,45670,4128],{"class":138},[128,45672,3962],{"class":166},[128,45674,45642],{"class":138},[128,45676,3956],{"class":166},[128,45678,2760],{"class":138},[128,45680,45681,45683,45685,45687,45689,45691,45693,45695,45697,45699,45701,45703,45705],{"class":130,"line":702},[128,45682,41488],{"class":138},[128,45684,34347],{"class":266},[128,45686,270],{"class":134},[128,45688,3827],{"class":166},[128,45690,4128],{"class":138},[128,45692,34402],{"class":266},[128,45694,270],{"class":134},[128,45696,409],{"class":166},[128,45698,4128],{"class":138},[128,45700,34356],{"class":266},[128,45702,270],{"class":134},[128,45704,2592],{"class":166},[128,45706,180],{"class":138},[128,45708,45709],{"class":130,"line":709},[128,45710,2084],{"class":138},[128,45712,45713,45715,45718,45720],{"class":130,"line":723},[128,45714,2115],{"class":166},[128,45716,45717],{"class":138},".b4",[128,45719,270],{"class":134},[128,45721,41401],{"class":138},[128,45723,45724,45726,45729,45731,45733,45735,45737,45739,45742,45744,45746,45748,45750,45752,45754],{"class":130,"line":732},[128,45725,45615],{"class":138},[128,45727,45728],{"class":166},"480",[128,45730,4128],{"class":138},[128,45732,45545],{"class":166},[128,45734,45624],{"class":138},[128,45736,3962],{"class":166},[128,45738,4128],{"class":138},[128,45740,45741],{"class":166},"208",[128,45743,45633],{"class":138},[128,45745,4350],{"class":166},[128,45747,4128],{"class":138},[128,45749,4356],{"class":166},[128,45751,45642],{"class":138},[128,45753,3956],{"class":166},[128,45755,2760],{"class":138},[128,45757,45758,45760,45762,45764,45766,45768,45770,45772,45774,45776,45778,45780,45782,45784,45786],{"class":130,"line":744},[128,45759,45615],{"class":138},[128,45761,41847],{"class":166},[128,45763,4128],{"class":138},[128,45765,24535],{"class":166},[128,45767,45624],{"class":138},[128,45769,4367],{"class":166},[128,45771,4128],{"class":138},[128,45773,34970],{"class":166},[128,45775,45633],{"class":138},[128,45777,4549],{"class":166},[128,45779,4128],{"class":138},[128,45781,3956],{"class":166},[128,45783,45642],{"class":138},[128,45785,3956],{"class":166},[128,45787,2760],{"class":138},[128,45789,45790,45792,45794,45796,45798,45800,45802,45804,45806,45808,45810,45812,45814,45816,45818],{"class":130,"line":749},[128,45791,45615],{"class":138},[128,45793,41847],{"class":166},[128,45795,4128],{"class":138},[128,45797,35537],{"class":166},[128,45799,45624],{"class":138},[128,45801,35537],{"class":166},[128,45803,4128],{"class":138},[128,45805,38262],{"class":166},[128,45807,45633],{"class":138},[128,45809,4549],{"class":166},[128,45811,4128],{"class":138},[128,45813,3956],{"class":166},[128,45815,45642],{"class":138},[128,45817,3956],{"class":166},[128,45819,2760],{"class":138},[128,45821,45822,45824,45826,45828,45830,45832,45834,45836,45839,45841,45843,45845,45847,45849,45851],{"class":130,"line":754},[128,45823,45615],{"class":138},[128,45825,41847],{"class":166},[128,45827,4128],{"class":138},[128,45829,4367],{"class":166},[128,45831,45624],{"class":138},[128,45833,35537],{"class":166},[128,45835,4128],{"class":138},[128,45837,45838],{"class":166},"288",[128,45840,45633],{"class":138},[128,45842,3950],{"class":166},[128,45844,4128],{"class":138},[128,45846,3956],{"class":166},[128,45848,45642],{"class":138},[128,45850,3956],{"class":166},[128,45852,2760],{"class":138},[128,45854,45855,45857,45860,45862,45864,45866,45868,45870,45873,45875,45877,45879,45881,45883,45885],{"class":130,"line":764},[128,45856,45615],{"class":138},[128,45858,45859],{"class":166},"528",[128,45861,4128],{"class":138},[128,45863,38262],{"class":166},[128,45865,45624],{"class":138},[128,45867,24535],{"class":166},[128,45869,4128],{"class":138},[128,45871,45872],{"class":166},"320",[128,45874,45633],{"class":138},[128,45876,3950],{"class":166},[128,45878,4128],{"class":138},[128,45880,35537],{"class":166},[128,45882,45642],{"class":138},[128,45884,35537],{"class":166},[128,45886,2760],{"class":138},[128,45888,45889,45891,45893,45895,45897,45899,45901,45903,45905,45907,45909,45911,45913],{"class":130,"line":782},[128,45890,41488],{"class":138},[128,45892,34347],{"class":266},[128,45894,270],{"class":134},[128,45896,3827],{"class":166},[128,45898,4128],{"class":138},[128,45900,34402],{"class":266},[128,45902,270],{"class":134},[128,45904,409],{"class":166},[128,45906,4128],{"class":138},[128,45908,34356],{"class":266},[128,45910,270],{"class":134},[128,45912,2592],{"class":166},[128,45914,180],{"class":138},[128,45916,45917],{"class":130,"line":787},[128,45918,2084],{"class":138},[128,45920,45921,45923,45926,45928],{"class":130,"line":795},[128,45922,2115],{"class":166},[128,45924,45925],{"class":138},".b5",[128,45927,270],{"class":134},[128,45929,41401],{"class":138},[128,45931,45932,45934,45937,45939,45941,45943,45945,45947,45949,45951,45953,45955,45957,45959,45961],{"class":130,"line":807},[128,45933,45615],{"class":138},[128,45935,45936],{"class":166},"832",[128,45938,4128],{"class":138},[128,45940,38262],{"class":166},[128,45942,45624],{"class":138},[128,45944,24535],{"class":166},[128,45946,4128],{"class":138},[128,45948,45872],{"class":166},[128,45950,45633],{"class":138},[128,45952,3950],{"class":166},[128,45954,4128],{"class":138},[128,45956,35537],{"class":166},[128,45958,45642],{"class":138},[128,45960,35537],{"class":166},[128,45962,2760],{"class":138},[128,45964,45965,45967,45969,45971,45973,45975,45977,45979,45981,45983,45985,45987,45989,45991,45993],{"class":130,"line":813},[128,45966,45615],{"class":138},[128,45968,45936],{"class":166},[128,45970,4128],{"class":138},[128,45972,38332],{"class":166},[128,45974,45624],{"class":138},[128,45976,45545],{"class":166},[128,45978,4128],{"class":138},[128,45980,38332],{"class":166},[128,45982,45633],{"class":138},[128,45984,4356],{"class":166},[128,45986,4128],{"class":138},[128,45988,35537],{"class":166},[128,45990,45642],{"class":138},[128,45992,35537],{"class":166},[128,45994,2760],{"class":138},[128,45996,45997,46000,46002,46004,46006],{"class":130,"line":818},[128,45998,45999],{"class":138},"            nn.AdaptiveAvgPool2d((",[128,46001,2592],{"class":166},[128,46003,4128],{"class":138},[128,46005,2592],{"class":166},[128,46007,46008],{"class":138},")),\n",[128,46010,46011],{"class":130,"line":835},[128,46012,42180],{"class":138},[128,46014,46015,46017,46020,46022,46024],{"class":130,"line":851},[128,46016,42185],{"class":138},[128,46018,46019],{"class":166},"1024",[128,46021,4128],{"class":138},[128,46023,4196],{"class":166},[128,46025,180],{"class":138},[128,46027,46028],{"class":130,"line":867},[128,46029,2084],{"class":138},[128,46031,46032],{"class":130,"line":872},[128,46033,46034],{"class":3814},"        # 对模型参数初始化\n",[128,46036,46037,46039,46041,46043,46045],{"class":130,"line":878},[128,46038,2141],{"class":134},[128,46040,42258],{"class":138},[128,46042,549],{"class":134},[128,46044,2148],{"class":166},[128,46046,42265],{"class":138},[128,46048,46049,46051,46053],{"class":130,"line":887},[128,46050,2156],{"class":134},[128,46052,42277],{"class":166},[128,46054,42280],{"class":138},[128,46056,46057,46059,46062,46064,46067,46069,46071,46073,46075],{"class":130,"line":896},[128,46058,42290],{"class":138},[128,46060,46061],{"class":266},"mode",[128,46063,270],{"class":134},[128,46065,46066],{"class":176},"'fan_out'",[128,46068,4128],{"class":138},[128,46070,42293],{"class":266},[128,46072,270],{"class":134},[128,46074,42298],{"class":176},[128,46076,180],{"class":138},[128,46078,46079],{"class":130,"line":905},[128,46080,46081],{"class":3814},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[128,46083,46084],{"class":130,"line":914},[128,46085,46086],{"class":3814},"                # ② mode = 'fan_out'决定使用的fan值：\n",[128,46088,46089],{"class":130,"line":920},[128,46090,46091],{"class":3814},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[128,46093,46094],{"class":130,"line":926},[128,46095,46096],{"class":3814},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[128,46098,46099],{"class":130,"line":938},[128,46100,46101],{"class":3814},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[128,46103,46104],{"class":130,"line":943},[128,46105,46106],{"class":3814},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[128,46108,46109,46111,46113,46115,46117,46119],{"class":130,"line":948},[128,46110,42310],{"class":134},[128,46112,42313],{"class":138},[128,46114,997],{"class":134},[128,46116,212],{"class":134},[128,46118,1000],{"class":166},[128,46120,241],{"class":138},[128,46122,46123,46125,46127],{"class":130,"line":958},[128,46124,42331],{"class":138},[128,46126,2452],{"class":166},[128,46128,180],{"class":138},[128,46130,46131,46134,46136],{"class":130,"line":974},[128,46132,46133],{"class":134},"                elif",[128,46135,42277],{"class":166},[128,46137,42350],{"class":138},[128,46139,46140,46143,46145,46147,46149],{"class":130,"line":985},[128,46141,46142],{"class":138},"                    nn.init.normal_(m.weight,",[128,46144,2452],{"class":166},[128,46146,4128],{"class":138},[128,46148,42372],{"class":166},[128,46150,180],{"class":138},[128,46152,46153,46156,46158,46160,46162,46164],{"class":130,"line":990},[128,46154,46155],{"class":134},"                    if",[128,46157,42313],{"class":138},[128,46159,997],{"class":134},[128,46161,212],{"class":134},[128,46163,1000],{"class":166},[128,46165,241],{"class":138},[128,46167,46168,46171,46173],{"class":130,"line":1005},[128,46169,46170],{"class":138},"                        nn.init.constant_(m.bias,",[128,46172,2452],{"class":166},[128,46174,180],{"class":138},[128,46176,46177],{"class":130,"line":1017},[128,46178,38557],{"class":3814},[128,46180,46181,46183,46185],{"class":130,"line":1022},[128,46182,1946],{"class":134},[128,46184,34566],{"class":199},[128,46186,34569],{"class":138},[128,46188,46189,46191,46193,46195],{"class":130,"line":1027},[128,46190,34574],{"class":138},[128,46192,270],{"class":134},[128,46194,1970],{"class":166},[128,46196,46197],{"class":138},".b1(x)\n",[128,46199,46200,46202,46204,46206],{"class":130,"line":1033},[128,46201,34574],{"class":138},[128,46203,270],{"class":134},[128,46205,1970],{"class":166},[128,46207,46208],{"class":138},".b2(x)\n",[128,46210,46211,46213,46215,46217],{"class":130,"line":1038},[128,46212,34574],{"class":138},[128,46214,270],{"class":134},[128,46216,1970],{"class":166},[128,46218,46219],{"class":138},".b3(x)\n",[128,46221,46222,46224,46226,46228],{"class":130,"line":1050},[128,46223,34574],{"class":138},[128,46225,270],{"class":134},[128,46227,1970],{"class":166},[128,46229,46230],{"class":138},".b4(x)\n",[128,46232,46233,46235,46237,46239],{"class":130,"line":1055},[128,46234,34574],{"class":138},[128,46236,270],{"class":134},[128,46238,1970],{"class":166},[128,46240,46241],{"class":138},".b5(x)\n",[128,46243,46244,46246],{"class":130,"line":1060},[128,46245,224],{"class":134},[128,46247,34682],{"class":138},[128,46249,46250],{"class":130,"line":1070},[128,46251,160],{"emptyLinePlaceholder":159},[128,46253,46254],{"class":130,"line":1086},[128,46255,46256],{"class":3814},"# 模型展示\n",[128,46258,46259,46261,46263,46265,46267],{"class":130,"line":1095},[128,46260,1800],{"class":134},[128,46262,1803],{"class":166},[128,46264,570],{"class":134},[128,46266,34697],{"class":176},[128,46268,241],{"class":138},[128,46270,46271,46273,46275,46277,46279,46281,46283,46285,46287],{"class":130,"line":1100},[128,46272,34709],{"class":138},[128,46274,270],{"class":134},[128,46276,33931],{"class":138},[128,46278,34716],{"class":176},[128,46280,5302],{"class":134},[128,46282,34721],{"class":138},[128,46284,5299],{"class":134},[128,46286,33956],{"class":176},[128,46288,180],{"class":138},[128,46290,46291,46293,46295],{"class":130,"line":1113},[128,46292,34761],{"class":138},[128,46294,270],{"class":134},[128,46296,46297],{"class":138},"GoogLeNet(Inception).to(device)\n",[128,46299,46300,46302,46304,46306,46308,46310,46312,46314],{"class":130,"line":1124},[128,46301,437],{"class":166},[128,46303,34773],{"class":138},[128,46305,2592],{"class":166},[128,46307,4128],{"class":138},[128,46309,34970],{"class":166},[128,46311,4128],{"class":138},[128,46313,34970],{"class":166},[128,46315,34786],{"class":138},[26,46317,46318],{"start":142},[29,46319,42569],{},[106,46321,46323],{"className":122,"code":46322,"language":124,"meta":112,"style":112},"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",[114,46324,46325,46331,46337,46347,46353,46363,46373,46383,46393,46403,46407,46418,46428,46432,46436,46440,46448,46460,46470,46486,46496,46528,46542,46552,46562,46566,46576,46590,46600,46610,46620,46626,46630,46634,46638,46642,46646,46654,46674,46678,46682,46686,46690,46694,46710,46714,46718,46726,46730,46734,46742,46746,46750,46754,46762,46766,46770,46774,46778,46786,46790,46798,46802,46810,46814,46822,46826,46834,46838,46842,46850,46854,46858,46862,46874,46898,46912,46916,46920,46924,46932,46936,46944,46948,46956,46960,46968,46972,46980,46984,46992,46996,47008,47012,47020,47024,47032,47036,47040,47044,47048,47056,47060,47076,47080,47088,47092,47096,47100,47104,47108,47112,47116,47132,47136,47148,47152,47164,47168,47180,47184,47192,47196,47204,47208,47212,47216,47222,47226,47234,47238,47254,47258,47266,47270,47286,47298,47302,47314,47318,47322,47330,47334,47338,47346,47350,47358,47362,47370,47374,47378,47420,47462,47466,47470,47486,47490,47506,47510,47514,47522,47526,47530,47542,47580,47584,47588,47596,47600,47614,47624,47630,47636,47642,47648,47652,47656,47662,47666,47670,47678,47682,47700,47704,47708,47712,47728,47732,47736,47740,47744,47748,47768,47788,47792,47796,47800,47808,47816,47820,47836,47856,47876,47880,47884,47892,47900,47904,47908,47912,47924,47928,47938,47946,47963],{"__ignoreMap":112},[128,46326,46327,46329],{"class":130,"line":131},[128,46328,135],{"class":134},[128,46330,35291],{"class":138},[128,46332,46333,46335],{"class":130,"line":142},[128,46334,135],{"class":134},[128,46336,35298],{"class":138},[128,46338,46339,46341,46343,46345],{"class":130,"line":156},[128,46340,135],{"class":134},[128,46342,35309],{"class":138},[128,46344,279],{"class":134},[128,46346,35314],{"class":138},[128,46348,46349,46351],{"class":130,"line":163},[128,46350,135],{"class":134},[128,46352,33876],{"class":138},[128,46354,46355,46357,46359,46361],{"class":130,"line":183},[128,46356,145],{"class":134},[128,46358,34885],{"class":138},[128,46360,135],{"class":134},[128,46362,35331],{"class":138},[128,46364,46365,46367,46369,46371],{"class":130,"line":188},[128,46366,145],{"class":134},[128,46368,34839],{"class":138},[128,46370,135],{"class":134},[128,46372,34844],{"class":138},[128,46374,46375,46377,46379,46381],{"class":130,"line":193},[128,46376,145],{"class":134},[128,46378,34868],{"class":138},[128,46380,135],{"class":134},[128,46382,34873],{"class":138},[128,46384,46385,46387,46389,46391],{"class":130,"line":206},[128,46386,135],{"class":134},[128,46388,34885],{"class":138},[128,46390,279],{"class":134},[128,46392,34890],{"class":138},[128,46394,46395,46397,46399,46401],{"class":130,"line":221},[128,46396,135],{"class":134},[128,46398,34902],{"class":138},[128,46400,279],{"class":134},[128,46402,34907],{"class":138},[128,46404,46405],{"class":130,"line":230},[128,46406,35376],{"class":3814},[128,46408,46409,46411,46413,46415],{"class":130,"line":235},[128,46410,145],{"class":134},[128,46412,35383],{"class":138},[128,46414,135],{"class":134},[128,46416,46417],{"class":138}," GoogLeNet, Inception\n",[128,46419,46420,46422,46424,46426],{"class":130,"line":244},[128,46421,145],{"class":134},[128,46423,34218],{"class":138},[128,46425,135],{"class":134},[128,46427,34223],{"class":138},[128,46429,46430],{"class":130,"line":287},[128,46431,160],{"emptyLinePlaceholder":159},[128,46433,46434],{"class":130,"line":301},[128,46435,160],{"emptyLinePlaceholder":159},[128,46437,46438],{"class":130,"line":310},[128,46439,35411],{"class":3814},[128,46441,46442,46444,46446],{"class":130,"line":323},[128,46443,196],{"class":134},[128,46445,35418],{"class":199},[128,46447,203],{"class":138},[128,46449,46450,46452,46454,46456,46458],{"class":130,"line":330},[128,46451,35425],{"class":138},[128,46453,270],{"class":134},[128,46455,34925],{"class":138},[128,46457,34933],{"class":176},[128,46459,2665],{"class":138},[128,46461,46462,46464,46466,46468],{"class":130,"line":335},[128,46463,35438],{"class":266},[128,46465,270],{"class":134},[128,46467,34945],{"class":166},[128,46469,2665],{"class":138},[128,46471,46472,46474,46476,46478,46480,46482,46484],{"class":130,"line":340},[128,46473,35449],{"class":266},[128,46475,270],{"class":134},[128,46477,34962],{"class":138},[128,46479,34965],{"class":266},[128,46481,270],{"class":134},[128,46483,38841],{"class":166},[128,46485,34973],{"class":138},[128,46487,46488,46490,46492,46494],{"class":130,"line":351},[128,46489,35466],{"class":266},[128,46491,270],{"class":134},[128,46493,34945],{"class":166},[128,46495,180],{"class":138},[128,46497,46498,46500,46502,46504,46506,46508,46510,46512,46514,46516,46518,46520,46522,46524,46526],{"class":130,"line":384},[128,46499,35477],{"class":138},[128,46501,270],{"class":134},[128,46503,35482],{"class":138},[128,46505,35485],{"class":166},[128,46507,253],{"class":138},[128,46509,35490],{"class":166},[128,46511,4205],{"class":134},[128,46513,10915],{"class":166},[128,46515,35497],{"class":138},[128,46517,35485],{"class":166},[128,46519,253],{"class":138},[128,46521,35504],{"class":166},[128,46523,4205],{"class":134},[128,46525,10915],{"class":166},[128,46527,35511],{"class":138},[128,46529,46530,46532,46534,46536,46538,46540],{"class":130,"line":414},[128,46531,35516],{"class":138},[128,46533,270],{"class":134},[128,46535,35521],{"class":138},[128,46537,35006],{"class":266},[128,46539,270],{"class":134},[128,46541,35011],{"class":138},[128,46543,46544,46546,46548,46550],{"class":130,"line":419},[128,46545,35532],{"class":266},[128,46547,270],{"class":134},[128,46549,3950],{"class":166},[128,46551,2665],{"class":138},[128,46553,46554,46556,46558,46560],{"class":130,"line":424},[128,46555,35544],{"class":266},[128,46557,270],{"class":134},[128,46559,34945],{"class":166},[128,46561,2665],{"class":138},[128,46563,46564],{"class":130,"line":434},[128,46565,35555],{"class":3814},[128,46567,46568,46570,46572,46574],{"class":130,"line":447},[128,46569,35560],{"class":266},[128,46571,270],{"class":134},[128,46573,4145],{"class":166},[128,46575,180],{"class":138},[128,46577,46578,46580,46582,46584,46586,46588],{"class":130,"line":459},[128,46579,35571],{"class":138},[128,46581,270],{"class":134},[128,46583,35003],{"class":138},[128,46585,35006],{"class":266},[128,46587,270],{"class":134},[128,46589,35582],{"class":138},[128,46591,46592,46594,46596,46598],{"class":130,"line":471},[128,46593,35587],{"class":266},[128,46595,270],{"class":134},[128,46597,3950],{"class":166},[128,46599,2665],{"class":138},[128,46601,46602,46604,46606,46608],{"class":130,"line":483},[128,46603,35598],{"class":266},[128,46605,270],{"class":134},[128,46607,34945],{"class":166},[128,46609,2665],{"class":138},[128,46611,46612,46614,46616,46618],{"class":130,"line":495},[128,46613,35609],{"class":266},[128,46615,270],{"class":134},[128,46617,4145],{"class":166},[128,46619,180],{"class":138},[128,46621,46622,46624],{"class":130,"line":507},[128,46623,587],{"class":134},[128,46625,35622],{"class":138},[128,46627,46628],{"class":130,"line":519},[128,46629,160],{"emptyLinePlaceholder":159},[128,46631,46632],{"class":130,"line":524},[128,46633,35631],{"class":3814},[128,46635,46636],{"class":130,"line":529},[128,46637,35636],{"class":3814},[128,46639,46640],{"class":130,"line":540},[128,46641,160],{"emptyLinePlaceholder":159},[128,46643,46644],{"class":130,"line":555},[128,46645,35645],{"class":3814},[128,46647,46648,46650,46652],{"class":130,"line":576},[128,46649,196],{"class":134},[128,46651,35652],{"class":199},[128,46653,35655],{"class":138},[128,46655,46656,46658,46660,46662,46664,46666,46668,46670,46672],{"class":130,"line":584},[128,46657,34709],{"class":138},[128,46659,270],{"class":134},[128,46661,33931],{"class":138},[128,46663,34716],{"class":176},[128,46665,5302],{"class":134},[128,46667,34721],{"class":138},[128,46669,5299],{"class":134},[128,46671,35674],{"class":176},[128,46673,180],{"class":138},[128,46675,46676],{"class":130,"line":593},[128,46677,160],{"emptyLinePlaceholder":159},[128,46679,46680],{"class":130,"line":598},[128,46681,160],{"emptyLinePlaceholder":159},[128,46683,46684],{"class":130,"line":603},[128,46685,35689],{"class":3814},[128,46687,46688],{"class":130,"line":614},[128,46689,35694],{"class":3814},[128,46691,46692],{"class":130,"line":625},[128,46693,35699],{"class":3814},[128,46695,46696,46698,46700,46702,46704,46706,46708],{"class":130,"line":633},[128,46697,35704],{"class":138},[128,46699,270],{"class":134},[128,46701,35709],{"class":138},[128,46703,35712],{"class":266},[128,46705,270],{"class":134},[128,46707,35717],{"class":166},[128,46709,180],{"class":138},[128,46711,46712],{"class":130,"line":649},[128,46713,160],{"emptyLinePlaceholder":159},[128,46715,46716],{"class":130,"line":660},[128,46717,35728],{"class":3814},[128,46719,46720,46722,46724],{"class":130,"line":673},[128,46721,35733],{"class":138},[128,46723,270],{"class":134},[128,46725,35738],{"class":138},[128,46727,46728],{"class":130,"line":678},[128,46729,160],{"emptyLinePlaceholder":159},[128,46731,46732],{"class":130,"line":683},[128,46733,35747],{"class":3814},[128,46735,46736,46738,46740],{"class":130,"line":693},[128,46737,34761],{"class":138},[128,46739,270],{"class":134},[128,46741,35756],{"class":138},[128,46743,46744],{"class":130,"line":702},[128,46745,35761],{"class":3814},[128,46747,46748],{"class":130,"line":709},[128,46749,35766],{"class":3814},[128,46751,46752],{"class":130,"line":723},[128,46753,35771],{"class":3814},[128,46755,46756,46758,46760],{"class":130,"line":732},[128,46757,35776],{"class":138},[128,46759,270],{"class":134},[128,46761,35781],{"class":138},[128,46763,46764],{"class":130,"line":744},[128,46765,160],{"emptyLinePlaceholder":159},[128,46767,46768],{"class":130,"line":749},[128,46769,160],{"emptyLinePlaceholder":159},[128,46771,46772],{"class":130,"line":754},[128,46773,35794],{"class":3814},[128,46775,46776],{"class":130,"line":764},[128,46777,35799],{"class":3814},[128,46779,46780,46782,46784],{"class":130,"line":782},[128,46781,35804],{"class":138},[128,46783,270],{"class":134},[128,46785,35809],{"class":166},[128,46787,46788],{"class":130,"line":787},[128,46789,35814],{"class":3814},[128,46791,46792,46794,46796],{"class":130,"line":795},[128,46793,35819],{"class":138},[128,46795,270],{"class":134},[128,46797,35824],{"class":138},[128,46799,46800],{"class":130,"line":807},[128,46801,35829],{"class":3814},[128,46803,46804,46806,46808],{"class":130,"line":813},[128,46805,35834],{"class":138},[128,46807,270],{"class":134},[128,46809,35824],{"class":138},[128,46811,46812],{"class":130,"line":818},[128,46813,35843],{"class":3814},[128,46815,46816,46818,46820],{"class":130,"line":835},[128,46817,35848],{"class":138},[128,46819,270],{"class":134},[128,46821,35824],{"class":138},[128,46823,46824],{"class":130,"line":851},[128,46825,35857],{"class":3814},[128,46827,46828,46830,46832],{"class":130,"line":867},[128,46829,35862],{"class":138},[128,46831,270],{"class":134},[128,46833,35824],{"class":138},[128,46835,46836],{"class":130,"line":872},[128,46837,160],{"emptyLinePlaceholder":159},[128,46839,46840],{"class":130,"line":878},[128,46841,35875],{"class":3814},[128,46843,46844,46846,46848],{"class":130,"line":887},[128,46845,35880],{"class":138},[128,46847,270],{"class":134},[128,46849,35885],{"class":138},[128,46851,46852],{"class":130,"line":896},[128,46853,160],{"emptyLinePlaceholder":159},[128,46855,46856],{"class":130,"line":905},[128,46857,160],{"emptyLinePlaceholder":159},[128,46859,46860],{"class":130,"line":914},[128,46861,35898],{"class":3814},[128,46863,46864,46866,46868,46870,46872],{"class":130,"line":920},[128,46865,543],{"class":134},[128,46867,35905],{"class":138},[128,46869,549],{"class":134},[128,46871,35910],{"class":166},[128,46873,35913],{"class":138},[128,46875,46876,46878,46880,46882,46884,46886,46888,46890,46892,46894,46896],{"class":130,"line":926},[128,46877,313],{"class":166},[128,46879,253],{"class":138},[128,46881,35922],{"class":176},[128,46883,35925],{"class":166},[128,46885,4333],{"class":176},[128,46887,35925],{"class":166},[128,46889,1376],{"class":176},[128,46891,35934],{"class":138},[128,46893,4281],{"class":134},[128,46895,2592],{"class":166},[128,46897,3034],{"class":138},[128,46899,46900,46902,46904,46906,46908,46910],{"class":130,"line":938},[128,46901,313],{"class":166},[128,46903,253],{"class":138},[128,46905,35949],{"class":176},[128,46907,4205],{"class":134},[128,46909,4196],{"class":166},[128,46911,180],{"class":138},[128,46913,46914],{"class":130,"line":943},[128,46915,160],{"emptyLinePlaceholder":159},[128,46917,46918],{"class":130,"line":948},[128,46919,35964],{"class":3814},[128,46921,46922],{"class":130,"line":958},[128,46923,35969],{"class":3814},[128,46925,46926,46928,46930],{"class":130,"line":974},[128,46927,35974],{"class":138},[128,46929,270],{"class":134},[128,46931,35809],{"class":166},[128,46933,46934],{"class":130,"line":985},[128,46935,35983],{"class":3814},[128,46937,46938,46940,46942],{"class":130,"line":990},[128,46939,35988],{"class":138},[128,46941,270],{"class":134},[128,46943,6656],{"class":166},[128,46945,46946],{"class":130,"line":1005},[128,46947,35997],{"class":3814},[128,46949,46950,46952,46954],{"class":130,"line":1017},[128,46951,36002],{"class":138},[128,46953,270],{"class":134},[128,46955,35809],{"class":166},[128,46957,46958],{"class":130,"line":1022},[128,46959,36011],{"class":3814},[128,46961,46962,46964,46966],{"class":130,"line":1027},[128,46963,36016],{"class":138},[128,46965,270],{"class":134},[128,46967,6656],{"class":166},[128,46969,46970],{"class":130,"line":1033},[128,46971,36025],{"class":3814},[128,46973,46974,46976,46978],{"class":130,"line":1038},[128,46975,36030],{"class":138},[128,46977,270],{"class":134},[128,46979,6656],{"class":166},[128,46981,46982],{"class":130,"line":1050},[128,46983,36039],{"class":3814},[128,46985,46986,46988,46990],{"class":130,"line":1055},[128,46987,36044],{"class":138},[128,46989,270],{"class":134},[128,46991,6656],{"class":166},[128,46993,46994],{"class":130,"line":1060},[128,46995,36053],{"class":3814},[128,46997,46998,47000,47002,47004,47006],{"class":130,"line":1070},[128,46999,2141],{"class":134},[128,47001,35070],{"class":138},[128,47003,549],{"class":134},[128,47005,35075],{"class":166},[128,47007,36066],{"class":138},[128,47009,47010],{"class":130,"line":1086},[128,47011,36071],{"class":3814},[128,47013,47014,47016,47018],{"class":130,"line":1095},[128,47015,36076],{"class":138},[128,47017,270],{"class":134},[128,47019,36081],{"class":138},[128,47021,47022],{"class":130,"line":1100},[128,47023,36086],{"class":3814},[128,47025,47026,47028,47030],{"class":130,"line":1113},[128,47027,36091],{"class":138},[128,47029,270],{"class":134},[128,47031,36096],{"class":138},[128,47033,47034],{"class":130,"line":1124},[128,47035,36101],{"class":3814},[128,47037,47038],{"class":130,"line":1129},[128,47039,36106],{"class":138},[128,47041,47042],{"class":130,"line":1134},[128,47043,36111],{"class":3814},[128,47045,47046],{"class":130,"line":1150},[128,47047,36116],{"class":3814},[128,47049,47050,47052,47054],{"class":130,"line":1164},[128,47051,36121],{"class":138},[128,47053,270],{"class":134},[128,47055,36126],{"class":138},[128,47057,47058],{"class":130,"line":1178},[128,47059,36131],{"class":3814},[128,47061,47062,47064,47066,47068,47070,47072,47074],{"class":130,"line":1183},[128,47063,36136],{"class":138},[128,47065,270],{"class":134},[128,47067,36141],{"class":138},[128,47069,36144],{"class":266},[128,47071,270],{"class":134},[128,47073,2592],{"class":166},[128,47075,180],{"class":138},[128,47077,47078],{"class":130,"line":1199},[128,47079,36155],{"class":3814},[128,47081,47082,47084,47086],{"class":130,"line":1214},[128,47083,36160],{"class":138},[128,47085,270],{"class":134},[128,47087,36165],{"class":138},[128,47089,47090],{"class":130,"line":1229},[128,47091,36170],{"class":3814},[128,47093,47094],{"class":130,"line":1234},[128,47095,36175],{"class":138},[128,47097,47098],{"class":130,"line":1239},[128,47099,36180],{"class":3814},[128,47101,47102],{"class":130,"line":1251},[128,47103,36185],{"class":138},[128,47105,47106],{"class":130,"line":1256},[128,47107,36190],{"class":3814},[128,47109,47110],{"class":130,"line":1261},[128,47111,36195],{"class":138},[128,47113,47114],{"class":130,"line":1271},[128,47115,36200],{"class":3814},[128,47117,47118,47120,47122,47124,47126,47128,47130],{"class":130,"line":1287},[128,47119,36205],{"class":138},[128,47121,13023],{"class":134},[128,47123,36210],{"class":138},[128,47125,4205],{"class":134},[128,47127,36215],{"class":138},[128,47129,2452],{"class":166},[128,47131,180],{"class":138},[128,47133,47134],{"class":130,"line":1296},[128,47135,36224],{"class":3814},[128,47137,47138,47140,47142,47144,47146],{"class":130,"line":1301},[128,47139,36229],{"class":138},[128,47141,13023],{"class":134},[128,47143,36234],{"class":138},[128,47145,570],{"class":134},[128,47147,36239],{"class":138},[128,47149,47150],{"class":130,"line":1314},[128,47151,36244],{"class":3814},[128,47153,47154,47156,47158,47160,47162],{"class":130,"line":1325},[128,47155,36249],{"class":138},[128,47157,13023],{"class":134},[128,47159,36215],{"class":138},[128,47161,2452],{"class":166},[128,47163,180],{"class":138},[128,47165,47166],{"class":130,"line":1330},[128,47167,36262],{"class":3814},[128,47169,47170,47172,47174,47176,47178],{"class":130,"line":1335},[128,47171,2141],{"class":134},[128,47173,36269],{"class":138},[128,47175,549],{"class":134},[128,47177,35075],{"class":166},[128,47179,36276],{"class":138},[128,47181,47182],{"class":130,"line":1341},[128,47183,36281],{"class":3814},[128,47185,47186,47188,47190],{"class":130,"line":1346},[128,47187,36076],{"class":138},[128,47189,270],{"class":134},[128,47191,36081],{"class":138},[128,47193,47194],{"class":130,"line":1351},[128,47195,36294],{"class":3814},[128,47197,47198,47200,47202],{"class":130,"line":1362},[128,47199,36091],{"class":138},[128,47201,270],{"class":134},[128,47203,36096],{"class":138},[128,47205,47206],{"class":130,"line":1370},[128,47207,36307],{"class":3814},[128,47209,47210],{"class":130,"line":1397},[128,47211,36312],{"class":138},[128,47213,47214],{"class":130,"line":1417},[128,47215,39748],{"class":3814},[128,47217,47218,47220],{"class":130,"line":1437},[128,47219,36317],{"class":134},[128,47221,36320],{"class":138},[128,47223,47224],{"class":130,"line":1458},[128,47225,36325],{"class":3814},[128,47227,47228,47230,47232],{"class":130,"line":1464},[128,47229,39763],{"class":138},[128,47231,270],{"class":134},[128,47233,36126],{"class":138},[128,47235,47236],{"class":130,"line":1469},[128,47237,36340],{"class":3814},[128,47239,47240,47242,47244,47246,47248,47250,47252],{"class":130,"line":1474},[128,47241,39776],{"class":138},[128,47243,270],{"class":134},[128,47245,36141],{"class":138},[128,47247,36144],{"class":266},[128,47249,270],{"class":134},[128,47251,2592],{"class":166},[128,47253,180],{"class":138},[128,47255,47256],{"class":130,"line":1484},[128,47257,36363],{"class":3814},[128,47259,47260,47262,47264],{"class":130,"line":1493},[128,47261,39797],{"class":138},[128,47263,270],{"class":134},[128,47265,36165],{"class":138},[128,47267,47268],{"class":130,"line":1505},[128,47269,36378],{"class":3814},[128,47271,47272,47274,47276,47278,47280,47282,47284],{"class":130,"line":1510},[128,47273,39810],{"class":138},[128,47275,13023],{"class":134},[128,47277,39815],{"class":138},[128,47279,4205],{"class":134},[128,47281,36215],{"class":138},[128,47283,2452],{"class":166},[128,47285,180],{"class":138},[128,47287,47288,47290,47292,47294,47296],{"class":130,"line":1515},[128,47289,39828],{"class":138},[128,47291,13023],{"class":134},[128,47293,36234],{"class":138},[128,47295,570],{"class":134},[128,47297,36239],{"class":138},[128,47299,47300],{"class":130,"line":1543},[128,47301,39841],{"class":3814},[128,47303,47304,47306,47308,47310,47312],{"class":130,"line":1554},[128,47305,39846],{"class":138},[128,47307,13023],{"class":134},[128,47309,36215],{"class":138},[128,47311,2452],{"class":166},[128,47313,180],{"class":138},[128,47315,47316],{"class":130,"line":1560},[128,47317,36435],{"class":3814},[128,47319,47320],{"class":130,"line":1565},[128,47321,36440],{"class":3814},[128,47323,47324,47326,47328],{"class":130,"line":1570},[128,47325,36445],{"class":138},[128,47327,4333],{"class":134},[128,47329,36450],{"class":138},[128,47331,47332],{"class":130,"line":1580},[128,47333,36455],{"class":3814},[128,47335,47336],{"class":130,"line":1591},[128,47337,36460],{"class":3814},[128,47339,47340,47342,47344],{"class":130,"line":1596},[128,47341,36465],{"class":138},[128,47343,4333],{"class":134},[128,47345,36450],{"class":138},[128,47347,47348],{"class":130,"line":1605},[128,47349,36474],{"class":3814},[128,47351,47352,47354,47356],{"class":130,"line":1611},[128,47353,36479],{"class":138},[128,47355,4333],{"class":134},[128,47357,36484],{"class":138},[128,47359,47360],{"class":130,"line":1628},[128,47361,36489],{"class":3814},[128,47363,47364,47366,47368],{"class":130,"line":1633},[128,47365,36494],{"class":138},[128,47367,4333],{"class":134},[128,47369,36484],{"class":138},[128,47371,47372],{"class":130,"line":1648},[128,47373,160],{"emptyLinePlaceholder":159},[128,47375,47376],{"class":130,"line":1654},[128,47377,36507],{"class":3814},[128,47379,47380,47382,47384,47386,47388,47390,47392,47394,47396,47398,47400,47402,47404,47406,47408,47410,47412,47414,47416,47418],{"class":130,"line":1669},[128,47381,313],{"class":166},[128,47383,253],{"class":138},[128,47385,7160],{"class":176},[128,47387,35925],{"class":166},[128,47389,36520],{"class":176},[128,47391,1379],{"class":166},[128,47393,36525],{"class":134},[128,47395,1453],{"class":166},[128,47397,36530],{"class":176},[128,47399,1379],{"class":166},[128,47401,36525],{"class":134},[128,47403,1453],{"class":166},[128,47405,7160],{"class":176},[128,47407,36541],{"class":138},[128,47409,4281],{"class":134},[128,47411,2592],{"class":166},[128,47413,36548],{"class":138},[128,47415,4281],{"class":134},[128,47417,2592],{"class":166},[128,47419,36555],{"class":138},[128,47421,47422,47424,47426,47428,47430,47432,47434,47436,47438,47440,47442,47444,47446,47448,47450,47452,47454,47456,47458,47460],{"class":130,"line":1675},[128,47423,313],{"class":166},[128,47425,253],{"class":138},[128,47427,7160],{"class":176},[128,47429,35925],{"class":166},[128,47431,36568],{"class":176},[128,47433,1379],{"class":166},[128,47435,36525],{"class":134},[128,47437,1453],{"class":166},[128,47439,36577],{"class":176},[128,47441,1379],{"class":166},[128,47443,36525],{"class":134},[128,47445,1453],{"class":166},[128,47447,7160],{"class":176},[128,47449,36588],{"class":138},[128,47451,4281],{"class":134},[128,47453,2592],{"class":166},[128,47455,36595],{"class":138},[128,47457,4281],{"class":134},[128,47459,2592],{"class":166},[128,47461,36555],{"class":138},[128,47463,47464],{"class":130,"line":1689},[128,47465,160],{"emptyLinePlaceholder":159},[128,47467,47468],{"class":130,"line":1695},[128,47469,36610],{"class":3814},[128,47471,47472,47474,47476,47478,47480,47482,47484],{"class":130,"line":1709},[128,47473,558],{"class":134},[128,47475,36617],{"class":138},[128,47477,4281],{"class":134},[128,47479,2592],{"class":166},[128,47481,1388],{"class":138},[128,47483,4705],{"class":134},[128,47485,36628],{"class":138},[128,47487,47488],{"class":130,"line":1715},[128,47489,36633],{"class":3814},[128,47491,47492,47494,47496,47498,47500,47502,47504],{"class":130,"line":1729},[128,47493,36638],{"class":138},[128,47495,3798],{"class":166},[128,47497,270],{"class":134},[128,47499,36645],{"class":138},[128,47501,4281],{"class":134},[128,47503,2592],{"class":166},[128,47505,2376],{"class":138},[128,47507,47508],{"class":130,"line":1735},[128,47509,36656],{"class":3814},[128,47511,47512],{"class":130,"line":1749},[128,47513,36661],{"class":3814},[128,47515,47516,47518,47520],{"class":130,"line":1761},[128,47517,36666],{"class":138},[128,47519,270],{"class":134},[128,47521,35781],{"class":138},[128,47523,47524],{"class":130,"line":1767},[128,47525,160],{"emptyLinePlaceholder":159},[128,47527,47528],{"class":130,"line":1775},[128,47529,36679],{"class":3814},[128,47531,47532,47534,47536,47538,47540],{"class":130,"line":1787},[128,47533,36684],{"class":138},[128,47535,270],{"class":134},[128,47537,36689],{"class":138},[128,47539,4281],{"class":134},[128,47541,36694],{"class":138},[128,47543,47544,47546,47548,47550,47552,47554,47556,47558,47560,47562,47564,47566,47568,47570,47572,47574,47576,47578],{"class":130,"line":1792},[128,47545,313],{"class":166},[128,47547,253],{"class":138},[128,47549,36703],{"class":176},[128,47551,1379],{"class":166},[128,47553,36708],{"class":134},[128,47555,1453],{"class":166},[128,47557,4293],{"class":176},[128,47559,1379],{"class":166},[128,47561,36708],{"class":134},[128,47563,1453],{"class":166},[128,47565,36721],{"class":176},[128,47567,36724],{"class":138},[128,47569,36727],{"class":134},[128,47571,4654],{"class":166},[128,47573,36732],{"class":138},[128,47575,4078],{"class":134},[128,47577,4654],{"class":166},[128,47579,3034],{"class":138},[128,47581,47582],{"class":130,"line":1797},[128,47583,40125],{"class":3814},[128,47585,47586],{"class":130,"line":1814},[128,47587,40130],{"class":3814},[128,47589,47590,47592,47594],{"class":130,"line":36751},[128,47591,40135],{"class":138},[128,47593,36763],{"class":176},[128,47595,180],{"class":138},[128,47597,47598],{"class":130,"line":36757},[128,47599,36783],{"class":3814},[128,47601,47602,47604,47606,47608,47610,47612],{"class":130,"line":36768},[128,47603,36789],{"class":138},[128,47605,270],{"class":134},[128,47607,36794],{"class":138},[128,47609,36797],{"class":266},[128,47611,270],{"class":134},[128,47613,5157],{"class":138},[128,47615,47616,47618,47620,47622],{"class":130,"line":36774},[128,47617,36807],{"class":176},[128,47619,4607],{"class":138},[128,47621,36812],{"class":166},[128,47623,36815],{"class":138},[128,47625,47626,47628],{"class":130,"line":36780},[128,47627,36821],{"class":176},[128,47629,36824],{"class":138},[128,47631,47632,47634],{"class":130,"line":36786},[128,47633,36830],{"class":176},[128,47635,36833],{"class":138},[128,47637,47638,47640],{"class":130,"line":36804},[128,47639,36839],{"class":176},[128,47641,36842],{"class":138},[128,47643,47644,47646],{"class":130,"line":36818},[128,47645,36848],{"class":176},[128,47647,36851],{"class":138},[128,47649,47650],{"class":130,"line":36827},[128,47651,917],{"class":138},[128,47653,47654],{"class":130,"line":36836},[128,47655,36862],{"class":3814},[128,47657,47658,47660],{"class":130,"line":36845},[128,47659,587],{"class":134},[128,47661,36870],{"class":138},[128,47663,47664],{"class":130,"line":36854},[128,47665,160],{"emptyLinePlaceholder":159},[128,47667,47668],{"class":130,"line":36859},[128,47669,36881],{"class":3814},[128,47671,47672,47674,47676],{"class":130,"line":36865},[128,47673,196],{"class":134},[128,47675,36889],{"class":199},[128,47677,36892],{"class":138},[128,47679,47680],{"class":130,"line":36873},[128,47681,36898],{"class":3814},[128,47683,47684,47686,47688,47690,47692,47694,47696,47698],{"class":130,"line":36878},[128,47685,36904],{"class":138},[128,47687,35162],{"class":266},[128,47689,270],{"class":134},[128,47691,253],{"class":138},[128,47693,4247],{"class":166},[128,47695,4128],{"class":138},[128,47697,4043],{"class":166},[128,47699,3034],{"class":138},[128,47701,47702],{"class":130,"line":36884},[128,47703,36924],{"class":3814},[128,47705,47706],{"class":130,"line":36895},[128,47707,36930],{"class":3814},[128,47709,47710],{"class":130,"line":36901},[128,47711,36936],{"class":3814},[128,47713,47714,47716,47718,47720,47722,47724,47726],{"class":130,"line":36921},[128,47715,35196],{"class":138},[128,47717,2592],{"class":166},[128,47719,4128],{"class":138},[128,47721,409],{"class":166},[128,47723,4128],{"class":138},[128,47725,2592],{"class":166},[128,47727,180],{"class":138},[128,47729,47730],{"class":130,"line":36927},[128,47731,36959],{"class":3814},[128,47733,47734],{"class":130,"line":36933},[128,47735,36965],{"class":3814},[128,47737,47738],{"class":130,"line":36939},[128,47739,36971],{"class":3814},[128,47741,47742],{"class":130,"line":36956},[128,47743,36977],{"class":3814},[128,47745,47746],{"class":130,"line":36962},[128,47747,36983],{"class":3814},[128,47749,47750,47752,47754,47756,47758,47760,47762,47764,47766],{"class":130,"line":36968},[128,47751,36989],{"class":138},[128,47753,36992],{"class":176},[128,47755,36995],{"class":138},[128,47757,36998],{"class":176},[128,47759,4128],{"class":138},[128,47761,37003],{"class":266},[128,47763,270],{"class":134},[128,47765,37008],{"class":176},[128,47767,180],{"class":138},[128,47769,47770,47772,47774,47776,47778,47780,47782,47784,47786],{"class":130,"line":36974},[128,47771,36989],{"class":138},[128,47773,36992],{"class":176},[128,47775,37020],{"class":138},[128,47777,37023],{"class":176},[128,47779,4128],{"class":138},[128,47781,37003],{"class":266},[128,47783,270],{"class":134},[128,47785,37032],{"class":176},[128,47787,180],{"class":138},[128,47789,47790],{"class":130,"line":36980},[128,47791,37040],{"class":3814},[128,47793,47794],{"class":130,"line":36986},[128,47795,37046],{"class":138},[128,47797,47798],{"class":130,"line":37013},[128,47799,37052],{"class":3814},[128,47801,47802,47804,47806],{"class":130,"line":37037},[128,47803,37058],{"class":138},[128,47805,37061],{"class":176},[128,47807,180],{"class":138},[128,47809,47810,47812,47814],{"class":130,"line":37043},[128,47811,37069],{"class":138},[128,47813,37072],{"class":176},[128,47815,180],{"class":138},[128,47817,47818],{"class":130,"line":37049},[128,47819,37080],{"class":3814},[128,47821,47822,47824,47826,47828,47830,47832,47834],{"class":130,"line":37055},[128,47823,35196],{"class":138},[128,47825,2592],{"class":166},[128,47827,4128],{"class":138},[128,47829,409],{"class":166},[128,47831,4128],{"class":138},[128,47833,409],{"class":166},[128,47835,180],{"class":138},[128,47837,47838,47840,47842,47844,47846,47848,47850,47852,47854],{"class":130,"line":37066},[128,47839,36989],{"class":138},[128,47841,36992],{"class":176},[128,47843,37107],{"class":138},[128,47845,36998],{"class":176},[128,47847,4128],{"class":138},[128,47849,37003],{"class":266},[128,47851,270],{"class":134},[128,47853,37118],{"class":176},[128,47855,180],{"class":138},[128,47857,47858,47860,47862,47864,47866,47868,47870,47872,47874],{"class":130,"line":37077},[128,47859,36989],{"class":138},[128,47861,36992],{"class":176},[128,47863,37130],{"class":138},[128,47865,37023],{"class":176},[128,47867,4128],{"class":138},[128,47869,37003],{"class":266},[128,47871,270],{"class":134},[128,47873,37141],{"class":176},[128,47875,180],{"class":138},[128,47877,47878],{"class":130,"line":37083},[128,47879,37149],{"class":3814},[128,47881,47882],{"class":130,"line":37100},[128,47883,37046],{"class":138},[128,47885,47886,47888,47890],{"class":130,"line":37123},[128,47887,37058],{"class":138},[128,47889,36992],{"class":176},[128,47891,180],{"class":138},[128,47893,47894,47896,47898],{"class":130,"line":37146},[128,47895,37069],{"class":138},[128,47897,37171],{"class":176},[128,47899,180],{"class":138},[128,47901,47902],{"class":130,"line":37152},[128,47903,37179],{"class":138},[128,47905,47906],{"class":130,"line":37157},[128,47907,160],{"emptyLinePlaceholder":159},[128,47909,47910],{"class":130,"line":37166},[128,47911,37190],{"class":3814},[128,47913,47914,47916,47918,47920,47922],{"class":130,"line":37176},[128,47915,1800],{"class":134},[128,47917,1803],{"class":166},[128,47919,570],{"class":134},[128,47921,34697],{"class":176},[128,47923,241],{"class":138},[128,47925,47926],{"class":130,"line":37182},[128,47927,37209],{"class":3814},[128,47929,47930,47933,47935],{"class":130,"line":37187},[128,47931,47932],{"class":138},"    GoogLeNet",[128,47934,270],{"class":134},[128,47936,47937],{"class":138},"GoogLeNet(Inception)\n",[128,47939,47940,47942,47944],{"class":130,"line":37193},[128,47941,37226],{"class":138},[128,47943,270],{"class":134},[128,47945,37231],{"class":138},[128,47947,47948,47950,47952,47955,47957,47959,47961],{"class":130,"line":37206},[128,47949,36789],{"class":138},[128,47951,270],{"class":134},[128,47953,47954],{"class":138},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[128,47956,37244],{"class":266},[128,47958,270],{"class":134},[128,47960,4696],{"class":166},[128,47962,180],{"class":138},[128,47964,47965],{"class":130,"line":37212},[128,47966,37256],{"class":138},[26,47968,47969],{"start":156},[29,47970,43960],{},[106,47972,47974],{"className":122,"code":47973,"language":124,"meta":112,"style":112},"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",[114,47975,47976,47982,47992,48002,48006,48016,48027,48031,48035,48039,48047,48063,48073,48089,48099,48113,48117,48127,48137,48147,48153,48157,48161,48169,48173,48189,48197,48201,48205,48213,48221,48225,48229,48233,48237,48243,48247,48257,48265,48273,48277,48281,48285,48293,48297,48313,48317,48321,48325,48337,48341,48353,48357,48361,48373,48377,48387,48391,48395,48407,48411,48419,48423,48427,48435,48439,48447,48451,48455,48459,48463,48467,48483,48491,48495,48499,48547,48553,48557,48567,48575,48583,48587,48591,48595,48599,48607,48611,48627,48631,48639,48647],{"__ignoreMap":112},[128,47977,47978,47980],{"class":130,"line":131},[128,47979,135],{"class":134},[128,47981,33876],{"class":138},[128,47983,47984,47986,47988,47990],{"class":130,"line":142},[128,47985,135],{"class":134},[128,47987,34885],{"class":138},[128,47989,279],{"class":134},[128,47991,34890],{"class":138},[128,47993,47994,47996,47998,48000],{"class":130,"line":156},[128,47995,145],{"class":134},[128,47997,34868],{"class":138},[128,47999,135],{"class":134},[128,48001,34873],{"class":138},[128,48003,48004],{"class":130,"line":163},[128,48005,37317],{"class":3814},[128,48007,48008,48010,48012,48014],{"class":130,"line":183},[128,48009,145],{"class":134},[128,48011,34839],{"class":138},[128,48013,135],{"class":134},[128,48015,34844],{"class":138},[128,48017,48018,48020,48022,48024],{"class":130,"line":188},[128,48019,145],{"class":134},[128,48021,35383],{"class":138},[128,48023,135],{"class":134},[128,48025,48026],{"class":138}," GoogLeNet,Inception\n",[128,48028,48029],{"class":130,"line":193},[128,48030,160],{"emptyLinePlaceholder":159},[128,48032,48033],{"class":130,"line":206},[128,48034,160],{"emptyLinePlaceholder":159},[128,48036,48037],{"class":130,"line":221},[128,48038,37346],{"class":3814},[128,48040,48041,48043,48045],{"class":130,"line":230},[128,48042,196],{"class":134},[128,48044,37353],{"class":199},[128,48046,203],{"class":138},[128,48048,48049,48051,48053,48055,48057,48059,48061],{"class":130,"line":235},[128,48050,37360],{"class":138},[128,48052,270],{"class":134},[128,48054,34925],{"class":138},[128,48056,34928],{"class":266},[128,48058,270],{"class":134},[128,48060,34933],{"class":176},[128,48062,2665],{"class":138},[128,48064,48065,48067,48069,48071],{"class":130,"line":244},[128,48066,37377],{"class":266},[128,48068,270],{"class":134},[128,48070,399],{"class":166},[128,48072,2665],{"class":138},[128,48074,48075,48077,48079,48081,48083,48085,48087],{"class":130,"line":287},[128,48076,37388],{"class":266},[128,48078,270],{"class":134},[128,48080,34962],{"class":138},[128,48082,34965],{"class":266},[128,48084,270],{"class":134},[128,48086,38841],{"class":166},[128,48088,34973],{"class":138},[128,48090,48091,48093,48095,48097],{"class":130,"line":301},[128,48092,37405],{"class":266},[128,48094,270],{"class":134},[128,48096,34945],{"class":166},[128,48098,180],{"class":138},[128,48100,48101,48103,48105,48107,48109,48111],{"class":130,"line":310},[128,48102,37416],{"class":138},[128,48104,270],{"class":134},[128,48106,35003],{"class":138},[128,48108,35006],{"class":266},[128,48110,270],{"class":134},[128,48112,37427],{"class":138},[128,48114,48115],{"class":130,"line":323},[128,48116,37432],{"class":3814},[128,48118,48119,48121,48123,48125],{"class":130,"line":330},[128,48120,37437],{"class":266},[128,48122,270],{"class":134},[128,48124,2592],{"class":166},[128,48126,2665],{"class":138},[128,48128,48129,48131,48133,48135],{"class":130,"line":335},[128,48130,37448],{"class":266},[128,48132,270],{"class":134},[128,48134,34945],{"class":166},[128,48136,2665],{"class":138},[128,48138,48139,48141,48143,48145],{"class":130,"line":340},[128,48140,37459],{"class":266},[128,48142,270],{"class":134},[128,48144,2452],{"class":166},[128,48146,180],{"class":138},[128,48148,48149,48151],{"class":130,"line":351},[128,48150,587],{"class":134},[128,48152,37472],{"class":138},[128,48154,48155],{"class":130,"line":384},[128,48156,160],{"emptyLinePlaceholder":159},[128,48158,48159],{"class":130,"line":414},[128,48160,37481],{"class":3814},[128,48162,48163,48165,48167],{"class":130,"line":419},[128,48164,196],{"class":134},[128,48166,37488],{"class":199},[128,48168,37491],{"class":138},[128,48170,48171],{"class":130,"line":424},[128,48172,37496],{"class":3814},[128,48174,48175,48177,48179,48181,48183,48185,48187],{"class":130,"line":434},[128,48176,34709],{"class":138},[128,48178,270],{"class":134},[128,48180,34716],{"class":176},[128,48182,5302],{"class":134},[128,48184,34721],{"class":138},[128,48186,5299],{"class":134},[128,48188,37513],{"class":176},[128,48190,48191,48193,48195],{"class":130,"line":447},[128,48192,34761],{"class":138},[128,48194,270],{"class":134},[128,48196,35756],{"class":138},[128,48198,48199],{"class":130,"line":459},[128,48200,160],{"emptyLinePlaceholder":159},[128,48202,48203],{"class":130,"line":471},[128,48204,37530],{"class":3814},[128,48206,48207,48209,48211],{"class":130,"line":483},[128,48208,37535],{"class":138},[128,48210,270],{"class":134},[128,48212,35809],{"class":166},[128,48214,48215,48217,48219],{"class":130,"line":495},[128,48216,37544],{"class":138},[128,48218,270],{"class":134},[128,48220,6656],{"class":166},[128,48222,48223],{"class":130,"line":507},[128,48224,160],{"emptyLinePlaceholder":159},[128,48226,48227],{"class":130,"line":519},[128,48228,37557],{"class":3814},[128,48230,48231],{"class":130,"line":524},[128,48232,37562],{"class":3814},[128,48234,48235],{"class":130,"line":529},[128,48236,37567],{"class":3814},[128,48238,48239,48241],{"class":130,"line":540},[128,48240,354],{"class":134},[128,48242,36320],{"class":138},[128,48244,48245],{"class":130,"line":555},[128,48246,37578],{"class":3814},[128,48248,48249,48251,48253,48255],{"class":130,"line":576},[128,48250,2141],{"class":134},[128,48252,37585],{"class":138},[128,48254,549],{"class":134},[128,48256,37590],{"class":138},[128,48258,48259,48261,48263],{"class":130,"line":584},[128,48260,37595],{"class":138},[128,48262,270],{"class":134},[128,48264,37600],{"class":138},[128,48266,48267,48269,48271],{"class":130,"line":593},[128,48268,37605],{"class":138},[128,48270,270],{"class":134},[128,48272,37610],{"class":138},[128,48274,48275],{"class":130,"line":598},[128,48276,37615],{"class":3814},[128,48278,48279],{"class":130,"line":603},[128,48280,36312],{"class":138},[128,48282,48283],{"class":130,"line":614},[128,48284,37624],{"class":3814},[128,48286,48287,48289,48291],{"class":130,"line":625},[128,48288,36121],{"class":138},[128,48290,270],{"class":134},[128,48292,37633],{"class":138},[128,48294,48295],{"class":130,"line":633},[128,48296,37638],{"class":3814},[128,48298,48299,48301,48303,48305,48307,48309,48311],{"class":130,"line":649},[128,48300,36136],{"class":138},[128,48302,270],{"class":134},[128,48304,36141],{"class":138},[128,48306,36144],{"class":266},[128,48308,270],{"class":134},[128,48310,2592],{"class":166},[128,48312,180],{"class":138},[128,48314,48315],{"class":130,"line":660},[128,48316,37659],{"class":3814},[128,48318,48319],{"class":130,"line":673},[128,48320,37664],{"class":3814},[128,48322,48323],{"class":130,"line":678},[128,48324,37669],{"class":3814},[128,48326,48327,48329,48331,48333,48335],{"class":130,"line":683},[128,48328,37674],{"class":138},[128,48330,13023],{"class":134},[128,48332,36234],{"class":138},[128,48334,570],{"class":134},[128,48336,37683],{"class":138},[128,48338,48339],{"class":130,"line":693},[128,48340,37688],{"class":3814},[128,48342,48343,48345,48347,48349,48351],{"class":130,"line":702},[128,48344,37693],{"class":138},[128,48346,13023],{"class":134},[128,48348,37698],{"class":138},[128,48350,2452],{"class":166},[128,48352,180],{"class":138},[128,48354,48355],{"class":130,"line":709},[128,48356,160],{"emptyLinePlaceholder":159},[128,48358,48359],{"class":130,"line":723},[128,48360,37711],{"class":3814},[128,48362,48363,48365,48367,48369,48371],{"class":130,"line":732},[128,48364,37716],{"class":138},[128,48366,270],{"class":134},[128,48368,37721],{"class":138},[128,48370,4333],{"class":134},[128,48372,37726],{"class":138},[128,48374,48375],{"class":130,"line":744},[128,48376,37731],{"class":3814},[128,48378,48379,48381,48383,48385],{"class":130,"line":749},[128,48380,313],{"class":166},[128,48382,253],{"class":138},[128,48384,37740],{"class":176},[128,48386,37743],{"class":138},[128,48388,48389],{"class":130,"line":754},[128,48390,160],{"emptyLinePlaceholder":159},[128,48392,48393],{"class":130,"line":764},[128,48394,37752],{"class":3814},[128,48396,48397,48399,48401,48403,48405],{"class":130,"line":782},[128,48398,1800],{"class":134},[128,48400,1803],{"class":166},[128,48402,570],{"class":134},[128,48404,34697],{"class":176},[128,48406,241],{"class":138},[128,48408,48409],{"class":130,"line":787},[128,48410,37769],{"class":3814},[128,48412,48413,48415,48417],{"class":130,"line":795},[128,48414,34761],{"class":138},[128,48416,270],{"class":134},[128,48418,47937],{"class":138},[128,48420,48421],{"class":130,"line":807},[128,48422,37782],{"class":3814},[128,48424,48425],{"class":130,"line":813},[128,48426,37787],{"class":3814},[128,48428,48429,48431,48433],{"class":130,"line":818},[128,48430,37792],{"class":138},[128,48432,37795],{"class":176},[128,48434,3034],{"class":138},[128,48436,48437],{"class":130,"line":835},[128,48438,37802],{"class":3814},[128,48440,48441,48443,48445],{"class":130,"line":851},[128,48442,37416],{"class":138},[128,48444,270],{"class":134},[128,48446,37811],{"class":138},[128,48448,48449],{"class":130,"line":867},[128,48450,37816],{"class":3814},[128,48452,48453],{"class":130,"line":872},[128,48454,37821],{"class":138},[128,48456,48457],{"class":130,"line":878},[128,48458,160],{"emptyLinePlaceholder":159},[128,48460,48461],{"class":130,"line":887},[128,48462,37830],{"class":3814},[128,48464,48465],{"class":130,"line":896},[128,48466,37835],{"class":3814},[128,48468,48469,48471,48473,48475,48477,48479,48481],{"class":130,"line":905},[128,48470,34709],{"class":138},[128,48472,270],{"class":134},[128,48474,34716],{"class":176},[128,48476,5302],{"class":134},[128,48478,34721],{"class":138},[128,48480,5299],{"class":134},[128,48482,37513],{"class":176},[128,48484,48485,48487,48489],{"class":130,"line":914},[128,48486,34761],{"class":138},[128,48488,270],{"class":134},[128,48490,35756],{"class":138},[128,48492,48493],{"class":130,"line":920},[128,48494,37864],{"class":3814},[128,48496,48497],{"class":130,"line":926},[128,48498,37869],{"class":3814},[128,48500,48501,48503,48505,48507,48509,48511,48513,48515,48517,48519,48521,48523,48525,48527,48529,48531,48533,48535,48537,48539,48541,48543,48545],{"class":130,"line":938},[128,48502,37874],{"class":138},[128,48504,270],{"class":134},[128,48506,4638],{"class":138},[128,48508,37881],{"class":176},[128,48510,4128],{"class":138},[128,48512,37886],{"class":176},[128,48514,4128],{"class":138},[128,48516,37891],{"class":176},[128,48518,4128],{"class":138},[128,48520,37896],{"class":176},[128,48522,4128],{"class":138},[128,48524,37901],{"class":176},[128,48526,4128],{"class":138},[128,48528,37906],{"class":176},[128,48530,4128],{"class":138},[128,48532,37911],{"class":176},[128,48534,4128],{"class":138},[128,48536,37916],{"class":176},[128,48538,4128],{"class":138},[128,48540,37921],{"class":176},[128,48542,4128],{"class":138},[128,48544,37926],{"class":176},[128,48546,2376],{"class":138},[128,48548,48549,48551],{"class":130,"line":943},[128,48550,354],{"class":134},[128,48552,36320],{"class":138},[128,48554,48555],{"class":130,"line":948},[128,48556,37939],{"class":3814},[128,48558,48559,48561,48563,48565],{"class":130,"line":958},[128,48560,2141],{"class":134},[128,48562,37946],{"class":138},[128,48564,549],{"class":134},[128,48566,37590],{"class":138},[128,48568,48569,48571,48573],{"class":130,"line":974},[128,48570,36076],{"class":138},[128,48572,270],{"class":134},[128,48574,36081],{"class":138},[128,48576,48577,48579,48581],{"class":130,"line":985},[128,48578,36091],{"class":138},[128,48580,270],{"class":134},[128,48582,36096],{"class":138},[128,48584,48585],{"class":130,"line":990},[128,48586,160],{"emptyLinePlaceholder":159},[128,48588,48589],{"class":130,"line":1005},[128,48590,37975],{"class":3814},[128,48592,48593],{"class":130,"line":1017},[128,48594,36312],{"class":138},[128,48596,48597],{"class":130,"line":1022},[128,48598,37984],{"class":3814},[128,48600,48601,48603,48605],{"class":130,"line":1027},[128,48602,36121],{"class":138},[128,48604,270],{"class":134},[128,48606,36126],{"class":138},[128,48608,48609],{"class":130,"line":1033},[128,48610,37997],{"class":3814},[128,48612,48613,48615,48617,48619,48621,48623,48625],{"class":130,"line":1038},[128,48614,36136],{"class":138},[128,48616,270],{"class":134},[128,48618,36141],{"class":138},[128,48620,36144],{"class":266},[128,48622,270],{"class":134},[128,48624,2592],{"class":166},[128,48626,180],{"class":138},[128,48628,48629],{"class":130,"line":1050},[128,48630,38018],{"class":3814},[128,48632,48633,48635,48637],{"class":130,"line":1055},[128,48634,38023],{"class":138},[128,48636,270],{"class":134},[128,48638,38028],{"class":138},[128,48640,48641,48643,48645],{"class":130,"line":1060},[128,48642,38033],{"class":138},[128,48644,270],{"class":134},[128,48646,38038],{"class":138},[128,48648,48649,48651,48653,48655,48657,48659,48661,48663],{"class":130,"line":1070},[128,48650,663],{"class":166},[128,48652,253],{"class":138},[128,48654,38047],{"class":176},[128,48656,38050],{"class":138},[128,48658,38053],{"class":176},[128,48660,4128],{"class":138},[128,48662,38058],{"class":176},[128,48664,38061],{"class":138},[72,48666,48668],{"id":48667},"_24训练自己的数据集","2.4.训练自己的数据集",[19,48670,48671],{},"猫狗分类任务",[19,48673,48674],{},"划分数据集和验证集",[106,48676,48678],{"className":122,"code":48677,"language":124,"meta":112,"style":112},"# 创建脚本，用于划分数据集和验证集\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",[114,48679,48680,48685,48692,48697,48708,48715,48719,48729,48742,48751,48755,48760,48770,48790,48794,48799,48809,48820,48833,48837,48842,48851,48861,48872,48876,48881,48891,48895,48900,48905,48910,48915,48920,48924,48934,48961,48974,48986,49013,49018,49023,49037,49042,49054,49069,49084,49092,49096,49101,49107,49119,49132,49137,49142,49147,49197,49203,49207],{"__ignoreMap":112},[128,48681,48682],{"class":130,"line":131},[128,48683,48684],{"class":3814},"# 创建脚本，用于划分数据集和验证集\n",[128,48686,48687,48689],{"class":130,"line":142},[128,48688,135],{"class":134},[128,48690,48691],{"class":138}," os\n",[128,48693,48694],{"class":130,"line":156},[128,48695,48696],{"class":3814},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[128,48698,48699,48701,48704,48706],{"class":130,"line":163},[128,48700,145],{"class":134},[128,48702,48703],{"class":138}," shutil ",[128,48705,135],{"class":134},[128,48707,35291],{"class":138},[128,48709,48710,48712],{"class":130,"line":183},[128,48711,135],{"class":134},[128,48713,48714],{"class":138}," random\n",[128,48716,48717],{"class":130,"line":188},[128,48718,160],{"emptyLinePlaceholder":159},[128,48720,48721,48723,48726],{"class":130,"line":193},[128,48722,196],{"class":134},[128,48724,48725],{"class":199}," mkfile",[128,48727,48728],{"class":138},"(file):\n",[128,48730,48731,48733,48735,48738,48740],{"class":130,"line":206},[128,48732,209],{"class":134},[128,48734,212],{"class":134},[128,48736,48737],{"class":138}," os.path.exists(",[128,48739,296],{"class":266},[128,48741,34264],{"class":138},[128,48743,48744,48747,48749],{"class":130,"line":221},[128,48745,48746],{"class":138},"        os.makedirs(",[128,48748,296],{"class":266},[128,48750,180],{"class":138},[128,48752,48753],{"class":130,"line":230},[128,48754,160],{"emptyLinePlaceholder":159},[128,48756,48757],{"class":130,"line":235},[128,48758,48759],{"class":3814},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[128,48761,48762,48765,48767],{"class":130,"line":244},[128,48763,48764],{"class":138},"file_path",[128,48766,270],{"class":134},[128,48768,48769],{"class":176},"'data_cat_dog'\n",[128,48771,48772,48775,48777,48780,48782,48785,48787],{"class":130,"line":287},[128,48773,48774],{"class":138},"flower_class",[128,48776,270],{"class":134},[128,48778,48779],{"class":138},"[cla ",[128,48781,2404],{"class":134},[128,48783,48784],{"class":138}," cla ",[128,48786,549],{"class":134},[128,48788,48789],{"class":138}," os.listdir(file_path)]\n",[128,48791,48792],{"class":130,"line":301},[128,48793,160],{"emptyLinePlaceholder":159},[128,48795,48796],{"class":130,"line":310},[128,48797,48798],{"class":3814},"# 创建训练集train文件夹\n",[128,48800,48801,48804,48807],{"class":130,"line":323},[128,48802,48803],{"class":138},"mkfile(",[128,48805,48806],{"class":176},"'data\u002Ftrain'",[128,48808,180],{"class":138},[128,48810,48811,48813,48815,48817],{"class":130,"line":330},[128,48812,2404],{"class":134},[128,48814,48784],{"class":138},[128,48816,549],{"class":134},[128,48818,48819],{"class":138}," flower_class:\n",[128,48821,48822,48825,48828,48830],{"class":130,"line":335},[128,48823,48824],{"class":138},"    mkfile(",[128,48826,48827],{"class":176},"'data\u002Ftrain\u002F'",[128,48829,2457],{"class":134},[128,48831,48832],{"class":138},"cla)\n",[128,48834,48835],{"class":130,"line":340},[128,48836,160],{"emptyLinePlaceholder":159},[128,48838,48839],{"class":130,"line":351},[128,48840,48841],{"class":3814},"# 创建验证集val文件夹\n",[128,48843,48844,48846,48849],{"class":130,"line":384},[128,48845,48803],{"class":138},[128,48847,48848],{"class":176},"'data\u002Ftest'",[128,48850,180],{"class":138},[128,48852,48853,48855,48857,48859],{"class":130,"line":414},[128,48854,2404],{"class":134},[128,48856,48784],{"class":138},[128,48858,549],{"class":134},[128,48860,48819],{"class":138},[128,48862,48863,48865,48868,48870],{"class":130,"line":419},[128,48864,48824],{"class":138},[128,48866,48867],{"class":176},"'data\u002Ftest\u002F'",[128,48869,2457],{"class":134},[128,48871,48832],{"class":138},[128,48873,48874],{"class":130,"line":424},[128,48875,160],{"emptyLinePlaceholder":159},[128,48877,48878],{"class":130,"line":434},[128,48879,48880],{"class":3814},"# 划分比例，训练集：测试集=9：1\n",[128,48882,48883,48886,48888],{"class":130,"line":447},[128,48884,48885],{"class":138},"split_rate",[128,48887,270],{"class":134},[128,48889,48890],{"class":166},"0.1\n",[128,48892,48893],{"class":130,"line":459},[128,48894,160],{"emptyLinePlaceholder":159},[128,48896,48897],{"class":130,"line":471},[128,48898,48899],{"class":3814},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[128,48901,48902],{"class":130,"line":483},[128,48903,48904],{"class":3814},"# cla_path：当前类别的原始图片路径\n",[128,48906,48907],{"class":130,"line":495},[128,48908,48909],{"class":3814},"# images：当前类别下所有图片的文件名列表\n",[128,48911,48912],{"class":130,"line":507},[128,48913,48914],{"class":3814},"# num：该类别图片总数\n",[128,48916,48917],{"class":130,"line":519},[128,48918,48919],{"class":3814},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[128,48921,48922],{"class":130,"line":524},[128,48923,160],{"emptyLinePlaceholder":159},[128,48925,48926,48928,48930,48932],{"class":130,"line":529},[128,48927,2404],{"class":134},[128,48929,48784],{"class":138},[128,48931,549],{"class":134},[128,48933,48819],{"class":138},[128,48935,48936,48939,48941,48944,48946,48949,48952,48954,48956,48958],{"class":130,"line":540},[128,48937,48938],{"class":138},"    cla_path ",[128,48940,270],{"class":134},[128,48942,48943],{"class":138}," file_path ",[128,48945,2457],{"class":134},[128,48947,48948],{"class":176}," '\u002F'",[128,48950,48951],{"class":134}," +",[128,48953,48784],{"class":138},[128,48955,2457],{"class":134},[128,48957,48948],{"class":176},[128,48959,48960],{"class":3814},"  # 某一类别的子目录\n",[128,48962,48963,48966,48968,48971],{"class":130,"line":555},[128,48964,48965],{"class":138},"    images ",[128,48967,270],{"class":134},[128,48969,48970],{"class":138}," os.listdir(cla_path)  ",[128,48972,48973],{"class":3814},"# iamges 列表存储了该目录下所有图像的名称\n",[128,48975,48976,48979,48981,48983],{"class":130,"line":576},[128,48977,48978],{"class":138},"    num ",[128,48980,270],{"class":134},[128,48982,10888],{"class":166},[128,48984,48985],{"class":138},"(images)\n",[128,48987,48988,48991,48993,48996,48998,49000,49002,49005,49007,49010],{"class":130,"line":584},[128,48989,48990],{"class":138},"    eval_index ",[128,48992,270],{"class":134},[128,48994,48995],{"class":138}," random.sample(images, ",[128,48997,4242],{"class":266},[128,48999,270],{"class":134},[128,49001,3763],{"class":166},[128,49003,49004],{"class":138},"(num ",[128,49006,4205],{"class":134},[128,49008,49009],{"class":138}," split_rate))  ",[128,49011,49012],{"class":3814},"# 从images列表中随机抽取 k 个图像名称\n",[128,49014,49015],{"class":130,"line":593},[128,49016,49017],{"class":3814},"    # 遍历该类别下的所有图片\n",[128,49019,49020],{"class":130,"line":598},[128,49021,49022],{"class":3814},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[128,49024,49025,49027,49030,49032,49034],{"class":130,"line":603},[128,49026,543],{"class":134},[128,49028,49029],{"class":138}," index, image ",[128,49031,549],{"class":134},[128,49033,35075],{"class":166},[128,49035,49036],{"class":138},"(images):\n",[128,49038,49039],{"class":130,"line":614},[128,49040,49041],{"class":3814},"        # eval_index 中保存验证集val的图像名称\n",[128,49043,49044,49046,49049,49051],{"class":130,"line":625},[128,49045,558],{"class":134},[128,49047,49048],{"class":138}," image ",[128,49050,549],{"class":134},[128,49052,49053],{"class":138}," eval_index:\n",[128,49055,49056,49059,49061,49064,49066],{"class":130,"line":633},[128,49057,49058],{"class":138},"            image_path ",[128,49060,270],{"class":134},[128,49062,49063],{"class":138}," cla_path ",[128,49065,2457],{"class":134},[128,49067,49068],{"class":138}," image\n",[128,49070,49071,49074,49076,49079,49081],{"class":130,"line":649},[128,49072,49073],{"class":138},"            new_path ",[128,49075,270],{"class":134},[128,49077,49078],{"class":176}," 'data\u002Ftest\u002F'",[128,49080,48951],{"class":134},[128,49082,49083],{"class":138}," cla\n",[128,49085,49086,49089],{"class":130,"line":660},[128,49087,49088],{"class":138},"            copy(image_path, new_path)  ",[128,49090,49091],{"class":3814},"# 将选中的图像复制到新路径\n",[128,49093,49094],{"class":130,"line":673},[128,49095,160],{"emptyLinePlaceholder":159},[128,49097,49098],{"class":130,"line":678},[128,49099,49100],{"class":3814},"        # 其余的图像保存在训练集train中\n",[128,49102,49103,49105],{"class":130,"line":683},[128,49104,1770],{"class":134},[128,49106,241],{"class":138},[128,49108,49109,49111,49113,49115,49117],{"class":130,"line":693},[128,49110,49058],{"class":138},[128,49112,270],{"class":134},[128,49114,49063],{"class":138},[128,49116,2457],{"class":134},[128,49118,49068],{"class":138},[128,49120,49121,49123,49125,49128,49130],{"class":130,"line":702},[128,49122,49073],{"class":138},[128,49124,270],{"class":134},[128,49126,49127],{"class":176}," 'data\u002Ftrain\u002F'",[128,49129,48951],{"class":134},[128,49131,49083],{"class":138},[128,49133,49134],{"class":130,"line":709},[128,49135,49136],{"class":138},"            copy(image_path, new_path)\n",[128,49138,49139],{"class":130,"line":723},[128,49140,49141],{"class":3814},"            # 打印进度条信息\n",[128,49143,49144],{"class":130,"line":732},[128,49145,49146],{"class":3814},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[128,49148,49149,49151,49153,49155,49158,49160,49162,49165,49167,49169,49171,49174,49177,49179,49181,49184,49187,49189,49191,49194],{"class":130,"line":744},[128,49150,313],{"class":166},[128,49152,253],{"class":138},[128,49154,1376],{"class":176},[128,49156,49157],{"class":166},"\\r",[128,49159,4638],{"class":176},[128,49161,35925],{"class":166},[128,49163,49164],{"class":176},"] processing [",[128,49166,35925],{"class":166},[128,49168,4333],{"class":176},[128,49170,35925],{"class":166},[128,49172,49173],{"class":176},"]\"",[128,49175,49176],{"class":138},".format(cla, index ",[128,49178,2457],{"class":134},[128,49180,28605],{"class":166},[128,49182,49183],{"class":138},", num), ",[128,49185,49186],{"class":266},"end",[128,49188,270],{"class":134},[128,49190,11209],{"class":176},[128,49192,49193],{"class":138},")  ",[128,49195,49196],{"class":3814},"# processing bar\n",[128,49198,49199,49201],{"class":130,"line":749},[128,49200,437],{"class":166},[128,49202,5563],{"class":138},[128,49204,49205],{"class":130,"line":754},[128,49206,160],{"emptyLinePlaceholder":159},[128,49208,49209,49211,49213,49216],{"class":130,"line":764},[128,49210,2469],{"class":166},[128,49212,253],{"class":138},[128,49214,49215],{"class":176},"\"processing done!\"",[128,49217,180],{"class":138},[19,49219,49220],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[25485,49222,49224],{"id":49223},"_242模型代码","2.4.2.模型代码",[19,49226,49227],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[106,49229,49231],{"className":122,"code":49230,"language":124,"meta":112,"style":112},"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",[114,49232,49233,49239,49249,49259,49263,49279,49287,49301,49311,49315,49345,49349,49383,49429,49433,49467,49513,49517,49521,49555,49585,49589,49597,49611,49633,49655,49673,49677,49691,49695,49699,49715,49719,49727,49741,49751,49795,49799,49827,49831,49841,49869,49873,49909,49913,49941,49945,49955,49987,50019,50047,50051,50061,50093,50125,50157,50189,50221,50249,50253,50263,50295,50327,50339,50343,50355,50359,50363,50375,50383,50403,50407,50411,50415,50419,50423,50427,50441,50449,50457,50469,50483,50491,50495,50503,50513,50523,50533,50543,50553,50559,50563,50567,50579,50599,50607],{"__ignoreMap":112},[128,49234,49235,49237],{"class":130,"line":131},[128,49236,135],{"class":134},[128,49238,33876],{"class":138},[128,49240,49241,49243,49245,49247],{"class":130,"line":142},[128,49242,145],{"class":134},[128,49244,34218],{"class":138},[128,49246,135],{"class":134},[128,49248,34223],{"class":138},[128,49250,49251,49253,49255,49257],{"class":130,"line":156},[128,49252,145],{"class":134},[128,49254,34235],{"class":138},[128,49256,135],{"class":134},[128,49258,34240],{"class":138},[128,49260,49261],{"class":130,"line":163},[128,49262,160],{"emptyLinePlaceholder":159},[128,49264,49265,49267,49269,49271,49273,49275,49277],{"class":130,"line":183},[128,49266,1901],{"class":134},[128,49268,44879],{"class":199},[128,49270,253],{"class":138},[128,49272,34256],{"class":199},[128,49274,4307],{"class":138},[128,49276,34261],{"class":199},[128,49278,34264],{"class":138},[128,49280,49281,49283,49285],{"class":130,"line":188},[128,49282,1946],{"class":134},[128,49284,2108],{"class":166},[128,49286,44898],{"class":138},[128,49288,49289,49291,49293,49295,49297,49299],{"class":130,"line":193},[128,49290,34292],{"class":166},[128,49292,44905],{"class":138},[128,49294,1970],{"class":166},[128,49296,34300],{"class":138},[128,49298,34303],{"class":166},[128,49300,5563],{"class":138},[128,49302,49303,49305,49307,49309],{"class":130,"line":206},[128,49304,2115],{"class":166},[128,49306,38163],{"class":138},[128,49308,270],{"class":134},[128,49310,38168],{"class":138},[128,49312,49313],{"class":130,"line":221},[128,49314,44928],{"class":3814},[128,49316,49317,49319,49321,49323,49325,49327,49329,49331,49333,49335,49337,49339,49341,49343],{"class":130,"line":230},[128,49318,2115],{"class":166},[128,49320,44935],{"class":138},[128,49322,270],{"class":134},[128,49324,34326],{"class":138},[128,49326,34329],{"class":266},[128,49328,270],{"class":134},[128,49330,44946],{"class":138},[128,49332,34338],{"class":266},[128,49334,270],{"class":134},[128,49336,44953],{"class":138},[128,49338,34347],{"class":266},[128,49340,270],{"class":134},[128,49342,2592],{"class":166},[128,49344,180],{"class":138},[128,49346,49347],{"class":130,"line":235},[128,49348,44966],{"class":3814},[128,49350,49351,49353,49355,49357,49359,49361,49363,49365,49367,49369,49371,49373,49375,49377,49379,49381],{"class":130,"line":244},[128,49352,2115],{"class":166},[128,49354,44973],{"class":138},[128,49356,270],{"class":134},[128,49358,34326],{"class":138},[128,49360,34329],{"class":266},[128,49362,270],{"class":134},[128,49364,44946],{"class":138},[128,49366,34338],{"class":266},[128,49368,270],{"class":134},[128,49370,44990],{"class":138},[128,49372,2452],{"class":166},[128,49374,44995],{"class":138},[128,49376,34347],{"class":266},[128,49378,270],{"class":134},[128,49380,2592],{"class":166},[128,49382,180],{"class":138},[128,49384,49385,49387,49389,49391,49393,49395,49397,49399,49401,49403,49405,49407,49409,49411,49413,49415,49417,49419,49421,49423,49425,49427],{"class":130,"line":287},[128,49386,2115],{"class":166},[128,49388,45010],{"class":138},[128,49390,270],{"class":134},[128,49392,34326],{"class":138},[128,49394,34329],{"class":266},[128,49396,270],{"class":134},[128,49398,44990],{"class":138},[128,49400,2452],{"class":166},[128,49402,44995],{"class":138},[128,49404,34338],{"class":266},[128,49406,270],{"class":134},[128,49408,44990],{"class":138},[128,49410,2592],{"class":166},[128,49412,44995],{"class":138},[128,49414,34347],{"class":266},[128,49416,270],{"class":134},[128,49418,3827],{"class":166},[128,49420,4128],{"class":138},[128,49422,34356],{"class":266},[128,49424,270],{"class":134},[128,49426,2592],{"class":166},[128,49428,180],{"class":138},[128,49430,49431],{"class":130,"line":301},[128,49432,45055],{"class":3814},[128,49434,49435,49437,49439,49441,49443,49445,49447,49449,49451,49453,49455,49457,49459,49461,49463,49465],{"class":130,"line":310},[128,49436,2115],{"class":166},[128,49438,45062],{"class":138},[128,49440,270],{"class":134},[128,49442,34326],{"class":138},[128,49444,34329],{"class":266},[128,49446,270],{"class":134},[128,49448,44946],{"class":138},[128,49450,34338],{"class":266},[128,49452,270],{"class":134},[128,49454,45079],{"class":138},[128,49456,2452],{"class":166},[128,49458,44995],{"class":138},[128,49460,34347],{"class":266},[128,49462,270],{"class":134},[128,49464,2592],{"class":166},[128,49466,180],{"class":138},[128,49468,49469,49471,49473,49475,49477,49479,49481,49483,49485,49487,49489,49491,49493,49495,49497,49499,49501,49503,49505,49507,49509,49511],{"class":130,"line":323},[128,49470,2115],{"class":166},[128,49472,45098],{"class":138},[128,49474,270],{"class":134},[128,49476,34326],{"class":138},[128,49478,34329],{"class":266},[128,49480,270],{"class":134},[128,49482,45079],{"class":138},[128,49484,2452],{"class":166},[128,49486,44995],{"class":138},[128,49488,34338],{"class":266},[128,49490,270],{"class":134},[128,49492,45079],{"class":138},[128,49494,2592],{"class":166},[128,49496,44995],{"class":138},[128,49498,34347],{"class":266},[128,49500,270],{"class":134},[128,49502,4069],{"class":166},[128,49504,4128],{"class":138},[128,49506,34356],{"class":266},[128,49508,270],{"class":134},[128,49510,409],{"class":166},[128,49512,180],{"class":138},[128,49514,49515],{"class":130,"line":330},[128,49516,45143],{"class":3814},[128,49518,49519],{"class":130,"line":335},[128,49520,45148],{"class":3814},[128,49522,49523,49525,49527,49529,49531,49533,49535,49537,49539,49541,49543,49545,49547,49549,49551,49553],{"class":130,"line":340},[128,49524,2115],{"class":166},[128,49526,45155],{"class":138},[128,49528,270],{"class":134},[128,49530,38221],{"class":138},[128,49532,34347],{"class":266},[128,49534,270],{"class":134},[128,49536,3827],{"class":166},[128,49538,4128],{"class":138},[128,49540,34402],{"class":266},[128,49542,270],{"class":134},[128,49544,2592],{"class":166},[128,49546,4128],{"class":138},[128,49548,34356],{"class":266},[128,49550,270],{"class":134},[128,49552,2592],{"class":166},[128,49554,180],{"class":138},[128,49556,49557,49559,49561,49563,49565,49567,49569,49571,49573,49575,49577,49579,49581,49583],{"class":130,"line":351},[128,49558,2115],{"class":166},[128,49560,45190],{"class":138},[128,49562,270],{"class":134},[128,49564,34326],{"class":138},[128,49566,34329],{"class":266},[128,49568,270],{"class":134},[128,49570,44946],{"class":138},[128,49572,34338],{"class":266},[128,49574,270],{"class":134},[128,49576,45207],{"class":138},[128,49578,34347],{"class":266},[128,49580,270],{"class":134},[128,49582,2592],{"class":166},[128,49584,180],{"class":138},[128,49586,49587],{"class":130,"line":384},[128,49588,160],{"emptyLinePlaceholder":159},[128,49590,49591,49593,49595],{"class":130,"line":414},[128,49592,1946],{"class":134},[128,49594,34566],{"class":199},[128,49596,34569],{"class":138},[128,49598,49599,49601,49603,49605,49607,49609],{"class":130,"line":419},[128,49600,45232],{"class":138},[128,49602,270],{"class":134},[128,49604,1970],{"class":166},[128,49606,38576],{"class":138},[128,49608,1970],{"class":166},[128,49610,45243],{"class":138},[128,49612,49613,49615,49617,49619,49621,49623,49625,49627,49629,49631],{"class":130,"line":424},[128,49614,10642],{"class":138},[128,49616,270],{"class":134},[128,49618,1970],{"class":166},[128,49620,38576],{"class":138},[128,49622,1970],{"class":166},[128,49624,45258],{"class":138},[128,49626,1970],{"class":166},[128,49628,38576],{"class":138},[128,49630,1970],{"class":166},[128,49632,45267],{"class":138},[128,49634,49635,49637,49639,49641,49643,49645,49647,49649,49651,49653],{"class":130,"line":434},[128,49636,45272],{"class":138},[128,49638,270],{"class":134},[128,49640,1970],{"class":166},[128,49642,38576],{"class":138},[128,49644,1970],{"class":166},[128,49646,45283],{"class":138},[128,49648,1970],{"class":166},[128,49650,38576],{"class":138},[128,49652,1970],{"class":166},[128,49654,45292],{"class":138},[128,49656,49657,49659,49661,49663,49665,49667,49669,49671],{"class":130,"line":447},[128,49658,45297],{"class":138},[128,49660,270],{"class":134},[128,49662,1970],{"class":166},[128,49664,38576],{"class":138},[128,49666,1970],{"class":166},[128,49668,45308],{"class":138},[128,49670,1970],{"class":166},[128,49672,45313],{"class":138},[128,49674,49675],{"class":130,"line":459},[128,49676,45318],{"class":3814},[128,49678,49679,49681,49683,49685,49687,49689],{"class":130,"line":471},[128,49680,224],{"class":134},[128,49682,45325],{"class":138},[128,49684,36144],{"class":266},[128,49686,270],{"class":134},[128,49688,2592],{"class":166},[128,49690,180],{"class":138},[128,49692,49693],{"class":130,"line":483},[128,49694,160],{"emptyLinePlaceholder":159},[128,49696,49697],{"class":130,"line":495},[128,49698,45346],{"class":3814},[128,49700,49701,49703,49705,49707,49709,49711,49713],{"class":130,"line":507},[128,49702,1901],{"class":134},[128,49704,45353],{"class":199},[128,49706,253],{"class":138},[128,49708,34256],{"class":199},[128,49710,4307],{"class":138},[128,49712,34261],{"class":199},[128,49714,34264],{"class":138},[128,49716,49717],{"class":130,"line":519},[128,49718,45368],{"class":3814},[128,49720,49721,49723,49725],{"class":130,"line":524},[128,49722,1946],{"class":134},[128,49724,2108],{"class":166},[128,49726,45377],{"class":138},[128,49728,49729,49731,49733,49735,49737,49739],{"class":130,"line":529},[128,49730,34292],{"class":166},[128,49732,45384],{"class":138},[128,49734,1970],{"class":166},[128,49736,34300],{"class":138},[128,49738,34303],{"class":166},[128,49740,5563],{"class":138},[128,49742,49743,49745,49747,49749],{"class":130,"line":540},[128,49744,2115],{"class":166},[128,49746,45399],{"class":138},[128,49748,270],{"class":134},[128,49750,41401],{"class":138},[128,49752,49753,49755,49757,49759,49761,49763,49765,49767,49769,49771,49773,49775,49777,49779,49781,49783,49785,49787,49789,49791,49793],{"class":130,"line":555},[128,49754,41406],{"class":138},[128,49756,34329],{"class":266},[128,49758,270],{"class":134},[128,49760,3827],{"class":166},[128,49762,4128],{"class":138},[128,49764,34338],{"class":266},[128,49766,270],{"class":134},[128,49768,3956],{"class":166},[128,49770,4128],{"class":138},[128,49772,34347],{"class":266},[128,49774,270],{"class":134},[128,49776,4119],{"class":166},[128,49778,4128],{"class":138},[128,49780,34402],{"class":266},[128,49782,270],{"class":134},[128,49784,409],{"class":166},[128,49786,4128],{"class":138},[128,49788,34356],{"class":266},[128,49790,270],{"class":134},[128,49792,3827],{"class":166},[128,49794,2760],{"class":138},[128,49796,49797],{"class":130,"line":576},[128,49798,41443],{"class":138},[128,49800,49801,49803,49805,49807,49809,49811,49813,49815,49817,49819,49821,49823,49825],{"class":130,"line":584},[128,49802,41488],{"class":138},[128,49804,34347],{"class":266},[128,49806,270],{"class":134},[128,49808,3827],{"class":166},[128,49810,4128],{"class":138},[128,49812,34402],{"class":266},[128,49814,270],{"class":134},[128,49816,409],{"class":166},[128,49818,4128],{"class":138},[128,49820,34356],{"class":266},[128,49822,270],{"class":134},[128,49824,2592],{"class":166},[128,49826,180],{"class":138},[128,49828,49829],{"class":130,"line":593},[128,49830,2084],{"class":138},[128,49832,49833,49835,49837,49839],{"class":130,"line":598},[128,49834,2115],{"class":166},[128,49836,45490],{"class":138},[128,49838,270],{"class":134},[128,49840,41401],{"class":138},[128,49842,49843,49845,49847,49849,49851,49853,49855,49857,49859,49861,49863,49865,49867],{"class":130,"line":603},[128,49844,41406],{"class":138},[128,49846,34329],{"class":266},[128,49848,270],{"class":134},[128,49850,3956],{"class":166},[128,49852,4128],{"class":138},[128,49854,34338],{"class":266},[128,49856,270],{"class":134},[128,49858,3956],{"class":166},[128,49860,4128],{"class":138},[128,49862,34347],{"class":266},[128,49864,270],{"class":134},[128,49866,2592],{"class":166},[128,49868,2760],{"class":138},[128,49870,49871],{"class":130,"line":614},[128,49872,41443],{"class":138},[128,49874,49875,49877,49879,49881,49883,49885,49887,49889,49891,49893,49895,49897,49899,49901,49903,49905,49907],{"class":130,"line":625},[128,49876,41406],{"class":138},[128,49878,34329],{"class":266},[128,49880,270],{"class":134},[128,49882,3956],{"class":166},[128,49884,4128],{"class":138},[128,49886,34338],{"class":266},[128,49888,270],{"class":134},[128,49890,45545],{"class":166},[128,49892,4128],{"class":138},[128,49894,34347],{"class":266},[128,49896,270],{"class":134},[128,49898,3827],{"class":166},[128,49900,4128],{"class":138},[128,49902,34356],{"class":266},[128,49904,270],{"class":134},[128,49906,2592],{"class":166},[128,49908,2760],{"class":138},[128,49910,49911],{"class":130,"line":633},[128,49912,41443],{"class":138},[128,49914,49915,49917,49919,49921,49923,49925,49927,49929,49931,49933,49935,49937,49939],{"class":130,"line":649},[128,49916,41488],{"class":138},[128,49918,34347],{"class":266},[128,49920,270],{"class":134},[128,49922,3827],{"class":166},[128,49924,4128],{"class":138},[128,49926,34402],{"class":266},[128,49928,270],{"class":134},[128,49930,409],{"class":166},[128,49932,4128],{"class":138},[128,49934,34356],{"class":266},[128,49936,270],{"class":134},[128,49938,2592],{"class":166},[128,49940,180],{"class":138},[128,49942,49943],{"class":130,"line":660},[128,49944,2084],{"class":138},[128,49946,49947,49949,49951,49953],{"class":130,"line":673},[128,49948,2115],{"class":166},[128,49950,45606],{"class":138},[128,49952,270],{"class":134},[128,49954,41401],{"class":138},[128,49956,49957,49959,49961,49963,49965,49967,49969,49971,49973,49975,49977,49979,49981,49983,49985],{"class":130,"line":678},[128,49958,45615],{"class":138},[128,49960,45545],{"class":166},[128,49962,4128],{"class":138},[128,49964,3956],{"class":166},[128,49966,45624],{"class":138},[128,49968,3962],{"class":166},[128,49970,4128],{"class":138},[128,49972,35537],{"class":166},[128,49974,45633],{"class":138},[128,49976,4350],{"class":166},[128,49978,4128],{"class":138},[128,49980,3950],{"class":166},[128,49982,45642],{"class":138},[128,49984,3950],{"class":166},[128,49986,2760],{"class":138},[128,49988,49989,49991,49993,49995,49997,49999,50001,50003,50005,50007,50009,50011,50013,50015,50017],{"class":130,"line":683},[128,49990,45615],{"class":138},[128,49992,38262],{"class":166},[128,49994,4128],{"class":138},[128,49996,35537],{"class":166},[128,49998,45624],{"class":138},[128,50000,35537],{"class":166},[128,50002,4128],{"class":138},[128,50004,45545],{"class":166},[128,50006,45633],{"class":138},[128,50008,3950],{"class":166},[128,50010,4128],{"class":138},[128,50012,3962],{"class":166},[128,50014,45642],{"class":138},[128,50016,3956],{"class":166},[128,50018,2760],{"class":138},[128,50020,50021,50023,50025,50027,50029,50031,50033,50035,50037,50039,50041,50043,50045],{"class":130,"line":693},[128,50022,41488],{"class":138},[128,50024,34347],{"class":266},[128,50026,270],{"class":134},[128,50028,3827],{"class":166},[128,50030,4128],{"class":138},[128,50032,34402],{"class":266},[128,50034,270],{"class":134},[128,50036,409],{"class":166},[128,50038,4128],{"class":138},[128,50040,34356],{"class":266},[128,50042,270],{"class":134},[128,50044,2592],{"class":166},[128,50046,180],{"class":138},[128,50048,50049],{"class":130,"line":702},[128,50050,2084],{"class":138},[128,50052,50053,50055,50057,50059],{"class":130,"line":709},[128,50054,2115],{"class":166},[128,50056,45717],{"class":138},[128,50058,270],{"class":134},[128,50060,41401],{"class":138},[128,50062,50063,50065,50067,50069,50071,50073,50075,50077,50079,50081,50083,50085,50087,50089,50091],{"class":130,"line":723},[128,50064,45615],{"class":138},[128,50066,45728],{"class":166},[128,50068,4128],{"class":138},[128,50070,45545],{"class":166},[128,50072,45624],{"class":138},[128,50074,3962],{"class":166},[128,50076,4128],{"class":138},[128,50078,45741],{"class":166},[128,50080,45633],{"class":138},[128,50082,4350],{"class":166},[128,50084,4128],{"class":138},[128,50086,4356],{"class":166},[128,50088,45642],{"class":138},[128,50090,3956],{"class":166},[128,50092,2760],{"class":138},[128,50094,50095,50097,50099,50101,50103,50105,50107,50109,50111,50113,50115,50117,50119,50121,50123],{"class":130,"line":732},[128,50096,45615],{"class":138},[128,50098,41847],{"class":166},[128,50100,4128],{"class":138},[128,50102,24535],{"class":166},[128,50104,45624],{"class":138},[128,50106,4367],{"class":166},[128,50108,4128],{"class":138},[128,50110,34970],{"class":166},[128,50112,45633],{"class":138},[128,50114,4549],{"class":166},[128,50116,4128],{"class":138},[128,50118,3956],{"class":166},[128,50120,45642],{"class":138},[128,50122,3956],{"class":166},[128,50124,2760],{"class":138},[128,50126,50127,50129,50131,50133,50135,50137,50139,50141,50143,50145,50147,50149,50151,50153,50155],{"class":130,"line":744},[128,50128,45615],{"class":138},[128,50130,41847],{"class":166},[128,50132,4128],{"class":138},[128,50134,35537],{"class":166},[128,50136,45624],{"class":138},[128,50138,35537],{"class":166},[128,50140,4128],{"class":138},[128,50142,38262],{"class":166},[128,50144,45633],{"class":138},[128,50146,4549],{"class":166},[128,50148,4128],{"class":138},[128,50150,3956],{"class":166},[128,50152,45642],{"class":138},[128,50154,3956],{"class":166},[128,50156,2760],{"class":138},[128,50158,50159,50161,50163,50165,50167,50169,50171,50173,50175,50177,50179,50181,50183,50185,50187],{"class":130,"line":749},[128,50160,45615],{"class":138},[128,50162,41847],{"class":166},[128,50164,4128],{"class":138},[128,50166,4367],{"class":166},[128,50168,45624],{"class":138},[128,50170,35537],{"class":166},[128,50172,4128],{"class":138},[128,50174,45838],{"class":166},[128,50176,45633],{"class":138},[128,50178,3950],{"class":166},[128,50180,4128],{"class":138},[128,50182,3956],{"class":166},[128,50184,45642],{"class":138},[128,50186,3956],{"class":166},[128,50188,2760],{"class":138},[128,50190,50191,50193,50195,50197,50199,50201,50203,50205,50207,50209,50211,50213,50215,50217,50219],{"class":130,"line":754},[128,50192,45615],{"class":138},[128,50194,45859],{"class":166},[128,50196,4128],{"class":138},[128,50198,38262],{"class":166},[128,50200,45624],{"class":138},[128,50202,24535],{"class":166},[128,50204,4128],{"class":138},[128,50206,45872],{"class":166},[128,50208,45633],{"class":138},[128,50210,3950],{"class":166},[128,50212,4128],{"class":138},[128,50214,35537],{"class":166},[128,50216,45642],{"class":138},[128,50218,35537],{"class":166},[128,50220,2760],{"class":138},[128,50222,50223,50225,50227,50229,50231,50233,50235,50237,50239,50241,50243,50245,50247],{"class":130,"line":764},[128,50224,41488],{"class":138},[128,50226,34347],{"class":266},[128,50228,270],{"class":134},[128,50230,3827],{"class":166},[128,50232,4128],{"class":138},[128,50234,34402],{"class":266},[128,50236,270],{"class":134},[128,50238,409],{"class":166},[128,50240,4128],{"class":138},[128,50242,34356],{"class":266},[128,50244,270],{"class":134},[128,50246,2592],{"class":166},[128,50248,180],{"class":138},[128,50250,50251],{"class":130,"line":782},[128,50252,2084],{"class":138},[128,50254,50255,50257,50259,50261],{"class":130,"line":787},[128,50256,2115],{"class":166},[128,50258,45925],{"class":138},[128,50260,270],{"class":134},[128,50262,41401],{"class":138},[128,50264,50265,50267,50269,50271,50273,50275,50277,50279,50281,50283,50285,50287,50289,50291,50293],{"class":130,"line":795},[128,50266,45615],{"class":138},[128,50268,45936],{"class":166},[128,50270,4128],{"class":138},[128,50272,38262],{"class":166},[128,50274,45624],{"class":138},[128,50276,24535],{"class":166},[128,50278,4128],{"class":138},[128,50280,45872],{"class":166},[128,50282,45633],{"class":138},[128,50284,3950],{"class":166},[128,50286,4128],{"class":138},[128,50288,35537],{"class":166},[128,50290,45642],{"class":138},[128,50292,35537],{"class":166},[128,50294,2760],{"class":138},[128,50296,50297,50299,50301,50303,50305,50307,50309,50311,50313,50315,50317,50319,50321,50323,50325],{"class":130,"line":807},[128,50298,45615],{"class":138},[128,50300,45936],{"class":166},[128,50302,4128],{"class":138},[128,50304,38332],{"class":166},[128,50306,45624],{"class":138},[128,50308,45545],{"class":166},[128,50310,4128],{"class":138},[128,50312,38332],{"class":166},[128,50314,45633],{"class":138},[128,50316,4356],{"class":166},[128,50318,4128],{"class":138},[128,50320,35537],{"class":166},[128,50322,45642],{"class":138},[128,50324,35537],{"class":166},[128,50326,2760],{"class":138},[128,50328,50329,50331,50333,50335,50337],{"class":130,"line":813},[128,50330,45999],{"class":138},[128,50332,2592],{"class":166},[128,50334,4128],{"class":138},[128,50336,2592],{"class":166},[128,50338,46008],{"class":138},[128,50340,50341],{"class":130,"line":818},[128,50342,42180],{"class":138},[128,50344,50345,50347,50349,50351,50353],{"class":130,"line":835},[128,50346,42185],{"class":138},[128,50348,46019],{"class":166},[128,50350,4128],{"class":138},[128,50352,409],{"class":166},[128,50354,180],{"class":138},[128,50356,50357],{"class":130,"line":851},[128,50358,2084],{"class":138},[128,50360,50361],{"class":130,"line":867},[128,50362,46034],{"class":3814},[128,50364,50365,50367,50369,50371,50373],{"class":130,"line":872},[128,50366,2141],{"class":134},[128,50368,42258],{"class":138},[128,50370,549],{"class":134},[128,50372,2148],{"class":166},[128,50374,42265],{"class":138},[128,50376,50377,50379,50381],{"class":130,"line":878},[128,50378,2156],{"class":134},[128,50380,42277],{"class":166},[128,50382,42280],{"class":138},[128,50384,50385,50387,50389,50391,50393,50395,50397,50399,50401],{"class":130,"line":887},[128,50386,42290],{"class":138},[128,50388,46061],{"class":266},[128,50390,270],{"class":134},[128,50392,46066],{"class":176},[128,50394,4128],{"class":138},[128,50396,42293],{"class":266},[128,50398,270],{"class":134},[128,50400,42298],{"class":176},[128,50402,180],{"class":138},[128,50404,50405],{"class":130,"line":896},[128,50406,46081],{"class":3814},[128,50408,50409],{"class":130,"line":905},[128,50410,46086],{"class":3814},[128,50412,50413],{"class":130,"line":914},[128,50414,46091],{"class":3814},[128,50416,50417],{"class":130,"line":920},[128,50418,46096],{"class":3814},[128,50420,50421],{"class":130,"line":926},[128,50422,46101],{"class":3814},[128,50424,50425],{"class":130,"line":938},[128,50426,46106],{"class":3814},[128,50428,50429,50431,50433,50435,50437,50439],{"class":130,"line":943},[128,50430,42310],{"class":134},[128,50432,42313],{"class":138},[128,50434,997],{"class":134},[128,50436,212],{"class":134},[128,50438,1000],{"class":166},[128,50440,241],{"class":138},[128,50442,50443,50445,50447],{"class":130,"line":948},[128,50444,42331],{"class":138},[128,50446,2452],{"class":166},[128,50448,180],{"class":138},[128,50450,50451,50453,50455],{"class":130,"line":958},[128,50452,46133],{"class":134},[128,50454,42277],{"class":166},[128,50456,42350],{"class":138},[128,50458,50459,50461,50463,50465,50467],{"class":130,"line":974},[128,50460,46142],{"class":138},[128,50462,2452],{"class":166},[128,50464,4128],{"class":138},[128,50466,42372],{"class":166},[128,50468,180],{"class":138},[128,50470,50471,50473,50475,50477,50479,50481],{"class":130,"line":985},[128,50472,46155],{"class":134},[128,50474,42313],{"class":138},[128,50476,997],{"class":134},[128,50478,212],{"class":134},[128,50480,1000],{"class":166},[128,50482,241],{"class":138},[128,50484,50485,50487,50489],{"class":130,"line":990},[128,50486,46170],{"class":138},[128,50488,2452],{"class":166},[128,50490,180],{"class":138},[128,50492,50493],{"class":130,"line":1005},[128,50494,38557],{"class":3814},[128,50496,50497,50499,50501],{"class":130,"line":1017},[128,50498,1946],{"class":134},[128,50500,34566],{"class":199},[128,50502,34569],{"class":138},[128,50504,50505,50507,50509,50511],{"class":130,"line":1022},[128,50506,34574],{"class":138},[128,50508,270],{"class":134},[128,50510,1970],{"class":166},[128,50512,46197],{"class":138},[128,50514,50515,50517,50519,50521],{"class":130,"line":1027},[128,50516,34574],{"class":138},[128,50518,270],{"class":134},[128,50520,1970],{"class":166},[128,50522,46208],{"class":138},[128,50524,50525,50527,50529,50531],{"class":130,"line":1033},[128,50526,34574],{"class":138},[128,50528,270],{"class":134},[128,50530,1970],{"class":166},[128,50532,46219],{"class":138},[128,50534,50535,50537,50539,50541],{"class":130,"line":1038},[128,50536,34574],{"class":138},[128,50538,270],{"class":134},[128,50540,1970],{"class":166},[128,50542,46230],{"class":138},[128,50544,50545,50547,50549,50551],{"class":130,"line":1050},[128,50546,34574],{"class":138},[128,50548,270],{"class":134},[128,50550,1970],{"class":166},[128,50552,46241],{"class":138},[128,50554,50555,50557],{"class":130,"line":1055},[128,50556,224],{"class":134},[128,50558,34682],{"class":138},[128,50560,50561],{"class":130,"line":1060},[128,50562,160],{"emptyLinePlaceholder":159},[128,50564,50565],{"class":130,"line":1070},[128,50566,46256],{"class":3814},[128,50568,50569,50571,50573,50575,50577],{"class":130,"line":1086},[128,50570,1800],{"class":134},[128,50572,1803],{"class":166},[128,50574,570],{"class":134},[128,50576,34697],{"class":176},[128,50578,241],{"class":138},[128,50580,50581,50583,50585,50587,50589,50591,50593,50595,50597],{"class":130,"line":1095},[128,50582,34709],{"class":138},[128,50584,270],{"class":134},[128,50586,33931],{"class":138},[128,50588,34716],{"class":176},[128,50590,5302],{"class":134},[128,50592,34721],{"class":138},[128,50594,5299],{"class":134},[128,50596,33956],{"class":176},[128,50598,180],{"class":138},[128,50600,50601,50603,50605],{"class":130,"line":1100},[128,50602,34761],{"class":138},[128,50604,270],{"class":134},[128,50606,46297],{"class":138},[128,50608,50609,50611,50613,50615,50617,50619,50621,50623],{"class":130,"line":1113},[128,50610,437],{"class":166},[128,50612,34773],{"class":138},[128,50614,2592],{"class":166},[128,50616,4128],{"class":138},[128,50618,34970],{"class":166},[128,50620,4128],{"class":138},[128,50622,34970],{"class":166},[128,50624,34786],{"class":138},[25485,50626,50628],{"id":50627},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,50630,50631],{},"计算图片的均值与方差，用于训练中归一化处理操作",[106,50633,50635],{"className":122,"code":50634,"language":124,"meta":112,"style":112},"# 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",[114,50636,50637,50642,50655,50660,50666,50671,50681,50685,50690,50700,50704,50709,50719,50736,50740,50745,50757,50769,50800,50809,50819,50829,50833,50838,50853,50857,50862,50867,50872,50882,50887,50912,50916,50921,50936,50940,50953,50957,50962,50967,50972,50977,50982,50992,51002,51025,51033,51041,51049,51053,51065,51069,51074,51078,51082,51089,51109,51133,51140,51154,51159,51164,51168,51182,51186,51198],{"__ignoreMap":112},[128,50638,50639],{"class":130,"line":131},[128,50640,50641],{"class":3814},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[128,50643,50644,50646,50649,50652],{"class":130,"line":142},[128,50645,145],{"class":134},[128,50647,50648],{"class":166}," PIL",[128,50650,50651],{"class":134}," import",[128,50653,50654],{"class":138}," Image\n",[128,50656,50657],{"class":130,"line":156},[128,50658,50659],{"class":3814},"# os 用来处理文件夹和文件路径\n",[128,50661,50662,50664],{"class":130,"line":163},[128,50663,135],{"class":134},[128,50665,48691],{"class":138},[128,50667,50668],{"class":130,"line":183},[128,50669,50670],{"class":3814},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[128,50672,50673,50675,50677,50679],{"class":130,"line":188},[128,50674,135],{"class":134},[128,50676,34851],{"class":138},[128,50678,279],{"class":134},[128,50680,34856],{"class":138},[128,50682,50683],{"class":130,"line":193},[128,50684,160],{"emptyLinePlaceholder":159},[128,50686,50687],{"class":130,"line":206},[128,50688,50689],{"class":3814},"# 文件夹路径，包含所有图片文件\n",[128,50691,50692,50695,50697],{"class":130,"line":221},[128,50693,50694],{"class":138},"folder_path ",[128,50696,270],{"class":134},[128,50698,50699],{"class":176}," 'data_cat_dog'\n",[128,50701,50702],{"class":130,"line":230},[128,50703,160],{"emptyLinePlaceholder":159},[128,50705,50706],{"class":130,"line":235},[128,50707,50708],{"class":3814},"# 初始化累积变量\n",[128,50710,50711,50714,50716],{"class":130,"line":244},[128,50712,50713],{"class":138},"total_pixels ",[128,50715,270],{"class":134},[128,50717,50718],{"class":166}," 0\n",[128,50720,50721,50724,50726,50729,50731,50733],{"class":130,"line":287},[128,50722,50723],{"class":138},"sum_normalized_pixel_values ",[128,50725,270],{"class":134},[128,50727,50728],{"class":138}," np.zeros(",[128,50730,3827],{"class":166},[128,50732,49193],{"class":138},[128,50734,50735],{"class":3814},"# 如果是RGB图像，需要三个通道的均值和方差\n",[128,50737,50738],{"class":130,"line":301},[128,50739,160],{"emptyLinePlaceholder":159},[128,50741,50742],{"class":130,"line":310},[128,50743,50744],{"class":3814},"# 遍历文件夹中的图片文件\n",[128,50746,50747,50749,50752,50754],{"class":130,"line":323},[128,50748,2404],{"class":134},[128,50750,50751],{"class":138}," root, dirs, files ",[128,50753,549],{"class":134},[128,50755,50756],{"class":138}," os.walk(folder_path):\n",[128,50758,50759,50761,50764,50766],{"class":130,"line":330},[128,50760,543],{"class":134},[128,50762,50763],{"class":138}," filename ",[128,50765,549],{"class":134},[128,50767,50768],{"class":138}," files:\n",[128,50770,50771,50773,50776,50779,50781,50784,50786,50789,50791,50794,50797],{"class":130,"line":335},[128,50772,558],{"class":134},[128,50774,50775],{"class":138}," filename.endswith((",[128,50777,50778],{"class":176},"'.jpg'",[128,50780,258],{"class":138},[128,50782,50783],{"class":176},"'.jpeg'",[128,50785,258],{"class":138},[128,50787,50788],{"class":176},"'.png'",[128,50790,258],{"class":138},[128,50792,50793],{"class":176},"'.bmp'",[128,50795,50796],{"class":138},")):  ",[128,50798,50799],{"class":3814},"# 可根据实际情况添加其他格式\n",[128,50801,50802,50804,50806],{"class":130,"line":340},[128,50803,49058],{"class":138},[128,50805,270],{"class":134},[128,50807,50808],{"class":138}," os.path.join(root, filename)\n",[128,50810,50811,50814,50816],{"class":130,"line":351},[128,50812,50813],{"class":138},"            image ",[128,50815,270],{"class":134},[128,50817,50818],{"class":138}," Image.open(image_path)\n",[128,50820,50821,50824,50826],{"class":130,"line":384},[128,50822,50823],{"class":138},"            image_array ",[128,50825,270],{"class":134},[128,50827,50828],{"class":138}," np.array(image)\n",[128,50830,50831],{"class":130,"line":414},[128,50832,160],{"emptyLinePlaceholder":159},[128,50834,50835],{"class":130,"line":419},[128,50836,50837],{"class":3814},"            # 归一化像素值到0-1之间\n",[128,50839,50840,50843,50845,50848,50850],{"class":130,"line":424},[128,50841,50842],{"class":138},"            normalized_image_array ",[128,50844,270],{"class":134},[128,50846,50847],{"class":138}," image_array ",[128,50849,4333],{"class":134},[128,50851,50852],{"class":166}," 255.0\n",[128,50854,50855],{"class":130,"line":434},[128,50856,160],{"emptyLinePlaceholder":159},[128,50858,50859],{"class":130,"line":447},[128,50860,50861],{"class":3814},"            # print(image_path)\n",[128,50863,50864],{"class":130,"line":459},[128,50865,50866],{"class":3814},"            # print(normalized_image_array.shape)\n",[128,50868,50869],{"class":130,"line":471},[128,50870,50871],{"class":3814},"            # 累积归一化后的像素值和像素数量\n",[128,50873,50874,50877,50879],{"class":130,"line":483},[128,50875,50876],{"class":138},"            total_pixels ",[128,50878,13023],{"class":134},[128,50880,50881],{"class":138}," normalized_image_array.size\n",[128,50883,50884],{"class":130,"line":495},[128,50885,50886],{"class":3814},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[128,50888,50889,50892,50894,50897,50900,50902,50904,50906,50908,50910],{"class":130,"line":507},[128,50890,50891],{"class":138},"            sum_normalized_pixel_values ",[128,50893,13023],{"class":134},[128,50895,50896],{"class":138}," np.sum(normalized_image_array, ",[128,50898,50899],{"class":266},"axis",[128,50901,270],{"class":134},[128,50903,253],{"class":138},[128,50905,2452],{"class":166},[128,50907,258],{"class":138},[128,50909,2592],{"class":166},[128,50911,3034],{"class":138},[128,50913,50914],{"class":130,"line":519},[128,50915,160],{"emptyLinePlaceholder":159},[128,50917,50918],{"class":130,"line":524},[128,50919,50920],{"class":3814},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[128,50922,50923,50926,50928,50931,50933],{"class":130,"line":529},[128,50924,50925],{"class":138},"mean ",[128,50927,270],{"class":134},[128,50929,50930],{"class":138}," sum_normalized_pixel_values ",[128,50932,4333],{"class":134},[128,50934,50935],{"class":138}," total_pixels\n",[128,50937,50938],{"class":130,"line":540},[128,50939,160],{"emptyLinePlaceholder":159},[128,50941,50942,50945,50947,50949,50951],{"class":130,"line":555},[128,50943,50944],{"class":138},"sum_squared_diff ",[128,50946,270],{"class":134},[128,50948,50728],{"class":138},[128,50950,3827],{"class":166},[128,50952,180],{"class":138},[128,50954,50955],{"class":130,"line":576},[128,50956,160],{"emptyLinePlaceholder":159},[128,50958,50959],{"class":130,"line":584},[128,50960,50961],{"class":3814},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[128,50963,50964],{"class":130,"line":593},[128,50965,50966],{"class":3814},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[128,50968,50969],{"class":130,"line":598},[128,50970,50971],{"class":3814},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[128,50973,50974],{"class":130,"line":603},[128,50975,50976],{"class":3814},"# Image.open(image_path)：打开图片\n",[128,50978,50979],{"class":130,"line":614},[128,50980,50981],{"class":3814},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[128,50983,50984,50986,50988,50990],{"class":130,"line":625},[128,50985,2404],{"class":134},[128,50987,50751],{"class":138},[128,50989,549],{"class":134},[128,50991,50756],{"class":138},[128,50993,50994,50996,50998,51000],{"class":130,"line":633},[128,50995,543],{"class":134},[128,50997,50763],{"class":138},[128,50999,549],{"class":134},[128,51001,50768],{"class":138},[128,51003,51004,51006,51008,51010,51012,51014,51016,51018,51020,51022],{"class":130,"line":649},[128,51005,558],{"class":134},[128,51007,50775],{"class":138},[128,51009,50778],{"class":176},[128,51011,258],{"class":138},[128,51013,50783],{"class":176},[128,51015,258],{"class":138},[128,51017,50788],{"class":176},[128,51019,258],{"class":138},[128,51021,50793],{"class":176},[128,51023,51024],{"class":138},")):\n",[128,51026,51027,51029,51031],{"class":130,"line":660},[128,51028,49058],{"class":138},[128,51030,270],{"class":134},[128,51032,50808],{"class":138},[128,51034,51035,51037,51039],{"class":130,"line":673},[128,51036,50813],{"class":138},[128,51038,270],{"class":134},[128,51040,50818],{"class":138},[128,51042,51043,51045,51047],{"class":130,"line":678},[128,51044,50823],{"class":138},[128,51046,270],{"class":134},[128,51048,50828],{"class":138},[128,51050,51051],{"class":130,"line":683},[128,51052,50837],{"class":3814},[128,51054,51055,51057,51059,51061,51063],{"class":130,"line":693},[128,51056,50842],{"class":138},[128,51058,270],{"class":134},[128,51060,50847],{"class":138},[128,51062,4333],{"class":134},[128,51064,50852],{"class":166},[128,51066,51067],{"class":130,"line":702},[128,51068,50866],{"class":3814},[128,51070,51071],{"class":130,"line":709},[128,51072,51073],{"class":3814},"            # print(mean.shape)\n",[128,51075,51076],{"class":130,"line":723},[128,51077,50861],{"class":3814},[128,51079,51080],{"class":130,"line":732},[128,51081,160],{"emptyLinePlaceholder":159},[128,51083,51084,51087],{"class":130,"line":744},[128,51085,51086],{"class":134},"            try",[128,51088,241],{"class":138},[128,51090,51091,51094,51096,51099,51101,51104,51106],{"class":130,"line":749},[128,51092,51093],{"class":138},"                diff ",[128,51095,270],{"class":134},[128,51097,51098],{"class":138}," (normalized_image_array ",[128,51100,4281],{"class":134},[128,51102,51103],{"class":138}," mean) ",[128,51105,14188],{"class":134},[128,51107,51108],{"class":166}," 2\n",[128,51110,51111,51114,51116,51119,51121,51123,51125,51127,51129,51131],{"class":130,"line":754},[128,51112,51113],{"class":138},"                sum_squared_diff ",[128,51115,13023],{"class":134},[128,51117,51118],{"class":138}," np.sum(diff, ",[128,51120,50899],{"class":266},[128,51122,270],{"class":134},[128,51124,253],{"class":138},[128,51126,2452],{"class":166},[128,51128,258],{"class":138},[128,51130,2592],{"class":166},[128,51132,3034],{"class":138},[128,51134,51135,51138],{"class":130,"line":764},[128,51136,51137],{"class":134},"            except",[128,51139,241],{"class":138},[128,51141,51142,51145,51147,51149,51152],{"class":130,"line":782},[128,51143,51144],{"class":166},"                print",[128,51146,253],{"class":138},[128,51148,3019],{"class":134},[128,51150,51151],{"class":176},"\"捕获到自定义异常\"",[128,51153,180],{"class":138},[128,51155,51156],{"class":130,"line":787},[128,51157,51158],{"class":3814},"            # diff = (normalized_image_array - mean) ** 2\n",[128,51160,51161],{"class":130,"line":795},[128,51162,51163],{"class":3814},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[128,51165,51166],{"class":130,"line":807},[128,51167,160],{"emptyLinePlaceholder":159},[128,51169,51170,51173,51175,51178,51180],{"class":130,"line":813},[128,51171,51172],{"class":138},"variance ",[128,51174,270],{"class":134},[128,51176,51177],{"class":138}," sum_squared_diff ",[128,51179,4333],{"class":134},[128,51181,50935],{"class":138},[128,51183,51184],{"class":130,"line":818},[128,51185,160],{"emptyLinePlaceholder":159},[128,51187,51188,51190,51192,51195],{"class":130,"line":835},[128,51189,2469],{"class":166},[128,51191,253],{"class":138},[128,51193,51194],{"class":176},"\"Mean:\"",[128,51196,51197],{"class":138},", mean)\n",[128,51199,51200,51202,51204,51207],{"class":130,"line":851},[128,51201,2469],{"class":166},[128,51203,253],{"class":138},[128,51205,51206],{"class":176},"\"Variance:\"",[128,51208,51209],{"class":138},", variance)\n",[106,51211,51213],{"className":122,"code":51212,"language":124,"meta":112,"style":112},"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",[114,51214,51215,51221,51227,51237,51243,51253,51267,51277,51287,51297,51301,51311,51321,51325,51329,51337,51342,51347,51366,51370,51375,51380,51385,51390,51431,51436,51446,51451,51464,51469,51474,51479,51484,51489,51493,51498,51503,51525,51529,51561,51575,51585,51595,51599,51609,51623,51633,51643,51653,51659,51663,51667,51671,51675,51679,51687,51707,51711,51715,51719,51723,51739,51743,51747,51755,51759,51763,51771,51775,51779,51783,51791,51795,51799,51803,51811,51815,51823,51827,51835,51839,51847,51851,51859,51863,51867,51875,51879,51883,51895,51919,51933,51937,51941,51945,51953,51957,51965,51969,51977,51981,51989,51993,52001,52005,52013,52017,52029,52033,52041,52045,52053,52057,52061,52065,52069,52077,52081,52097,52101,52109,52113,52117,52121,52125,52129,52133,52137,52153,52157,52169,52173,52185,52189,52201,52205,52213,52217,52225,52229,52233,52237,52243,52247,52255,52259,52275,52279,52287,52291,52307,52319,52323,52335,52339,52343,52351,52355,52359,52367,52371,52379,52383,52391,52395,52399,52441,52483,52487,52491,52507,52511,52527,52531,52535,52543,52547,52551,52563,52601,52605,52609,52617,52621,52635,52645,52651,52657,52663,52669,52673,52677,52683,52687,52691,52699,52703,52721,52725,52729,52733,52749,52753,52757,52761,52765,52769,52789,52809,52813,52817,52821,52829,52837,52841,52857,52877,52897,52901,52906,52915,52924,52929,52934,52939,52952,52957,52966,52975,52992],{"__ignoreMap":112},[128,51216,51217,51219],{"class":130,"line":131},[128,51218,135],{"class":134},[128,51220,35291],{"class":138},[128,51222,51223,51225],{"class":130,"line":142},[128,51224,135],{"class":134},[128,51226,35298],{"class":138},[128,51228,51229,51231,51233,51235],{"class":130,"line":156},[128,51230,135],{"class":134},[128,51232,35309],{"class":138},[128,51234,279],{"class":134},[128,51236,35314],{"class":138},[128,51238,51239,51241],{"class":130,"line":163},[128,51240,135],{"class":134},[128,51242,33876],{"class":138},[128,51244,51245,51247,51249,51251],{"class":130,"line":183},[128,51246,145],{"class":134},[128,51248,34885],{"class":138},[128,51250,135],{"class":134},[128,51252,35331],{"class":138},[128,51254,51255,51257,51259,51261,51264],{"class":130,"line":188},[128,51256,145],{"class":134},[128,51258,34839],{"class":138},[128,51260,135],{"class":134},[128,51262,51263],{"class":138}," ImageFolder ",[128,51265,51266],{"class":3814},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[128,51268,51269,51271,51273,51275],{"class":130,"line":193},[128,51270,145],{"class":134},[128,51272,34868],{"class":138},[128,51274,135],{"class":134},[128,51276,34873],{"class":138},[128,51278,51279,51281,51283,51285],{"class":130,"line":206},[128,51280,135],{"class":134},[128,51282,34885],{"class":138},[128,51284,279],{"class":134},[128,51286,34890],{"class":138},[128,51288,51289,51291,51293,51295],{"class":130,"line":221},[128,51290,135],{"class":134},[128,51292,34902],{"class":138},[128,51294,279],{"class":134},[128,51296,34907],{"class":138},[128,51298,51299],{"class":130,"line":230},[128,51300,35376],{"class":3814},[128,51302,51303,51305,51307,51309],{"class":130,"line":235},[128,51304,145],{"class":134},[128,51306,35383],{"class":138},[128,51308,135],{"class":134},[128,51310,46417],{"class":138},[128,51312,51313,51315,51317,51319],{"class":130,"line":244},[128,51314,145],{"class":134},[128,51316,34218],{"class":138},[128,51318,135],{"class":134},[128,51320,34223],{"class":138},[128,51322,51323],{"class":130,"line":287},[128,51324,160],{"emptyLinePlaceholder":159},[128,51326,51327],{"class":130,"line":301},[128,51328,35411],{"class":3814},[128,51330,51331,51333,51335],{"class":130,"line":310},[128,51332,196],{"class":134},[128,51334,35418],{"class":199},[128,51336,203],{"class":138},[128,51338,51339],{"class":130,"line":323},[128,51340,51341],{"class":3814},"    # 导入自己的数据集，并进行数据处理\n",[128,51343,51344],{"class":130,"line":330},[128,51345,51346],{"class":3814},"    # 定义数据集的路径\n",[128,51348,51349,51352,51354,51356,51358,51360,51364],{"class":130,"line":335},[128,51350,51351],{"class":166},"    ROOT_PATH",[128,51353,270],{"class":134},[128,51355,4419],{"class":134},[128,51357,1376],{"class":176},[128,51359,4307],{"class":166},[128,51361,51363],{"class":51362},"sA_wV","\u002Fdata\u002Ftrain",[128,51365,1394],{"class":176},[128,51367,51368],{"class":130,"line":340},[128,51369,160],{"emptyLinePlaceholder":159},[128,51371,51372],{"class":130,"line":351},[128,51373,51374],{"class":3814},"    # 定义归一化方法\n",[128,51376,51377],{"class":130,"line":384},[128,51378,51379],{"class":3814},"    # 这里需要先计算一下数据集的均值和方差\n",[128,51381,51382],{"class":130,"line":414},[128,51383,51384],{"class":3814},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[128,51386,51387],{"class":130,"line":419},[128,51388,51389],{"class":3814},"    # 第一个参数是均值，第二个参数是方差\n",[128,51391,51392,51395,51397,51400,51403,51405,51408,51410,51413,51416,51419,51421,51424,51426,51429],{"class":130,"line":424},[128,51393,51394],{"class":138},"    normalize",[128,51396,270],{"class":134},[128,51398,51399],{"class":138},"transforms.Normalize([",[128,51401,51402],{"class":166},"0.162",[128,51404,4128],{"class":138},[128,51406,51407],{"class":166},"0.151",[128,51409,4128],{"class":138},[128,51411,51412],{"class":166},"0.138",[128,51414,51415],{"class":138},"],[",[128,51417,51418],{"class":166},"0.058",[128,51420,4128],{"class":138},[128,51422,51423],{"class":166},"0.052",[128,51425,4128],{"class":138},[128,51427,51428],{"class":166},"0.048",[128,51430,2595],{"class":138},[128,51432,51433],{"class":130,"line":434},[128,51434,51435],{"class":3814},"    # 定义数据集处理方法变量\n",[128,51437,51438,51441,51443],{"class":130,"line":447},[128,51439,51440],{"class":138},"    train_transform",[128,51442,270],{"class":134},[128,51444,51445],{"class":138},"transforms.Compose([\n",[128,51447,51448],{"class":130,"line":459},[128,51449,51450],{"class":3814},"        # 调整图像大小为224*224\n",[128,51452,51453,51456,51458,51460,51462],{"class":130,"line":471},[128,51454,51455],{"class":138},"        transforms.Resize((",[128,51457,34970],{"class":166},[128,51459,4128],{"class":138},[128,51461,34970],{"class":166},[128,51463,46008],{"class":138},[128,51465,51466],{"class":130,"line":483},[128,51467,51468],{"class":3814},"        # 将图像转换为张量\n",[128,51470,51471],{"class":130,"line":495},[128,51472,51473],{"class":138},"        transforms.ToTensor(),\n",[128,51475,51476],{"class":130,"line":507},[128,51477,51478],{"class":138},"        normalize])\n",[128,51480,51481],{"class":130,"line":519},[128,51482,51483],{"class":3814},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[128,51485,51486],{"class":130,"line":524},[128,51487,51488],{"class":3814},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[128,51490,51491],{"class":130,"line":529},[128,51492,160],{"emptyLinePlaceholder":159},[128,51494,51495],{"class":130,"line":540},[128,51496,51497],{"class":3814},"    # 加载数据集\n",[128,51499,51500],{"class":130,"line":555},[128,51501,51502],{"class":3814},"    # 传入数据集路径与处理方法\n",[128,51504,51505,51507,51509,51512,51515,51517,51520,51522],{"class":130,"line":576},[128,51506,35425],{"class":138},[128,51508,270],{"class":134},[128,51510,51511],{"class":138},"ImageFolder(",[128,51513,51514],{"class":166},"ROOT_PATH",[128,51516,4128],{"class":138},[128,51518,51519],{"class":266},"transform",[128,51521,270],{"class":134},[128,51523,51524],{"class":138},"train_transform)\n",[128,51526,51527],{"class":130,"line":584},[128,51528,160],{"emptyLinePlaceholder":159},[128,51530,51531,51533,51535,51537,51539,51541,51543,51545,51547,51549,51551,51553,51555,51557,51559],{"class":130,"line":593},[128,51532,35477],{"class":138},[128,51534,270],{"class":134},[128,51536,35482],{"class":138},[128,51538,35485],{"class":166},[128,51540,253],{"class":138},[128,51542,35490],{"class":166},[128,51544,4205],{"class":134},[128,51546,10915],{"class":166},[128,51548,35497],{"class":138},[128,51550,35485],{"class":166},[128,51552,253],{"class":138},[128,51554,35504],{"class":166},[128,51556,4205],{"class":134},[128,51558,10915],{"class":166},[128,51560,35511],{"class":138},[128,51562,51563,51565,51567,51569,51571,51573],{"class":130,"line":598},[128,51564,35516],{"class":138},[128,51566,270],{"class":134},[128,51568,35521],{"class":138},[128,51570,35006],{"class":266},[128,51572,270],{"class":134},[128,51574,35011],{"class":138},[128,51576,51577,51579,51581,51583],{"class":130,"line":603},[128,51578,35532],{"class":266},[128,51580,270],{"class":134},[128,51582,3950],{"class":166},[128,51584,2665],{"class":138},[128,51586,51587,51589,51591,51593],{"class":130,"line":614},[128,51588,35544],{"class":266},[128,51590,270],{"class":134},[128,51592,34945],{"class":166},[128,51594,2665],{"class":138},[128,51596,51597],{"class":130,"line":625},[128,51598,35555],{"class":3814},[128,51600,51601,51603,51605,51607],{"class":130,"line":633},[128,51602,35560],{"class":266},[128,51604,270],{"class":134},[128,51606,4145],{"class":166},[128,51608,180],{"class":138},[128,51610,51611,51613,51615,51617,51619,51621],{"class":130,"line":649},[128,51612,35571],{"class":138},[128,51614,270],{"class":134},[128,51616,35003],{"class":138},[128,51618,35006],{"class":266},[128,51620,270],{"class":134},[128,51622,35582],{"class":138},[128,51624,51625,51627,51629,51631],{"class":130,"line":660},[128,51626,35587],{"class":266},[128,51628,270],{"class":134},[128,51630,3950],{"class":166},[128,51632,2665],{"class":138},[128,51634,51635,51637,51639,51641],{"class":130,"line":673},[128,51636,35598],{"class":266},[128,51638,270],{"class":134},[128,51640,34945],{"class":166},[128,51642,2665],{"class":138},[128,51644,51645,51647,51649,51651],{"class":130,"line":678},[128,51646,35609],{"class":266},[128,51648,270],{"class":134},[128,51650,4145],{"class":166},[128,51652,180],{"class":138},[128,51654,51655,51657],{"class":130,"line":683},[128,51656,587],{"class":134},[128,51658,35622],{"class":138},[128,51660,51661],{"class":130,"line":693},[128,51662,160],{"emptyLinePlaceholder":159},[128,51664,51665],{"class":130,"line":702},[128,51666,35631],{"class":3814},[128,51668,51669],{"class":130,"line":709},[128,51670,35636],{"class":3814},[128,51672,51673],{"class":130,"line":723},[128,51674,160],{"emptyLinePlaceholder":159},[128,51676,51677],{"class":130,"line":732},[128,51678,35645],{"class":3814},[128,51680,51681,51683,51685],{"class":130,"line":744},[128,51682,196],{"class":134},[128,51684,35652],{"class":199},[128,51686,35655],{"class":138},[128,51688,51689,51691,51693,51695,51697,51699,51701,51703,51705],{"class":130,"line":749},[128,51690,34709],{"class":138},[128,51692,270],{"class":134},[128,51694,33931],{"class":138},[128,51696,34716],{"class":176},[128,51698,5302],{"class":134},[128,51700,34721],{"class":138},[128,51702,5299],{"class":134},[128,51704,35674],{"class":176},[128,51706,180],{"class":138},[128,51708,51709],{"class":130,"line":754},[128,51710,160],{"emptyLinePlaceholder":159},[128,51712,51713],{"class":130,"line":764},[128,51714,35689],{"class":3814},[128,51716,51717],{"class":130,"line":782},[128,51718,35694],{"class":3814},[128,51720,51721],{"class":130,"line":787},[128,51722,35699],{"class":3814},[128,51724,51725,51727,51729,51731,51733,51735,51737],{"class":130,"line":795},[128,51726,35704],{"class":138},[128,51728,270],{"class":134},[128,51730,35709],{"class":138},[128,51732,35712],{"class":266},[128,51734,270],{"class":134},[128,51736,35717],{"class":166},[128,51738,180],{"class":138},[128,51740,51741],{"class":130,"line":807},[128,51742,160],{"emptyLinePlaceholder":159},[128,51744,51745],{"class":130,"line":813},[128,51746,35728],{"class":3814},[128,51748,51749,51751,51753],{"class":130,"line":818},[128,51750,35733],{"class":138},[128,51752,270],{"class":134},[128,51754,35738],{"class":138},[128,51756,51757],{"class":130,"line":835},[128,51758,160],{"emptyLinePlaceholder":159},[128,51760,51761],{"class":130,"line":851},[128,51762,35747],{"class":3814},[128,51764,51765,51767,51769],{"class":130,"line":867},[128,51766,34761],{"class":138},[128,51768,270],{"class":134},[128,51770,35756],{"class":138},[128,51772,51773],{"class":130,"line":872},[128,51774,35761],{"class":3814},[128,51776,51777],{"class":130,"line":878},[128,51778,35766],{"class":3814},[128,51780,51781],{"class":130,"line":887},[128,51782,35771],{"class":3814},[128,51784,51785,51787,51789],{"class":130,"line":896},[128,51786,35776],{"class":138},[128,51788,270],{"class":134},[128,51790,35781],{"class":138},[128,51792,51793],{"class":130,"line":905},[128,51794,160],{"emptyLinePlaceholder":159},[128,51796,51797],{"class":130,"line":914},[128,51798,35794],{"class":3814},[128,51800,51801],{"class":130,"line":920},[128,51802,35799],{"class":3814},[128,51804,51805,51807,51809],{"class":130,"line":926},[128,51806,35804],{"class":138},[128,51808,270],{"class":134},[128,51810,35809],{"class":166},[128,51812,51813],{"class":130,"line":938},[128,51814,35814],{"class":3814},[128,51816,51817,51819,51821],{"class":130,"line":943},[128,51818,35819],{"class":138},[128,51820,270],{"class":134},[128,51822,35824],{"class":138},[128,51824,51825],{"class":130,"line":948},[128,51826,35829],{"class":3814},[128,51828,51829,51831,51833],{"class":130,"line":958},[128,51830,35834],{"class":138},[128,51832,270],{"class":134},[128,51834,35824],{"class":138},[128,51836,51837],{"class":130,"line":974},[128,51838,35843],{"class":3814},[128,51840,51841,51843,51845],{"class":130,"line":985},[128,51842,35848],{"class":138},[128,51844,270],{"class":134},[128,51846,35824],{"class":138},[128,51848,51849],{"class":130,"line":990},[128,51850,35857],{"class":3814},[128,51852,51853,51855,51857],{"class":130,"line":1005},[128,51854,35862],{"class":138},[128,51856,270],{"class":134},[128,51858,35824],{"class":138},[128,51860,51861],{"class":130,"line":1017},[128,51862,160],{"emptyLinePlaceholder":159},[128,51864,51865],{"class":130,"line":1022},[128,51866,35875],{"class":3814},[128,51868,51869,51871,51873],{"class":130,"line":1027},[128,51870,35880],{"class":138},[128,51872,270],{"class":134},[128,51874,35885],{"class":138},[128,51876,51877],{"class":130,"line":1033},[128,51878,160],{"emptyLinePlaceholder":159},[128,51880,51881],{"class":130,"line":1038},[128,51882,35898],{"class":3814},[128,51884,51885,51887,51889,51891,51893],{"class":130,"line":1050},[128,51886,543],{"class":134},[128,51888,35905],{"class":138},[128,51890,549],{"class":134},[128,51892,35910],{"class":166},[128,51894,35913],{"class":138},[128,51896,51897,51899,51901,51903,51905,51907,51909,51911,51913,51915,51917],{"class":130,"line":1055},[128,51898,313],{"class":166},[128,51900,253],{"class":138},[128,51902,35922],{"class":176},[128,51904,35925],{"class":166},[128,51906,4333],{"class":176},[128,51908,35925],{"class":166},[128,51910,1376],{"class":176},[128,51912,35934],{"class":138},[128,51914,4281],{"class":134},[128,51916,2592],{"class":166},[128,51918,3034],{"class":138},[128,51920,51921,51923,51925,51927,51929,51931],{"class":130,"line":1060},[128,51922,313],{"class":166},[128,51924,253],{"class":138},[128,51926,35949],{"class":176},[128,51928,4205],{"class":134},[128,51930,4196],{"class":166},[128,51932,180],{"class":138},[128,51934,51935],{"class":130,"line":1070},[128,51936,160],{"emptyLinePlaceholder":159},[128,51938,51939],{"class":130,"line":1086},[128,51940,35964],{"class":3814},[128,51942,51943],{"class":130,"line":1095},[128,51944,35969],{"class":3814},[128,51946,51947,51949,51951],{"class":130,"line":1100},[128,51948,35974],{"class":138},[128,51950,270],{"class":134},[128,51952,35809],{"class":166},[128,51954,51955],{"class":130,"line":1113},[128,51956,35983],{"class":3814},[128,51958,51959,51961,51963],{"class":130,"line":1124},[128,51960,35988],{"class":138},[128,51962,270],{"class":134},[128,51964,6656],{"class":166},[128,51966,51967],{"class":130,"line":1129},[128,51968,35997],{"class":3814},[128,51970,51971,51973,51975],{"class":130,"line":1134},[128,51972,36002],{"class":138},[128,51974,270],{"class":134},[128,51976,35809],{"class":166},[128,51978,51979],{"class":130,"line":1150},[128,51980,36011],{"class":3814},[128,51982,51983,51985,51987],{"class":130,"line":1164},[128,51984,36016],{"class":138},[128,51986,270],{"class":134},[128,51988,6656],{"class":166},[128,51990,51991],{"class":130,"line":1178},[128,51992,36025],{"class":3814},[128,51994,51995,51997,51999],{"class":130,"line":1183},[128,51996,36030],{"class":138},[128,51998,270],{"class":134},[128,52000,6656],{"class":166},[128,52002,52003],{"class":130,"line":1199},[128,52004,36039],{"class":3814},[128,52006,52007,52009,52011],{"class":130,"line":1214},[128,52008,36044],{"class":138},[128,52010,270],{"class":134},[128,52012,6656],{"class":166},[128,52014,52015],{"class":130,"line":1229},[128,52016,36053],{"class":3814},[128,52018,52019,52021,52023,52025,52027],{"class":130,"line":1234},[128,52020,2141],{"class":134},[128,52022,35070],{"class":138},[128,52024,549],{"class":134},[128,52026,35075],{"class":166},[128,52028,36066],{"class":138},[128,52030,52031],{"class":130,"line":1239},[128,52032,36071],{"class":3814},[128,52034,52035,52037,52039],{"class":130,"line":1251},[128,52036,36076],{"class":138},[128,52038,270],{"class":134},[128,52040,36081],{"class":138},[128,52042,52043],{"class":130,"line":1256},[128,52044,36086],{"class":3814},[128,52046,52047,52049,52051],{"class":130,"line":1261},[128,52048,36091],{"class":138},[128,52050,270],{"class":134},[128,52052,36096],{"class":138},[128,52054,52055],{"class":130,"line":1271},[128,52056,36101],{"class":3814},[128,52058,52059],{"class":130,"line":1287},[128,52060,36106],{"class":138},[128,52062,52063],{"class":130,"line":1296},[128,52064,36111],{"class":3814},[128,52066,52067],{"class":130,"line":1301},[128,52068,36116],{"class":3814},[128,52070,52071,52073,52075],{"class":130,"line":1314},[128,52072,36121],{"class":138},[128,52074,270],{"class":134},[128,52076,36126],{"class":138},[128,52078,52079],{"class":130,"line":1325},[128,52080,36131],{"class":3814},[128,52082,52083,52085,52087,52089,52091,52093,52095],{"class":130,"line":1330},[128,52084,36136],{"class":138},[128,52086,270],{"class":134},[128,52088,36141],{"class":138},[128,52090,36144],{"class":266},[128,52092,270],{"class":134},[128,52094,2592],{"class":166},[128,52096,180],{"class":138},[128,52098,52099],{"class":130,"line":1335},[128,52100,36155],{"class":3814},[128,52102,52103,52105,52107],{"class":130,"line":1341},[128,52104,36160],{"class":138},[128,52106,270],{"class":134},[128,52108,36165],{"class":138},[128,52110,52111],{"class":130,"line":1346},[128,52112,36170],{"class":3814},[128,52114,52115],{"class":130,"line":1351},[128,52116,36175],{"class":138},[128,52118,52119],{"class":130,"line":1362},[128,52120,36180],{"class":3814},[128,52122,52123],{"class":130,"line":1370},[128,52124,36185],{"class":138},[128,52126,52127],{"class":130,"line":1397},[128,52128,36190],{"class":3814},[128,52130,52131],{"class":130,"line":1417},[128,52132,36195],{"class":138},[128,52134,52135],{"class":130,"line":1437},[128,52136,36200],{"class":3814},[128,52138,52139,52141,52143,52145,52147,52149,52151],{"class":130,"line":1458},[128,52140,36205],{"class":138},[128,52142,13023],{"class":134},[128,52144,36210],{"class":138},[128,52146,4205],{"class":134},[128,52148,36215],{"class":138},[128,52150,2452],{"class":166},[128,52152,180],{"class":138},[128,52154,52155],{"class":130,"line":1464},[128,52156,36224],{"class":3814},[128,52158,52159,52161,52163,52165,52167],{"class":130,"line":1469},[128,52160,36229],{"class":138},[128,52162,13023],{"class":134},[128,52164,36234],{"class":138},[128,52166,570],{"class":134},[128,52168,36239],{"class":138},[128,52170,52171],{"class":130,"line":1474},[128,52172,36244],{"class":3814},[128,52174,52175,52177,52179,52181,52183],{"class":130,"line":1484},[128,52176,36249],{"class":138},[128,52178,13023],{"class":134},[128,52180,36215],{"class":138},[128,52182,2452],{"class":166},[128,52184,180],{"class":138},[128,52186,52187],{"class":130,"line":1493},[128,52188,36262],{"class":3814},[128,52190,52191,52193,52195,52197,52199],{"class":130,"line":1505},[128,52192,2141],{"class":134},[128,52194,36269],{"class":138},[128,52196,549],{"class":134},[128,52198,35075],{"class":166},[128,52200,36276],{"class":138},[128,52202,52203],{"class":130,"line":1510},[128,52204,36281],{"class":3814},[128,52206,52207,52209,52211],{"class":130,"line":1515},[128,52208,36076],{"class":138},[128,52210,270],{"class":134},[128,52212,36081],{"class":138},[128,52214,52215],{"class":130,"line":1543},[128,52216,36294],{"class":3814},[128,52218,52219,52221,52223],{"class":130,"line":1554},[128,52220,36091],{"class":138},[128,52222,270],{"class":134},[128,52224,36096],{"class":138},[128,52226,52227],{"class":130,"line":1560},[128,52228,36307],{"class":3814},[128,52230,52231],{"class":130,"line":1565},[128,52232,36312],{"class":138},[128,52234,52235],{"class":130,"line":1570},[128,52236,39748],{"class":3814},[128,52238,52239,52241],{"class":130,"line":1580},[128,52240,36317],{"class":134},[128,52242,36320],{"class":138},[128,52244,52245],{"class":130,"line":1591},[128,52246,36325],{"class":3814},[128,52248,52249,52251,52253],{"class":130,"line":1596},[128,52250,39763],{"class":138},[128,52252,270],{"class":134},[128,52254,36126],{"class":138},[128,52256,52257],{"class":130,"line":1605},[128,52258,36340],{"class":3814},[128,52260,52261,52263,52265,52267,52269,52271,52273],{"class":130,"line":1611},[128,52262,39776],{"class":138},[128,52264,270],{"class":134},[128,52266,36141],{"class":138},[128,52268,36144],{"class":266},[128,52270,270],{"class":134},[128,52272,2592],{"class":166},[128,52274,180],{"class":138},[128,52276,52277],{"class":130,"line":1628},[128,52278,36363],{"class":3814},[128,52280,52281,52283,52285],{"class":130,"line":1633},[128,52282,39797],{"class":138},[128,52284,270],{"class":134},[128,52286,36165],{"class":138},[128,52288,52289],{"class":130,"line":1648},[128,52290,36378],{"class":3814},[128,52292,52293,52295,52297,52299,52301,52303,52305],{"class":130,"line":1654},[128,52294,39810],{"class":138},[128,52296,13023],{"class":134},[128,52298,39815],{"class":138},[128,52300,4205],{"class":134},[128,52302,36215],{"class":138},[128,52304,2452],{"class":166},[128,52306,180],{"class":138},[128,52308,52309,52311,52313,52315,52317],{"class":130,"line":1669},[128,52310,39828],{"class":138},[128,52312,13023],{"class":134},[128,52314,36234],{"class":138},[128,52316,570],{"class":134},[128,52318,36239],{"class":138},[128,52320,52321],{"class":130,"line":1675},[128,52322,39841],{"class":3814},[128,52324,52325,52327,52329,52331,52333],{"class":130,"line":1689},[128,52326,39846],{"class":138},[128,52328,13023],{"class":134},[128,52330,36215],{"class":138},[128,52332,2452],{"class":166},[128,52334,180],{"class":138},[128,52336,52337],{"class":130,"line":1695},[128,52338,36435],{"class":3814},[128,52340,52341],{"class":130,"line":1709},[128,52342,36440],{"class":3814},[128,52344,52345,52347,52349],{"class":130,"line":1715},[128,52346,36445],{"class":138},[128,52348,4333],{"class":134},[128,52350,36450],{"class":138},[128,52352,52353],{"class":130,"line":1729},[128,52354,36455],{"class":3814},[128,52356,52357],{"class":130,"line":1735},[128,52358,36460],{"class":3814},[128,52360,52361,52363,52365],{"class":130,"line":1749},[128,52362,36465],{"class":138},[128,52364,4333],{"class":134},[128,52366,36450],{"class":138},[128,52368,52369],{"class":130,"line":1761},[128,52370,36474],{"class":3814},[128,52372,52373,52375,52377],{"class":130,"line":1767},[128,52374,36479],{"class":138},[128,52376,4333],{"class":134},[128,52378,36484],{"class":138},[128,52380,52381],{"class":130,"line":1775},[128,52382,36489],{"class":3814},[128,52384,52385,52387,52389],{"class":130,"line":1787},[128,52386,36494],{"class":138},[128,52388,4333],{"class":134},[128,52390,36484],{"class":138},[128,52392,52393],{"class":130,"line":1792},[128,52394,160],{"emptyLinePlaceholder":159},[128,52396,52397],{"class":130,"line":1797},[128,52398,36507],{"class":3814},[128,52400,52401,52403,52405,52407,52409,52411,52413,52415,52417,52419,52421,52423,52425,52427,52429,52431,52433,52435,52437,52439],{"class":130,"line":1814},[128,52402,313],{"class":166},[128,52404,253],{"class":138},[128,52406,7160],{"class":176},[128,52408,35925],{"class":166},[128,52410,36520],{"class":176},[128,52412,1379],{"class":166},[128,52414,36525],{"class":134},[128,52416,1453],{"class":166},[128,52418,36530],{"class":176},[128,52420,1379],{"class":166},[128,52422,36525],{"class":134},[128,52424,1453],{"class":166},[128,52426,7160],{"class":176},[128,52428,36541],{"class":138},[128,52430,4281],{"class":134},[128,52432,2592],{"class":166},[128,52434,36548],{"class":138},[128,52436,4281],{"class":134},[128,52438,2592],{"class":166},[128,52440,36555],{"class":138},[128,52442,52443,52445,52447,52449,52451,52453,52455,52457,52459,52461,52463,52465,52467,52469,52471,52473,52475,52477,52479,52481],{"class":130,"line":36751},[128,52444,313],{"class":166},[128,52446,253],{"class":138},[128,52448,7160],{"class":176},[128,52450,35925],{"class":166},[128,52452,36568],{"class":176},[128,52454,1379],{"class":166},[128,52456,36525],{"class":134},[128,52458,1453],{"class":166},[128,52460,36577],{"class":176},[128,52462,1379],{"class":166},[128,52464,36525],{"class":134},[128,52466,1453],{"class":166},[128,52468,7160],{"class":176},[128,52470,36588],{"class":138},[128,52472,4281],{"class":134},[128,52474,2592],{"class":166},[128,52476,36595],{"class":138},[128,52478,4281],{"class":134},[128,52480,2592],{"class":166},[128,52482,36555],{"class":138},[128,52484,52485],{"class":130,"line":36757},[128,52486,160],{"emptyLinePlaceholder":159},[128,52488,52489],{"class":130,"line":36768},[128,52490,36610],{"class":3814},[128,52492,52493,52495,52497,52499,52501,52503,52505],{"class":130,"line":36774},[128,52494,558],{"class":134},[128,52496,36617],{"class":138},[128,52498,4281],{"class":134},[128,52500,2592],{"class":166},[128,52502,1388],{"class":138},[128,52504,4705],{"class":134},[128,52506,36628],{"class":138},[128,52508,52509],{"class":130,"line":36780},[128,52510,36633],{"class":3814},[128,52512,52513,52515,52517,52519,52521,52523,52525],{"class":130,"line":36786},[128,52514,36638],{"class":138},[128,52516,3798],{"class":166},[128,52518,270],{"class":134},[128,52520,36645],{"class":138},[128,52522,4281],{"class":134},[128,52524,2592],{"class":166},[128,52526,2376],{"class":138},[128,52528,52529],{"class":130,"line":36804},[128,52530,36656],{"class":3814},[128,52532,52533],{"class":130,"line":36818},[128,52534,36661],{"class":3814},[128,52536,52537,52539,52541],{"class":130,"line":36827},[128,52538,36666],{"class":138},[128,52540,270],{"class":134},[128,52542,35781],{"class":138},[128,52544,52545],{"class":130,"line":36836},[128,52546,160],{"emptyLinePlaceholder":159},[128,52548,52549],{"class":130,"line":36845},[128,52550,36679],{"class":3814},[128,52552,52553,52555,52557,52559,52561],{"class":130,"line":36854},[128,52554,36684],{"class":138},[128,52556,270],{"class":134},[128,52558,36689],{"class":138},[128,52560,4281],{"class":134},[128,52562,36694],{"class":138},[128,52564,52565,52567,52569,52571,52573,52575,52577,52579,52581,52583,52585,52587,52589,52591,52593,52595,52597,52599],{"class":130,"line":36859},[128,52566,313],{"class":166},[128,52568,253],{"class":138},[128,52570,36703],{"class":176},[128,52572,1379],{"class":166},[128,52574,36708],{"class":134},[128,52576,1453],{"class":166},[128,52578,4293],{"class":176},[128,52580,1379],{"class":166},[128,52582,36708],{"class":134},[128,52584,1453],{"class":166},[128,52586,36721],{"class":176},[128,52588,36724],{"class":138},[128,52590,36727],{"class":134},[128,52592,4654],{"class":166},[128,52594,36732],{"class":138},[128,52596,4078],{"class":134},[128,52598,4654],{"class":166},[128,52600,3034],{"class":138},[128,52602,52603],{"class":130,"line":36865},[128,52604,40125],{"class":3814},[128,52606,52607],{"class":130,"line":36873},[128,52608,40130],{"class":3814},[128,52610,52611,52613,52615],{"class":130,"line":36878},[128,52612,40135],{"class":138},[128,52614,36763],{"class":176},[128,52616,180],{"class":138},[128,52618,52619],{"class":130,"line":36884},[128,52620,36783],{"class":3814},[128,52622,52623,52625,52627,52629,52631,52633],{"class":130,"line":36895},[128,52624,36789],{"class":138},[128,52626,270],{"class":134},[128,52628,36794],{"class":138},[128,52630,36797],{"class":266},[128,52632,270],{"class":134},[128,52634,5157],{"class":138},[128,52636,52637,52639,52641,52643],{"class":130,"line":36901},[128,52638,36807],{"class":176},[128,52640,4607],{"class":138},[128,52642,36812],{"class":166},[128,52644,36815],{"class":138},[128,52646,52647,52649],{"class":130,"line":36921},[128,52648,36821],{"class":176},[128,52650,36824],{"class":138},[128,52652,52653,52655],{"class":130,"line":36927},[128,52654,36830],{"class":176},[128,52656,36833],{"class":138},[128,52658,52659,52661],{"class":130,"line":36933},[128,52660,36839],{"class":176},[128,52662,36842],{"class":138},[128,52664,52665,52667],{"class":130,"line":36939},[128,52666,36848],{"class":176},[128,52668,36851],{"class":138},[128,52670,52671],{"class":130,"line":36956},[128,52672,917],{"class":138},[128,52674,52675],{"class":130,"line":36962},[128,52676,36862],{"class":3814},[128,52678,52679,52681],{"class":130,"line":36968},[128,52680,587],{"class":134},[128,52682,36870],{"class":138},[128,52684,52685],{"class":130,"line":36974},[128,52686,160],{"emptyLinePlaceholder":159},[128,52688,52689],{"class":130,"line":36980},[128,52690,36881],{"class":3814},[128,52692,52693,52695,52697],{"class":130,"line":36986},[128,52694,196],{"class":134},[128,52696,36889],{"class":199},[128,52698,36892],{"class":138},[128,52700,52701],{"class":130,"line":37013},[128,52702,36898],{"class":3814},[128,52704,52705,52707,52709,52711,52713,52715,52717,52719],{"class":130,"line":37037},[128,52706,36904],{"class":138},[128,52708,35162],{"class":266},[128,52710,270],{"class":134},[128,52712,253],{"class":138},[128,52714,4247],{"class":166},[128,52716,4128],{"class":138},[128,52718,4043],{"class":166},[128,52720,3034],{"class":138},[128,52722,52723],{"class":130,"line":37043},[128,52724,36924],{"class":3814},[128,52726,52727],{"class":130,"line":37049},[128,52728,36930],{"class":3814},[128,52730,52731],{"class":130,"line":37055},[128,52732,36936],{"class":3814},[128,52734,52735,52737,52739,52741,52743,52745,52747],{"class":130,"line":37066},[128,52736,35196],{"class":138},[128,52738,2592],{"class":166},[128,52740,4128],{"class":138},[128,52742,409],{"class":166},[128,52744,4128],{"class":138},[128,52746,2592],{"class":166},[128,52748,180],{"class":138},[128,52750,52751],{"class":130,"line":37077},[128,52752,36959],{"class":3814},[128,52754,52755],{"class":130,"line":37083},[128,52756,36965],{"class":3814},[128,52758,52759],{"class":130,"line":37100},[128,52760,36971],{"class":3814},[128,52762,52763],{"class":130,"line":37123},[128,52764,36977],{"class":3814},[128,52766,52767],{"class":130,"line":37146},[128,52768,36983],{"class":3814},[128,52770,52771,52773,52775,52777,52779,52781,52783,52785,52787],{"class":130,"line":37152},[128,52772,36989],{"class":138},[128,52774,36992],{"class":176},[128,52776,36995],{"class":138},[128,52778,36998],{"class":176},[128,52780,4128],{"class":138},[128,52782,37003],{"class":266},[128,52784,270],{"class":134},[128,52786,37008],{"class":176},[128,52788,180],{"class":138},[128,52790,52791,52793,52795,52797,52799,52801,52803,52805,52807],{"class":130,"line":37157},[128,52792,36989],{"class":138},[128,52794,36992],{"class":176},[128,52796,37020],{"class":138},[128,52798,37023],{"class":176},[128,52800,4128],{"class":138},[128,52802,37003],{"class":266},[128,52804,270],{"class":134},[128,52806,37032],{"class":176},[128,52808,180],{"class":138},[128,52810,52811],{"class":130,"line":37166},[128,52812,37040],{"class":3814},[128,52814,52815],{"class":130,"line":37176},[128,52816,37046],{"class":138},[128,52818,52819],{"class":130,"line":37182},[128,52820,37052],{"class":3814},[128,52822,52823,52825,52827],{"class":130,"line":37187},[128,52824,37058],{"class":138},[128,52826,37061],{"class":176},[128,52828,180],{"class":138},[128,52830,52831,52833,52835],{"class":130,"line":37193},[128,52832,37069],{"class":138},[128,52834,37072],{"class":176},[128,52836,180],{"class":138},[128,52838,52839],{"class":130,"line":37206},[128,52840,37080],{"class":3814},[128,52842,52843,52845,52847,52849,52851,52853,52855],{"class":130,"line":37212},[128,52844,35196],{"class":138},[128,52846,2592],{"class":166},[128,52848,4128],{"class":138},[128,52850,409],{"class":166},[128,52852,4128],{"class":138},[128,52854,409],{"class":166},[128,52856,180],{"class":138},[128,52858,52859,52861,52863,52865,52867,52869,52871,52873,52875],{"class":130,"line":37223},[128,52860,36989],{"class":138},[128,52862,36992],{"class":176},[128,52864,37107],{"class":138},[128,52866,36998],{"class":176},[128,52868,4128],{"class":138},[128,52870,37003],{"class":266},[128,52872,270],{"class":134},[128,52874,37118],{"class":176},[128,52876,180],{"class":138},[128,52878,52879,52881,52883,52885,52887,52889,52891,52893,52895],{"class":130,"line":37234},[128,52880,36989],{"class":138},[128,52882,36992],{"class":176},[128,52884,37130],{"class":138},[128,52886,37023],{"class":176},[128,52888,4128],{"class":138},[128,52890,37003],{"class":266},[128,52892,270],{"class":134},[128,52894,37141],{"class":176},[128,52896,180],{"class":138},[128,52898,52899],{"class":130,"line":37253},[128,52900,37149],{"class":3814},[128,52902,52904],{"class":130,"line":52903},219,[128,52905,37046],{"class":138},[128,52907,52909,52911,52913],{"class":130,"line":52908},220,[128,52910,37058],{"class":138},[128,52912,36992],{"class":176},[128,52914,180],{"class":138},[128,52916,52918,52920,52922],{"class":130,"line":52917},221,[128,52919,37069],{"class":138},[128,52921,37171],{"class":176},[128,52923,180],{"class":138},[128,52925,52927],{"class":130,"line":52926},222,[128,52928,37179],{"class":138},[128,52930,52932],{"class":130,"line":52931},223,[128,52933,160],{"emptyLinePlaceholder":159},[128,52935,52937],{"class":130,"line":52936},224,[128,52938,37190],{"class":3814},[128,52940,52942,52944,52946,52948,52950],{"class":130,"line":52941},225,[128,52943,1800],{"class":134},[128,52945,1803],{"class":166},[128,52947,570],{"class":134},[128,52949,34697],{"class":176},[128,52951,241],{"class":138},[128,52953,52955],{"class":130,"line":52954},226,[128,52956,37209],{"class":3814},[128,52958,52960,52962,52964],{"class":130,"line":52959},227,[128,52961,47932],{"class":138},[128,52963,270],{"class":134},[128,52965,47937],{"class":138},[128,52967,52969,52971,52973],{"class":130,"line":52968},228,[128,52970,37226],{"class":138},[128,52972,270],{"class":134},[128,52974,37231],{"class":138},[128,52976,52978,52980,52982,52984,52986,52988,52990],{"class":130,"line":52977},229,[128,52979,36789],{"class":138},[128,52981,270],{"class":134},[128,52983,47954],{"class":138},[128,52985,37244],{"class":266},[128,52987,270],{"class":134},[128,52989,4654],{"class":166},[128,52991,180],{"class":138},[128,52993,52995],{"class":130,"line":52994},230,[128,52996,37256],{"class":138},[25485,52998,53000],{"id":52999},"_242测试代码","2.4.2.测试代码",[19,53002,53003],{},"使用测试集进行测试与推理",[106,53005,53007],{"className":122,"code":53006,"language":124,"meta":112,"style":112},"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",[114,53008,53009,53015,53025,53035,53046,53056,53060,53064,53072,53077,53081,53098,53102,53106,53110,53114,53118,53150,53154,53162,53166,53178,53182,53186,53190,53194,53198,53202,53206,53210,53228,53242,53246,53256,53266,53276,53282,53286,53290,53298,53302,53318,53326,53330,53334,53342,53350,53354,53358,53362,53366,53372,53376,53386,53394,53402,53406,53410,53414,53422,53426,53442,53446,53450,53454,53466,53470,53482,53486,53490,53502,53506,53516,53520,53524,53536,53540,53548,53552,53556,53564,53568,53576,53580,53584,53588,53592,53596,53612,53620,53624,53628,53646,53652,53656,53666,53674,53682,53686,53690,53694,53698,53706,53710,53726,53730,53738,53746],{"__ignoreMap":112},[128,53010,53011,53013],{"class":130,"line":131},[128,53012,135],{"class":134},[128,53014,33876],{"class":138},[128,53016,53017,53019,53021,53023],{"class":130,"line":142},[128,53018,135],{"class":134},[128,53020,34885],{"class":138},[128,53022,279],{"class":134},[128,53024,34890],{"class":138},[128,53026,53027,53029,53031,53033],{"class":130,"line":156},[128,53028,145],{"class":134},[128,53030,34868],{"class":138},[128,53032,135],{"class":134},[128,53034,34873],{"class":138},[128,53036,53037,53039,53041,53043],{"class":130,"line":163},[128,53038,145],{"class":134},[128,53040,34839],{"class":138},[128,53042,135],{"class":134},[128,53044,53045],{"class":138}," ImageFolder\n",[128,53047,53048,53050,53052,53054],{"class":130,"line":183},[128,53049,145],{"class":134},[128,53051,35383],{"class":138},[128,53053,135],{"class":134},[128,53055,48026],{"class":138},[128,53057,53058],{"class":130,"line":188},[128,53059,160],{"emptyLinePlaceholder":159},[128,53061,53062],{"class":130,"line":193},[128,53063,37346],{"class":3814},[128,53065,53066,53068,53070],{"class":130,"line":206},[128,53067,196],{"class":134},[128,53069,37353],{"class":199},[128,53071,203],{"class":138},[128,53073,53074],{"class":130,"line":221},[128,53075,53076],{"class":3814},"   # 导入自己的数据集，并进行数据处理\n",[128,53078,53079],{"class":130,"line":230},[128,53080,51346],{"class":3814},[128,53082,53083,53085,53087,53089,53091,53093,53096],{"class":130,"line":235},[128,53084,51351],{"class":166},[128,53086,270],{"class":134},[128,53088,4419],{"class":134},[128,53090,1376],{"class":176},[128,53092,4307],{"class":166},[128,53094,53095],{"class":51362},"\u002Fdata\u002Ftest",[128,53097,1394],{"class":176},[128,53099,53100],{"class":130,"line":244},[128,53101,160],{"emptyLinePlaceholder":159},[128,53103,53104],{"class":130,"line":287},[128,53105,51374],{"class":3814},[128,53107,53108],{"class":130,"line":301},[128,53109,51379],{"class":3814},[128,53111,53112],{"class":130,"line":310},[128,53113,51384],{"class":3814},[128,53115,53116],{"class":130,"line":323},[128,53117,51389],{"class":3814},[128,53119,53120,53122,53124,53126,53128,53130,53132,53134,53136,53138,53140,53142,53144,53146,53148],{"class":130,"line":330},[128,53121,51394],{"class":138},[128,53123,270],{"class":134},[128,53125,51399],{"class":138},[128,53127,51402],{"class":166},[128,53129,4128],{"class":138},[128,53131,51407],{"class":166},[128,53133,4128],{"class":138},[128,53135,51412],{"class":166},[128,53137,51415],{"class":138},[128,53139,51418],{"class":166},[128,53141,4128],{"class":138},[128,53143,51423],{"class":166},[128,53145,4128],{"class":138},[128,53147,51428],{"class":166},[128,53149,2595],{"class":138},[128,53151,53152],{"class":130,"line":335},[128,53153,51435],{"class":3814},[128,53155,53156,53158,53160],{"class":130,"line":340},[128,53157,51440],{"class":138},[128,53159,270],{"class":134},[128,53161,51445],{"class":138},[128,53163,53164],{"class":130,"line":351},[128,53165,51450],{"class":3814},[128,53167,53168,53170,53172,53174,53176],{"class":130,"line":384},[128,53169,51455],{"class":138},[128,53171,34970],{"class":166},[128,53173,4128],{"class":138},[128,53175,34970],{"class":166},[128,53177,46008],{"class":138},[128,53179,53180],{"class":130,"line":414},[128,53181,51468],{"class":3814},[128,53183,53184],{"class":130,"line":419},[128,53185,51473],{"class":138},[128,53187,53188],{"class":130,"line":424},[128,53189,51478],{"class":138},[128,53191,53192],{"class":130,"line":434},[128,53193,51483],{"class":3814},[128,53195,53196],{"class":130,"line":447},[128,53197,51488],{"class":3814},[128,53199,53200],{"class":130,"line":459},[128,53201,160],{"emptyLinePlaceholder":159},[128,53203,53204],{"class":130,"line":471},[128,53205,51497],{"class":3814},[128,53207,53208],{"class":130,"line":483},[128,53209,51502],{"class":3814},[128,53211,53212,53214,53216,53218,53220,53222,53224,53226],{"class":130,"line":495},[128,53213,37360],{"class":138},[128,53215,270],{"class":134},[128,53217,51511],{"class":138},[128,53219,51514],{"class":166},[128,53221,4128],{"class":138},[128,53223,51519],{"class":266},[128,53225,270],{"class":134},[128,53227,51524],{"class":138},[128,53229,53230,53232,53234,53236,53238,53240],{"class":130,"line":507},[128,53231,37416],{"class":138},[128,53233,270],{"class":134},[128,53235,35003],{"class":138},[128,53237,35006],{"class":266},[128,53239,270],{"class":134},[128,53241,37427],{"class":138},[128,53243,53244],{"class":130,"line":519},[128,53245,37432],{"class":3814},[128,53247,53248,53250,53252,53254],{"class":130,"line":524},[128,53249,37437],{"class":266},[128,53251,270],{"class":134},[128,53253,2592],{"class":166},[128,53255,2665],{"class":138},[128,53257,53258,53260,53262,53264],{"class":130,"line":529},[128,53259,37448],{"class":266},[128,53261,270],{"class":134},[128,53263,34945],{"class":166},[128,53265,2665],{"class":138},[128,53267,53268,53270,53272,53274],{"class":130,"line":540},[128,53269,37459],{"class":266},[128,53271,270],{"class":134},[128,53273,2452],{"class":166},[128,53275,180],{"class":138},[128,53277,53278,53280],{"class":130,"line":555},[128,53279,587],{"class":134},[128,53281,37472],{"class":138},[128,53283,53284],{"class":130,"line":576},[128,53285,160],{"emptyLinePlaceholder":159},[128,53287,53288],{"class":130,"line":584},[128,53289,37481],{"class":3814},[128,53291,53292,53294,53296],{"class":130,"line":593},[128,53293,196],{"class":134},[128,53295,37488],{"class":199},[128,53297,37491],{"class":138},[128,53299,53300],{"class":130,"line":598},[128,53301,37496],{"class":3814},[128,53303,53304,53306,53308,53310,53312,53314,53316],{"class":130,"line":603},[128,53305,34709],{"class":138},[128,53307,270],{"class":134},[128,53309,34716],{"class":176},[128,53311,5302],{"class":134},[128,53313,34721],{"class":138},[128,53315,5299],{"class":134},[128,53317,37513],{"class":176},[128,53319,53320,53322,53324],{"class":130,"line":614},[128,53321,34761],{"class":138},[128,53323,270],{"class":134},[128,53325,35756],{"class":138},[128,53327,53328],{"class":130,"line":625},[128,53329,160],{"emptyLinePlaceholder":159},[128,53331,53332],{"class":130,"line":633},[128,53333,37530],{"class":3814},[128,53335,53336,53338,53340],{"class":130,"line":649},[128,53337,37535],{"class":138},[128,53339,270],{"class":134},[128,53341,35809],{"class":166},[128,53343,53344,53346,53348],{"class":130,"line":660},[128,53345,37544],{"class":138},[128,53347,270],{"class":134},[128,53349,6656],{"class":166},[128,53351,53352],{"class":130,"line":673},[128,53353,160],{"emptyLinePlaceholder":159},[128,53355,53356],{"class":130,"line":678},[128,53357,37557],{"class":3814},[128,53359,53360],{"class":130,"line":683},[128,53361,37562],{"class":3814},[128,53363,53364],{"class":130,"line":693},[128,53365,37567],{"class":3814},[128,53367,53368,53370],{"class":130,"line":702},[128,53369,354],{"class":134},[128,53371,36320],{"class":138},[128,53373,53374],{"class":130,"line":709},[128,53375,37578],{"class":3814},[128,53377,53378,53380,53382,53384],{"class":130,"line":723},[128,53379,2141],{"class":134},[128,53381,37585],{"class":138},[128,53383,549],{"class":134},[128,53385,37590],{"class":138},[128,53387,53388,53390,53392],{"class":130,"line":732},[128,53389,37595],{"class":138},[128,53391,270],{"class":134},[128,53393,37600],{"class":138},[128,53395,53396,53398,53400],{"class":130,"line":744},[128,53397,37605],{"class":138},[128,53399,270],{"class":134},[128,53401,37610],{"class":138},[128,53403,53404],{"class":130,"line":749},[128,53405,37615],{"class":3814},[128,53407,53408],{"class":130,"line":754},[128,53409,36312],{"class":138},[128,53411,53412],{"class":130,"line":764},[128,53413,37624],{"class":3814},[128,53415,53416,53418,53420],{"class":130,"line":782},[128,53417,36121],{"class":138},[128,53419,270],{"class":134},[128,53421,37633],{"class":138},[128,53423,53424],{"class":130,"line":787},[128,53425,37638],{"class":3814},[128,53427,53428,53430,53432,53434,53436,53438,53440],{"class":130,"line":795},[128,53429,36136],{"class":138},[128,53431,270],{"class":134},[128,53433,36141],{"class":138},[128,53435,36144],{"class":266},[128,53437,270],{"class":134},[128,53439,2592],{"class":166},[128,53441,180],{"class":138},[128,53443,53444],{"class":130,"line":807},[128,53445,37659],{"class":3814},[128,53447,53448],{"class":130,"line":813},[128,53449,37664],{"class":3814},[128,53451,53452],{"class":130,"line":818},[128,53453,37669],{"class":3814},[128,53455,53456,53458,53460,53462,53464],{"class":130,"line":835},[128,53457,37674],{"class":138},[128,53459,13023],{"class":134},[128,53461,36234],{"class":138},[128,53463,570],{"class":134},[128,53465,37683],{"class":138},[128,53467,53468],{"class":130,"line":851},[128,53469,37688],{"class":3814},[128,53471,53472,53474,53476,53478,53480],{"class":130,"line":867},[128,53473,37693],{"class":138},[128,53475,13023],{"class":134},[128,53477,37698],{"class":138},[128,53479,2452],{"class":166},[128,53481,180],{"class":138},[128,53483,53484],{"class":130,"line":872},[128,53485,160],{"emptyLinePlaceholder":159},[128,53487,53488],{"class":130,"line":878},[128,53489,37711],{"class":3814},[128,53491,53492,53494,53496,53498,53500],{"class":130,"line":887},[128,53493,37716],{"class":138},[128,53495,270],{"class":134},[128,53497,37721],{"class":138},[128,53499,4333],{"class":134},[128,53501,37726],{"class":138},[128,53503,53504],{"class":130,"line":896},[128,53505,37731],{"class":3814},[128,53507,53508,53510,53512,53514],{"class":130,"line":905},[128,53509,313],{"class":166},[128,53511,253],{"class":138},[128,53513,37740],{"class":176},[128,53515,37743],{"class":138},[128,53517,53518],{"class":130,"line":914},[128,53519,160],{"emptyLinePlaceholder":159},[128,53521,53522],{"class":130,"line":920},[128,53523,37752],{"class":3814},[128,53525,53526,53528,53530,53532,53534],{"class":130,"line":926},[128,53527,1800],{"class":134},[128,53529,1803],{"class":166},[128,53531,570],{"class":134},[128,53533,34697],{"class":176},[128,53535,241],{"class":138},[128,53537,53538],{"class":130,"line":938},[128,53539,37769],{"class":3814},[128,53541,53542,53544,53546],{"class":130,"line":943},[128,53543,34761],{"class":138},[128,53545,270],{"class":134},[128,53547,47937],{"class":138},[128,53549,53550],{"class":130,"line":948},[128,53551,37782],{"class":3814},[128,53553,53554],{"class":130,"line":958},[128,53555,37787],{"class":3814},[128,53557,53558,53560,53562],{"class":130,"line":974},[128,53559,37792],{"class":138},[128,53561,37795],{"class":176},[128,53563,3034],{"class":138},[128,53565,53566],{"class":130,"line":985},[128,53567,37802],{"class":3814},[128,53569,53570,53572,53574],{"class":130,"line":990},[128,53571,37416],{"class":138},[128,53573,270],{"class":134},[128,53575,37811],{"class":138},[128,53577,53578],{"class":130,"line":1005},[128,53579,37816],{"class":3814},[128,53581,53582],{"class":130,"line":1017},[128,53583,37821],{"class":138},[128,53585,53586],{"class":130,"line":1022},[128,53587,160],{"emptyLinePlaceholder":159},[128,53589,53590],{"class":130,"line":1027},[128,53591,37830],{"class":3814},[128,53593,53594],{"class":130,"line":1033},[128,53595,37835],{"class":3814},[128,53597,53598,53600,53602,53604,53606,53608,53610],{"class":130,"line":1038},[128,53599,34709],{"class":138},[128,53601,270],{"class":134},[128,53603,34716],{"class":176},[128,53605,5302],{"class":134},[128,53607,34721],{"class":138},[128,53609,5299],{"class":134},[128,53611,37513],{"class":176},[128,53613,53614,53616,53618],{"class":130,"line":1050},[128,53615,34761],{"class":138},[128,53617,270],{"class":134},[128,53619,35756],{"class":138},[128,53621,53622],{"class":130,"line":1055},[128,53623,37864],{"class":3814},[128,53625,53626],{"class":130,"line":1060},[128,53627,37869],{"class":3814},[128,53629,53630,53632,53634,53636,53639,53641,53644],{"class":130,"line":1070},[128,53631,37874],{"class":138},[128,53633,270],{"class":134},[128,53635,4638],{"class":138},[128,53637,53638],{"class":176},"'猫'",[128,53640,4128],{"class":138},[128,53642,53643],{"class":176},"'狗'",[128,53645,2376],{"class":138},[128,53647,53648,53650],{"class":130,"line":1086},[128,53649,354],{"class":134},[128,53651,36320],{"class":138},[128,53653,53654],{"class":130,"line":1095},[128,53655,37939],{"class":3814},[128,53657,53658,53660,53662,53664],{"class":130,"line":1100},[128,53659,2141],{"class":134},[128,53661,37946],{"class":138},[128,53663,549],{"class":134},[128,53665,37590],{"class":138},[128,53667,53668,53670,53672],{"class":130,"line":1113},[128,53669,36076],{"class":138},[128,53671,270],{"class":134},[128,53673,36081],{"class":138},[128,53675,53676,53678,53680],{"class":130,"line":1124},[128,53677,36091],{"class":138},[128,53679,270],{"class":134},[128,53681,36096],{"class":138},[128,53683,53684],{"class":130,"line":1129},[128,53685,160],{"emptyLinePlaceholder":159},[128,53687,53688],{"class":130,"line":1134},[128,53689,37975],{"class":3814},[128,53691,53692],{"class":130,"line":1150},[128,53693,36312],{"class":138},[128,53695,53696],{"class":130,"line":1164},[128,53697,37984],{"class":3814},[128,53699,53700,53702,53704],{"class":130,"line":1178},[128,53701,36121],{"class":138},[128,53703,270],{"class":134},[128,53705,36126],{"class":138},[128,53707,53708],{"class":130,"line":1183},[128,53709,37997],{"class":3814},[128,53711,53712,53714,53716,53718,53720,53722,53724],{"class":130,"line":1199},[128,53713,36136],{"class":138},[128,53715,270],{"class":134},[128,53717,36141],{"class":138},[128,53719,36144],{"class":266},[128,53721,270],{"class":134},[128,53723,2592],{"class":166},[128,53725,180],{"class":138},[128,53727,53728],{"class":130,"line":1214},[128,53729,38018],{"class":3814},[128,53731,53732,53734,53736],{"class":130,"line":1229},[128,53733,38023],{"class":138},[128,53735,270],{"class":134},[128,53737,38028],{"class":138},[128,53739,53740,53742,53744],{"class":130,"line":1234},[128,53741,38033],{"class":138},[128,53743,270],{"class":134},[128,53745,38038],{"class":138},[128,53747,53748,53750,53752,53754,53756,53758,53760,53762],{"class":130,"line":1239},[128,53749,663],{"class":166},[128,53751,253],{"class":138},[128,53753,38047],{"class":176},[128,53755,38050],{"class":138},[128,53757,38053],{"class":176},[128,53759,4128],{"class":138},[128,53761,38058],{"class":176},[128,53763,38061],{"class":138},[3659,53765,53766],{},"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":112,"searchDepth":142,"depth":142,"links":53768},[53769,53770,53771,53772],{"id":34070,"depth":156,"text":34071},{"id":41231,"depth":156,"text":41232},{"id":44658,"depth":156,"text":44659},{"id":48667,"depth":156,"text":48668},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":34062,"description":3686},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":53779,"title":53780,"body":53781,"description":3686,"extension":3687,"meta":53788,"navigation":159,"path":53789,"seo":53790,"stem":53791,"__hash__":53792},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":53782,"toc":53786},[53783],[10,53784,53780],{"id":53785},"_3yolo模型学习",{"title":112,"searchDepth":142,"depth":142,"links":53787},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":53780,"description":3686},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":53794,"title":53795,"body":53796,"description":53803,"extension":3687,"meta":53804,"navigation":159,"path":53806,"seo":53807,"stem":53808,"__hash__":53809},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":53797,"toc":53801},[53798],[19,53799,53800],{},"yolo模型还未补充",{"title":112,"searchDepth":142,"depth":142,"links":53802},[],"深度学习学习",{"category":53805},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":53795,"description":53803},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":53811,"title":53812,"body":53813,"description":3686,"extension":3687,"meta":53838,"navigation":159,"path":53839,"seo":53840,"stem":53841,"__hash__":53842},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":53814,"toc":53836},[53815,53818,53821,53826,53833],[10,53816,53812],{"id":53817},"_1工具",[19,53819,53820],{},"提示错误插件：有问题会提前报错",[19,53822,53823],{},[5074,53824],{"alt":112,"src":53825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,53827,53828],{},[3989,53829,53832],{"href":53830,"rel":53831},"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",[27352],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,53834,53835],{},"alt键加上下箭头可以实现语句的移动",{"title":112,"searchDepth":142,"depth":142,"links":53837},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":53812,"description":3686},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":53844,"title":53845,"body":53846,"description":3686,"extension":3687,"meta":56707,"navigation":159,"path":56708,"seo":56709,"stem":56710,"__hash__":56711},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":53847,"toc":56658},[53848,53851,53855,53859,53864,53867,53872,53876,53883,53888,53895,53900,53907,53912,53916,53921,53924,53928,53933,53937,53942,53945,53948,53951,53954,53957,53960,53963,53966,53971,53976,53981,53985,53988,53991,53995,54000,54003,54011,54016,54033,54041,54046,54051,54056,54061,54066,54069,54074,54079,54083,54092,54097,54102,54106,54111,54114,54118,54123,54131,54136,54141,54144,54149,54154,54159,54162,54165,54168,54173,54178,54181,54186,54189,54194,54197,54200,54203,54208,54211,54214,54229,54234,54239,54244,54247,54250,54253,54267,54270,54275,54280,54283,54286,54289,54292,54295,54298,54301,54305,54309,54314,54318,54321,54326,54331,54334,54339,54342,54346,54351,54354,54357,54360,54363,54366,54369,54372,54375,54378,54382,54387,54392,54397,54400,54403,54407,54412,54415,54419,54422,54425,54430,54433,54436,54440,54444,54447,54452,54457,54460,54489,54494,54499,54504,54509,54513,54518,54522,54527,54530,54534,54538,54543,54547,54552,54557,54561,54566,54569,54571,54574,54579,54583,54588,54592,54596,54601,54606,54611,54616,54620,54625,54630,54635,54638,54641,54646,54649,54654,54659,54664,54669,54673,55477,55481,55824,55829,55832,55835,55838,55841,55844,55847,55850,55853,55855,55858,55860,55863,55867,55872,55875,55878,55881,55885,55890,55895,55915,55918,55922,55927,55932,55949,55953,55982,55986,56008,56010,56049,56057,56063,56067,56070,56073,56078,56083,56086,56089,56092,56097,56102,56105,56108,56111,56114,56117,56120,56123,56126,56129,56132,56135,56137,56140,56143,56146,56149,56152,56155,56158,56161,56165,56170,56173,56178,56181,56184,56187,56190,56193,56196,56199,56201,56204,56207,56210,56213,56216,56219,56223,56226,56235,56238,56243,56246,56251,56254,56257,56260,56263,56266,56269,56272,56276,56280,56283,56286,56291,56296,56301,56305,56310,56315,56318,56321,56324,56327,56330,56335,56338,56343,56345,56350,56353,56357,56362,56365,56368,56373,56377,56380,56385,56388,56391,56420,56425,56428,56431,56434,56437,56440,56444,56447,56533,56537,56540,56545,56550,56557,56560,56563,56566,56569,56572,56577,56582,56585,56588,56591,56594,56597,56600,56603,56606,56609,56611,56614,56618,56623,56628,56633,56636,56641,56646,56649,56652,56655],[10,53849,53845],{"id":53850},"_2基础语法",[14,53852,53854],{"id":53853},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[72,53856,53858],{"id":53857},"_211-js组成","2.1.1 js组成",[26,53860,53861],{},[29,53862,53863],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,53865,53866],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[26,53868,53869],{"start":142},[29,53870,53871],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[72,53873,53875],{"id":53874},"_212-js书写位置","2.1.2 js书写位置",[26,53877,53878],{},[29,53879,53880],{},[3903,53881,53882],{},"内部 JavaScript",[19,53884,53885],{},[5074,53886],{"alt":112,"src":53887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[26,53889,53890],{"start":142},[29,53891,53892],{},[3903,53893,53894],{},"外部 JavaScript",[19,53896,53897],{},[5074,53898],{"alt":112,"src":53899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[26,53901,53902],{"start":156},[29,53903,53904],{},[3903,53905,53906],{},"内联 JavaScript",[19,53908,53909],{},[5074,53910],{"alt":112,"src":53911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[72,53913,53915],{"id":53914},"_213-javascript注释","2.1.3 JavaScript注释",[19,53917,53918],{},[5074,53919],{"alt":112,"src":53920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,53922,53923],{},"alt+shift+a一定要记住！",[72,53925,53927],{"id":53926},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,53929,53930],{},[5074,53931],{"alt":112,"src":53932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[72,53934,53936],{"id":53935},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[26,53938,53939],{},[29,53940,53941],{},"输出语法：",[19,53943,53944],{},"①document.write('要出的内容')",[19,53946,53947],{},"向body内输出内容；",[19,53949,53950],{},"如果输出的内容写的是标签，也会被解析cheng",[19,53952,53953],{},"②alert('要出的内容')",[19,53955,53956],{},"页面弹出警告对话框",[19,53958,53959],{},"③console.log('控制台打印')",[19,53961,53962],{},"控制台输出语法，程序员调试使用",[19,53964,53965],{},"输入log就行，自动生成：",[19,53967,53968],{},[5074,53969],{"alt":112,"src":53970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[26,53972,53973],{"start":142},[29,53974,53975],{},"输入语法：",[19,53977,53978],{},[5074,53979],{"alt":112,"src":53980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[72,53982,53984],{"id":53983},"_2116-字面量","21.1.6 字面量",[19,53986,53987],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,53989,53990],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,53992,53994],{"id":53993},"_22-变量","2.2 变量",[26,53996,53997],{},[29,53998,53999],{},"变量声明",[19,54001,54002],{},"let 变量名",[4752,54004,54005,54008],{},[29,54006,54007],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[29,54009,54010],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[26,54012,54013],{"start":142},[29,54014,54015],{},"变量赋值",[106,54017,54021],{"className":54018,"code":54019,"language":54020,"meta":112,"style":112},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[114,54022,54023,54028],{"__ignoreMap":112},[128,54024,54025],{"class":130,"line":131},[128,54026,54027],{"class":138},"let age\n",[128,54029,54030],{"class":130,"line":142},[128,54031,54032],{"class":138},"age=18\n",[26,54034,54035,54038],{"start":156},[29,54036,54037],{},"连这些（变量的初始化）：let age=18",[29,54039,54040],{},"更新变量",[19,54042,54043],{},[5074,54044],{"alt":112,"src":54045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[26,54047,54048],{"start":183},[29,54049,54050],{},"声明多个变量",[19,54052,54053],{},[5074,54054],{"alt":112,"src":54055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[26,54057,54058],{"start":188},[29,54059,54060],{},"变量命名规则与规范",[19,54062,54063],{},[5074,54064],{"alt":112,"src":54065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,54067,54068],{},"遵守小驼峰！",[26,54070,54071],{"start":193},[29,54072,54073],{},"变量拓展-let和var的区别",[19,54075,54076],{},[5074,54077],{"alt":112,"src":54078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,54080,54082],{"id":54081},"_23-数组","2.3 数组",[106,54084,54086],{"className":54018,"code":54085,"language":54020,"meta":112,"style":112},"let arr = []\n",[114,54087,54088],{"__ignoreMap":112},[128,54089,54090],{"class":130,"line":131},[128,54091,54085],{"class":138},[19,54093,54094],{},[5074,54095],{"alt":112,"src":54096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,54098,54099],{},[5074,54100],{"alt":112,"src":54101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,54103,54105],{"id":54104},"_24-常量","2.4 常量",[19,54107,54108],{},[5074,54109],{"alt":112,"src":54110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,54112,54113],{},"const — 类似于 let ，但是变量的值无法被修改",[14,54115,54117],{"id":54116},"_25-数据类型","2.5 数据类型",[19,54119,54120],{},[5074,54121],{"alt":112,"src":54122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[26,54124,54125,54128],{},[29,54126,54127],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[29,54129,54130],{},"算数运算符：",[19,54132,54133],{},[5074,54134],{"alt":112,"src":54135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[26,54137,54138],{"start":156},[29,54139,54140],{},"数字类型（Number）",[19,54142,54143],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,54145,54146],{},[5074,54147],{"alt":112,"src":54148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[26,54150,54151],{"start":163},[29,54152,54153],{},"字符串类型（string）",[19,54155,54156],{},[5074,54157],{"alt":112,"src":54158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,54160,54161],{},"反引号也是可以使用的",[19,54163,54164],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,54166,54167],{},"例如：document.write(\"我今年\"+age+\"岁\")",[26,54169,54170],{"start":183},[29,54171,54172],{},"模板字符串",[19,54174,54175],{},[5074,54176],{"alt":112,"src":54177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,54179,54180],{},"类似于python的字符串格式化",[26,54182,54183],{"start":188},[29,54184,54185],{},"布尔类型",[19,54187,54188],{},"true 和 false",[26,54190,54191],{"start":193},[29,54192,54193],{},"未定义类型（underfined）",[19,54195,54196],{},"表示没有赋值",[19,54198,54199],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,54201,54202],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[26,54204,54205],{"start":206},[29,54206,54207],{},"null（空类型）",[19,54209,54210],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,54212,54213],{},"赋值了，但是内容为空",[106,54215,54217],{"className":54018,"code":54216,"language":54020,"meta":112,"style":112},"typeof null\n输出的是'object'，是一个对象数据类型\n",[114,54218,54219,54224],{"__ignoreMap":112},[128,54220,54221],{"class":130,"line":131},[128,54222,54223],{"class":138},"typeof null\n",[128,54225,54226],{"class":130,"line":142},[128,54227,54228],{"class":138},"输出的是'object'，是一个对象数据类型\n",[26,54230,54231],{"start":221},[29,54232,54233],{},"控制台检测数据类型",[19,54235,54236],{},[5074,54237],{"alt":112,"src":54238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[26,54240,54241],{"start":230},[29,54242,54243],{},"类型转换",[19,54245,54246],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,54248,54249],{},"转换方式：隐式转换和显示转换",[19,54251,54252],{},"①隐式转换",[4752,54254,54255,54258,54261,54264],{},[29,54256,54257],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[29,54259,54260],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[29,54262,54263],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[29,54265,54266],{},"任何数据和字符串相加结果都是字符串",[19,54268,54269],{},"②显示转换",[19,54271,54272],{},[5074,54273],{"alt":112,"src":54274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,54276,54277],{},[5074,54278],{"alt":112,"src":54279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,54281,54282],{},"在输入的时候要用好隐式转换，简单写起来",[19,54284,54285],{},"let num = +prompt(’请输入数字：‘)",[19,54287,54288],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,54290,54291],{},"console.log(parseInt('12.333px'))",[19,54293,54294],{},"输出为：12",[19,54296,54297],{},"console.log(parseInt('a'a'a12.333px'))",[19,54299,54300],{},"输出：NaN",[14,54302,54304],{"id":54303},"_26-运算符","2.6 运算符",[72,54306,54308],{"id":54307},"_261-赋值运算符","2.6.1 赋值运算符",[19,54310,54311],{},[5074,54312],{"alt":112,"src":54313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[72,54315,54317],{"id":54316},"_262-一元运算符","2.6.2 一元运算符",[19,54319,54320],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,54322,54323],{},[5074,54324],{"alt":112,"src":54325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,54327,54328],{},[5074,54329],{"alt":112,"src":54330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,54332,54333],{},"两者的区别：",[19,54335,54336],{},[5074,54337],{"alt":112,"src":54338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,54340,54341],{},"前置先自加；后置后加，代码执行完之后再加",[72,54343,54345],{"id":54344},"_263-比较运算符","2.6.3 比较运算符",[19,54347,54348],{},[5074,54349],{"alt":112,"src":54350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,54352,54353],{},"比较运算符也有隐式转换",[19,54355,54356],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,54358,54359],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,54361,54362],{},"要使用三等，开发的时候",[19,54364,54365],{},"NaN不等于任何人，包括它自己",[19,54367,54368],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,54370,54371],{},"7\u002F10=0.7",[19,54373,54374],{},"最后：0.5+0.2=0.7",[19,54376,54377],{},"字符串比较，比较的是字符对应的ASCII码",[72,54379,54381],{"id":54380},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,54383,54384],{},[5074,54385],{"alt":112,"src":54386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,54388,54389],{},[5074,54390],{"alt":112,"src":54391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,54393,54394],{},[5074,54395],{"alt":112,"src":54396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,54398,54399],{},"上述题目选D",[19,54401,54402],{},"与真2假1；或真1假2",[72,54404,54406],{"id":54405},"_265-运算符优先级","2.6.5 运算符优先级",[19,54408,54409],{},[5074,54410],{"alt":112,"src":54411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,54413,54414],{},"先算逻辑与，后算逻辑或",[14,54416,54418],{"id":54417},"_27-语句","2.7 语句",[19,54420,54421],{},"表达式：是可以被求值的代码，会有结果给我们",[19,54423,54424],{},"语句：语句是可以被执行的代码，例如prompt()",[19,54426,54427],{},[5074,54428],{"alt":112,"src":54429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,54431,54432],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,54434,54435],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[72,54437,54439],{"id":54438},"_271-分支语句","2.7.1 分支语句",[25485,54441,54443],{"id":54442},"_2711-if分支语句","2.7.1.1 if分支语句",[19,54445,54446],{},"if语句单行简单的话，可以不写{}，写在一行就行",[26,54448,54449],{},[29,54450,54451],{},"单分支语句",[19,54453,54454],{},[5074,54455],{"alt":112,"src":54456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,54458,54459],{},"除了0，所有数字都为真",[106,54461,54463],{"className":54018,"code":54462,"language":54020,"meta":112,"style":112},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[114,54464,54465,54470,54475,54480,54484],{"__ignoreMap":112},[128,54466,54467],{"class":130,"line":131},[128,54468,54469],{"class":138},"if（0) {\n",[128,54471,54472],{"class":130,"line":142},[128,54473,54474],{"class":138},"    let a=1\n",[128,54476,54477],{"class":130,"line":156},[128,54478,54479],{"class":138},"    alert(typeof a)\n",[128,54481,54482],{"class":130,"line":163},[128,54483,2694],{"class":138},[128,54485,54486],{"class":130,"line":183},[128,54487,54488],{"class":138},"不输出，括号为假\n",[26,54490,54491],{"start":142},[29,54492,54493],{},"双分支语句",[19,54495,54496],{},[5074,54497],{"alt":112,"src":54498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[26,54500,54501],{"start":156},[29,54502,54503],{},"多分支语句",[19,54505,54506],{},[5074,54507],{"alt":112,"src":54508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[25485,54510,54512],{"id":54511},"_2712-三元运算符","2.7.1.2 三元运算符",[19,54514,54515],{},[5074,54516],{"alt":112,"src":54517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[25485,54519,54521],{"id":54520},"_2713-switch语句","2.7.1.3 switch语句",[19,54523,54524],{},[5074,54525],{"alt":112,"src":54526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,54528,54529],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[72,54531,54533],{"id":54532},"_272-循环语句","2.7.2 循环语句",[25485,54535,54537],{"id":54536},"_2721-断点演示","2.7.2.1 断点演示",[19,54539,54540],{},[5074,54541],{"alt":112,"src":54542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[25485,54544,54546],{"id":54545},"_2722-while循环","2.7.2.2 while循环",[19,54548,54549],{},[5074,54550],{"alt":112,"src":54551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,54553,54554],{},[5074,54555],{"alt":112,"src":54556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[25485,54558,54560],{"id":54559},"_2723-for循环","2.7.2.3 for循环",[19,54562,54563],{},[5074,54564],{"alt":112,"src":54565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,54567,54568],{},"for(;;) {",[19,54570,1453],{},[19,54572,54573],{},"表示无限循环",[19,54575,54576],{},[5074,54577],{"alt":112,"src":54578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[25485,54580,54582],{"id":54581},"_2724-循环的退出","2.7.2.4 循环的退出",[19,54584,54585],{},[5074,54586],{"alt":112,"src":54587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,54589,54591],{"id":54590},"_28-数组","2.8 数组",[72,54593,54595],{"id":54594},"_281-基础认识","2.8.1 基础认识",[19,54597,54598],{},[5074,54599],{"alt":112,"src":54600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,54602,54603],{},[5074,54604],{"alt":112,"src":54605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,54607,54608],{},[5074,54609],{"alt":112,"src":54610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,54612,54613],{},[5074,54614],{"alt":112,"src":54615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[72,54617,54619],{"id":54618},"_282-操作数组","2.8.2 操作数组",[19,54621,54622],{},[5074,54623],{"alt":112,"src":54624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[26,54626,54627],{},[29,54628,54629],{},"添加元素",[19,54631,54632],{},[5074,54633],{"alt":112,"src":54634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,54636,54637],{},"console.log(arr.push('green'))",[19,54639,54640],{},"输出结果：为新数组的长度",[19,54642,54643],{},[5074,54644],{"alt":112,"src":54645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,54647,54648],{},"push用的非常多，一定要记住",[26,54650,54651],{},[29,54652,54653],{},"删除元素",[19,54655,54656],{},[5074,54657],{"alt":112,"src":54658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,54660,54661],{},[5074,54662],{"alt":112,"src":54663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,54665,54666],{},[5074,54667],{"alt":112,"src":54668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[72,54670,54672],{"id":54671},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[106,54674,54676],{"className":54018,"code":54675,"language":54020,"meta":112,"style":112},"\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",[114,54677,54678,54693,54709,54713,54722,54740,54764,54786,54799,54807,54814,54825,54836,54840,54844,54851,54863,54878,54891,54910,54927,54942,54954,54966,54978,54982,54986,54997,55007,55019,55031,55043,55054,55058,55062,55074,55078,55092,55096,55100,55111,55125,55137,55151,55155,55164,55173,55177,55186,55190,55199,55204,55209,55221,55249,55254,55259,55284,55289,55293,55298,55303,55318,55322,55327,55357,55369,55385,55401,55415,55420,55427,55431,55436,55449,55457,55465,55469],{"__ignoreMap":112},[128,54679,54680,54683,54687,54690],{"class":130,"line":131},[128,54681,54682],{"class":138},"\u003C!",[128,54684,54686],{"class":54685},"s9eBZ","DOCTYPE",[128,54688,54689],{"class":199}," html",[128,54691,54692],{"class":138},">\n",[128,54694,54695,54697,54699,54702,54704,54707],{"class":130,"line":142},[128,54696,4657],{"class":138},[128,54698,54020],{"class":54685},[128,54700,54701],{"class":199}," lang",[128,54703,270],{"class":138},[128,54705,54706],{"class":176},"\"en\"",[128,54708,54692],{"class":138},[128,54710,54711],{"class":130,"line":156},[128,54712,160],{"emptyLinePlaceholder":159},[128,54714,54715,54717,54720],{"class":130,"line":163},[128,54716,4657],{"class":138},[128,54718,54719],{"class":54685},"head",[128,54721,54692],{"class":138},[128,54723,54724,54727,54730,54733,54735,54738],{"class":130,"line":183},[128,54725,54726],{"class":138},"    \u003C",[128,54728,54729],{"class":54685},"meta",[128,54731,54732],{"class":199}," charset",[128,54734,270],{"class":138},[128,54736,54737],{"class":176},"\"UTF-8\"",[128,54739,54692],{"class":138},[128,54741,54742,54744,54746,54749,54751,54754,54757,54759,54762],{"class":130,"line":188},[128,54743,54726],{"class":138},[128,54745,54729],{"class":54685},[128,54747,54748],{"class":199}," http-equiv",[128,54750,270],{"class":138},[128,54752,54753],{"class":176},"\"X-UA-Compatible\"",[128,54755,54756],{"class":199}," content",[128,54758,270],{"class":138},[128,54760,54761],{"class":176},"\"IE=edge\"",[128,54763,54692],{"class":138},[128,54765,54766,54768,54770,54772,54774,54777,54779,54781,54784],{"class":130,"line":193},[128,54767,54726],{"class":138},[128,54769,54729],{"class":54685},[128,54771,18442],{"class":199},[128,54773,270],{"class":138},[128,54775,54776],{"class":176},"\"viewport\"",[128,54778,54756],{"class":199},[128,54780,270],{"class":138},[128,54782,54783],{"class":176},"\"width=device-width, initial-scale=1.0\"",[128,54785,54692],{"class":138},[128,54787,54788,54790,54792,54795,54797],{"class":130,"line":206},[128,54789,54726],{"class":138},[128,54791,2752],{"class":54685},[128,54793,54794],{"class":138},">Document\u003C\u002F",[128,54796,2752],{"class":54685},[128,54798,54692],{"class":138},[128,54800,54801,54803,54805],{"class":130,"line":221},[128,54802,54726],{"class":138},[128,54804,3659],{"class":54685},[128,54806,54692],{"class":138},[128,54808,54809,54812],{"class":130,"line":230},[128,54810,54811],{"class":54685},"        *",[128,54813,1959],{"class":138},[128,54815,54816,54819,54821,54823],{"class":130,"line":235},[128,54817,54818],{"class":166},"            margin",[128,54820,1967],{"class":138},[128,54822,2452],{"class":166},[128,54824,4905],{"class":138},[128,54826,54827,54830,54832,54834],{"class":130,"line":244},[128,54828,54829],{"class":166},"            padding",[128,54831,1967],{"class":138},[128,54833,2452],{"class":166},[128,54835,4905],{"class":138},[128,54837,54838],{"class":130,"line":287},[128,54839,2014],{"class":138},[128,54841,54842],{"class":130,"line":301},[128,54843,160],{"emptyLinePlaceholder":159},[128,54845,54846,54849],{"class":130,"line":310},[128,54847,54848],{"class":199},"        .box",[128,54850,1959],{"class":138},[128,54852,54853,54856,54858,54861],{"class":130,"line":323},[128,54854,54855],{"class":166},"            display",[128,54857,1967],{"class":138},[128,54859,54860],{"class":166},"flex",[128,54862,4905],{"class":138},[128,54864,54865,54868,54870,54873,54876],{"class":130,"line":330},[128,54866,54867],{"class":166},"            width",[128,54869,1967],{"class":138},[128,54871,54872],{"class":166},"700",[128,54874,54875],{"class":134},"px",[128,54877,4905],{"class":138},[128,54879,54880,54883,54885,54887,54889],{"class":130,"line":335},[128,54881,54882],{"class":166},"            height",[128,54884,1967],{"class":138},[128,54886,7540],{"class":166},[128,54888,54875],{"class":134},[128,54890,4905],{"class":138},[128,54892,54893,54896,54898,54900,54902,54905,54908],{"class":130,"line":340},[128,54894,54895],{"class":166},"            border-left",[128,54897,1967],{"class":138},[128,54899,2592],{"class":166},[128,54901,54875],{"class":134},[128,54903,54904],{"class":166}," solid",[128,54906,54907],{"class":166}," pink",[128,54909,4905],{"class":138},[128,54911,54912,54915,54917,54919,54921,54923,54925],{"class":130,"line":351},[128,54913,54914],{"class":166},"            border-bottom",[128,54916,1967],{"class":138},[128,54918,2592],{"class":166},[128,54920,54875],{"class":134},[128,54922,54904],{"class":166},[128,54924,54907],{"class":166},[128,54926,4905],{"class":138},[128,54928,54929,54931,54933,54935,54937,54940],{"class":130,"line":384},[128,54930,54818],{"class":166},[128,54932,1967],{"class":138},[128,54934,4405],{"class":166},[128,54936,54875],{"class":134},[128,54938,54939],{"class":166}," auto",[128,54941,4905],{"class":138},[128,54943,54944,54947,54949,54952],{"class":130,"line":414},[128,54945,54946],{"class":166},"            justify-content",[128,54948,1967],{"class":138},[128,54950,54951],{"class":166},"space-around",[128,54953,4905],{"class":138},[128,54955,54956,54959,54961,54964],{"class":130,"line":419},[128,54957,54958],{"class":166},"            align-items",[128,54960,1967],{"class":138},[128,54962,54963],{"class":166},"flex-end",[128,54965,4905],{"class":138},[128,54967,54968,54971,54973,54976],{"class":130,"line":424},[128,54969,54970],{"class":166},"            text-align",[128,54972,1967],{"class":138},[128,54974,54975],{"class":166},"center",[128,54977,4905],{"class":138},[128,54979,54980],{"class":130,"line":434},[128,54981,2014],{"class":138},[128,54983,54984],{"class":130,"line":447},[128,54985,160],{"emptyLinePlaceholder":159},[128,54987,54988,54990,54992,54995],{"class":130,"line":459},[128,54989,54848],{"class":199},[128,54991,4705],{"class":134},[128,54993,54994],{"class":54685},"div",[128,54996,1959],{"class":138},[128,54998,54999,55001,55003,55005],{"class":130,"line":471},[128,55000,54855],{"class":166},[128,55002,1967],{"class":138},[128,55004,54860],{"class":166},[128,55006,4905],{"class":138},[128,55008,55009,55011,55013,55015,55017],{"class":130,"line":483},[128,55010,54867],{"class":166},[128,55012,1967],{"class":138},[128,55014,4405],{"class":166},[128,55016,54875],{"class":134},[128,55018,4905],{"class":138},[128,55020,55021,55024,55026,55029],{"class":130,"line":495},[128,55022,55023],{"class":166},"            background-color",[128,55025,1967],{"class":138},[128,55027,55028],{"class":166},"pink",[128,55030,4905],{"class":138},[128,55032,55033,55036,55038,55041],{"class":130,"line":507},[128,55034,55035],{"class":166},"            flex-direction",[128,55037,1967],{"class":138},[128,55039,55040],{"class":166},"column",[128,55042,4905],{"class":138},[128,55044,55045,55047,55049,55052],{"class":130,"line":519},[128,55046,54946],{"class":166},[128,55048,1967],{"class":138},[128,55050,55051],{"class":166},"space-between",[128,55053,4905],{"class":138},[128,55055,55056],{"class":130,"line":524},[128,55057,2014],{"class":138},[128,55059,55060],{"class":130,"line":529},[128,55061,160],{"emptyLinePlaceholder":159},[128,55063,55064,55066,55069,55072],{"class":130,"line":540},[128,55065,54848],{"class":199},[128,55067,55068],{"class":54685}," div",[128,55070,55071],{"class":54685}," span",[128,55073,1959],{"class":138},[128,55075,55076],{"class":130,"line":555},[128,55077,160],{"emptyLinePlaceholder":159},[128,55079,55080,55083,55085,55088,55090],{"class":130,"line":576},[128,55081,55082],{"class":166},"            margin-top",[128,55084,1967],{"class":138},[128,55086,55087],{"class":166},"-20",[128,55089,54875],{"class":134},[128,55091,4905],{"class":138},[128,55093,55094],{"class":130,"line":584},[128,55095,2014],{"class":138},[128,55097,55098],{"class":130,"line":593},[128,55099,160],{"emptyLinePlaceholder":159},[128,55101,55102,55104,55106,55109],{"class":130,"line":598},[128,55103,54848],{"class":199},[128,55105,55068],{"class":54685},[128,55107,55108],{"class":54685}," h4",[128,55110,1959],{"class":138},[128,55112,55113,55116,55118,55121,55123],{"class":130,"line":603},[128,55114,55115],{"class":166},"            margin-bottom",[128,55117,1967],{"class":138},[128,55119,55120],{"class":166},"-35",[128,55122,54875],{"class":134},[128,55124,4905],{"class":138},[128,55126,55127,55129,55131,55133,55135],{"class":130,"line":614},[128,55128,54867],{"class":166},[128,55130,1967],{"class":138},[128,55132,4106],{"class":166},[128,55134,54875],{"class":134},[128,55136,4905],{"class":138},[128,55138,55139,55142,55144,55147,55149],{"class":130,"line":625},[128,55140,55141],{"class":166},"            margin-left",[128,55143,1967],{"class":138},[128,55145,55146],{"class":166},"-10",[128,55148,54875],{"class":134},[128,55150,4905],{"class":138},[128,55152,55153],{"class":130,"line":633},[128,55154,2014],{"class":138},[128,55156,55157,55160,55162],{"class":130,"line":649},[128,55158,55159],{"class":138},"    \u003C\u002F",[128,55161,3659],{"class":54685},[128,55163,54692],{"class":138},[128,55165,55166,55169,55171],{"class":130,"line":660},[128,55167,55168],{"class":138},"\u003C\u002F",[128,55170,54719],{"class":54685},[128,55172,54692],{"class":138},[128,55174,55175],{"class":130,"line":673},[128,55176,160],{"emptyLinePlaceholder":159},[128,55178,55179,55181,55184],{"class":130,"line":678},[128,55180,4657],{"class":138},[128,55182,55183],{"class":54685},"body",[128,55185,54692],{"class":138},[128,55187,55188],{"class":130,"line":683},[128,55189,160],{"emptyLinePlaceholder":159},[128,55191,55192,55194,55197],{"class":130,"line":693},[128,55193,54726],{"class":138},[128,55195,55196],{"class":54685},"script",[128,55198,54692],{"class":138},[128,55200,55201],{"class":130,"line":702},[128,55202,55203],{"class":3814},"        \u002F\u002F 1. 四次弹框效果\n",[128,55205,55206],{"class":130,"line":709},[128,55207,55208],{"class":3814},"        \u002F\u002F 声明一个新的数组\n",[128,55210,55211,55214,55217,55219],{"class":130,"line":723},[128,55212,55213],{"class":134},"        let",[128,55215,55216],{"class":138}," arr ",[128,55218,270],{"class":134},[128,55220,227],{"class":138},[128,55222,55223,55225,55227,55230,55232,55234,55236,55238,55240,55243,55245,55247],{"class":130,"line":732},[128,55224,2141],{"class":134},[128,55226,5260],{"class":138},[128,55228,55229],{"class":134},"let",[128,55231,12984],{"class":138},[128,55233,270],{"class":134},[128,55235,28605],{"class":166},[128,55237,12991],{"class":138},[128,55239,5197],{"class":134},[128,55241,55242],{"class":166}," 4",[128,55244,6783],{"class":138},[128,55246,5877],{"class":134},[128,55248,15968],{"class":138},[128,55250,55251],{"class":130,"line":744},[128,55252,55253],{"class":3814},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[128,55255,55256],{"class":130,"line":749},[128,55257,55258],{"class":3814},"            \u002F\u002F arr.push(num)\n",[128,55260,55261,55264,55267,55269,55272,55274,55277,55279,55282],{"class":130,"line":754},[128,55262,55263],{"class":138},"            arr.",[128,55265,55266],{"class":199},"push",[128,55268,253],{"class":138},[128,55270,55271],{"class":199},"prompt",[128,55273,253],{"class":138},[128,55275,55276],{"class":176},"`请输入第${",[128,55278,4191],{"class":138},[128,55280,55281],{"class":176},"}季度的数据:`",[128,55283,3034],{"class":138},[128,55285,55286],{"class":130,"line":764},[128,55287,55288],{"class":3814},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[128,55290,55291],{"class":130,"line":782},[128,55292,2014],{"class":138},[128,55294,55295],{"class":130,"line":787},[128,55296,55297],{"class":3814},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[128,55299,55300],{"class":130,"line":795},[128,55301,55302],{"class":3814},"        \u002F\u002F 盒子开头\n",[128,55304,55305,55308,55311,55313,55316],{"class":130,"line":807},[128,55306,55307],{"class":138},"        document.",[128,55309,55310],{"class":199},"write",[128,55312,253],{"class":138},[128,55314,55315],{"class":176},"` \u003Cdiv class=\"box\">`",[128,55317,180],{"class":138},[128,55319,55320],{"class":130,"line":813},[128,55321,160],{"emptyLinePlaceholder":159},[128,55323,55324],{"class":130,"line":818},[128,55325,55326],{"class":3814},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[128,55328,55329,55331,55333,55335,55337,55339,55341,55343,55345,55348,55351,55353,55355],{"class":130,"line":835},[128,55330,2141],{"class":134},[128,55332,5260],{"class":138},[128,55334,55229],{"class":134},[128,55336,12984],{"class":138},[128,55338,270],{"class":134},[128,55340,7659],{"class":166},[128,55342,12991],{"class":138},[128,55344,4657],{"class":134},[128,55346,55347],{"class":138}," arr.",[128,55349,55350],{"class":166},"length",[128,55352,6783],{"class":138},[128,55354,5877],{"class":134},[128,55356,15968],{"class":138},[128,55358,55359,55362,55364,55366],{"class":130,"line":851},[128,55360,55361],{"class":138},"            document.",[128,55363,55310],{"class":199},[128,55365,253],{"class":138},[128,55367,55368],{"class":176},"`\n",[128,55370,55371,55374,55376,55378,55380,55382],{"class":130,"line":867},[128,55372,55373],{"class":176},"              \u003Cdiv style=\"height: ${",[128,55375,7447],{"class":138},[128,55377,4638],{"class":176},[128,55379,4191],{"class":138},[128,55381,1388],{"class":176},[128,55383,55384],{"class":176},"}px;\">\n",[128,55386,55387,55390,55392,55394,55396,55398],{"class":130,"line":872},[128,55388,55389],{"class":176},"                \u003Cspan>${",[128,55391,7447],{"class":138},[128,55393,4638],{"class":176},[128,55395,4191],{"class":138},[128,55397,1388],{"class":176},[128,55399,55400],{"class":176},"}\u003C\u002Fspan>\n",[128,55402,55403,55406,55408,55410,55412],{"class":130,"line":878},[128,55404,55405],{"class":176},"                \u003Ch4>第${",[128,55407,4191],{"class":138},[128,55409,48951],{"class":134},[128,55411,28605],{"class":166},[128,55413,55414],{"class":176},"}季度\u003C\u002Fh4>\n",[128,55416,55417],{"class":130,"line":887},[128,55418,55419],{"class":176},"              \u003C\u002Fdiv>          \n",[128,55421,55422,55425],{"class":130,"line":896},[128,55423,55424],{"class":176},"            `",[128,55426,180],{"class":138},[128,55428,55429],{"class":130,"line":905},[128,55430,2014],{"class":138},[128,55432,55433],{"class":130,"line":914},[128,55434,55435],{"class":3814},"        \u002F\u002F 盒子结尾\n",[128,55437,55438,55440,55442,55444,55447],{"class":130,"line":920},[128,55439,55307],{"class":138},[128,55441,55310],{"class":199},[128,55443,253],{"class":138},[128,55445,55446],{"class":176},"` \u003C\u002Fdiv>`",[128,55448,180],{"class":138},[128,55450,55451,55453,55455],{"class":130,"line":926},[128,55452,55159],{"class":138},[128,55454,55196],{"class":54685},[128,55456,54692],{"class":138},[128,55458,55459,55461,55463],{"class":130,"line":938},[128,55460,55168],{"class":138},[128,55462,55183],{"class":54685},[128,55464,54692],{"class":138},[128,55466,55467],{"class":130,"line":943},[128,55468,160],{"emptyLinePlaceholder":159},[128,55470,55471,55473,55475],{"class":130,"line":948},[128,55472,55168],{"class":138},[128,55474,54020],{"class":54685},[128,55476,54692],{"class":138},[72,55478,55480],{"id":55479},"_284-冒泡排序","2.8.4 冒泡排序",[106,55482,55484],{"className":54018,"code":55483,"language":54020,"meta":112,"style":112},"\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",[114,55485,55486,55496,55510,55514,55522,55537,55557,55569,55577,55581,55589,55597,55629,55662,55699,55704,55723,55728,55741,55756,55772,55776,55781,55785,55795,55804,55812,55816],{"__ignoreMap":112},[128,55487,55488,55490,55492,55494],{"class":130,"line":131},[128,55489,54682],{"class":138},[128,55491,54686],{"class":54685},[128,55493,54689],{"class":199},[128,55495,54692],{"class":138},[128,55497,55498,55500,55502,55504,55506,55508],{"class":130,"line":142},[128,55499,4657],{"class":138},[128,55501,54020],{"class":54685},[128,55503,54701],{"class":199},[128,55505,270],{"class":138},[128,55507,54706],{"class":176},[128,55509,54692],{"class":138},[128,55511,55512],{"class":130,"line":156},[128,55513,160],{"emptyLinePlaceholder":159},[128,55515,55516,55518,55520],{"class":130,"line":163},[128,55517,4657],{"class":138},[128,55519,54719],{"class":54685},[128,55521,54692],{"class":138},[128,55523,55524,55527,55529,55531,55533,55535],{"class":130,"line":183},[128,55525,55526],{"class":138},"  \u003C",[128,55528,54729],{"class":54685},[128,55530,54732],{"class":199},[128,55532,270],{"class":138},[128,55534,54737],{"class":176},[128,55536,54692],{"class":138},[128,55538,55539,55541,55543,55545,55547,55549,55551,55553,55555],{"class":130,"line":188},[128,55540,55526],{"class":138},[128,55542,54729],{"class":54685},[128,55544,18442],{"class":199},[128,55546,270],{"class":138},[128,55548,54776],{"class":176},[128,55550,54756],{"class":199},[128,55552,270],{"class":138},[128,55554,54783],{"class":176},[128,55556,54692],{"class":138},[128,55558,55559,55561,55563,55565,55567],{"class":130,"line":193},[128,55560,55526],{"class":138},[128,55562,2752],{"class":54685},[128,55564,54794],{"class":138},[128,55566,2752],{"class":54685},[128,55568,54692],{"class":138},[128,55570,55571,55573,55575],{"class":130,"line":206},[128,55572,55168],{"class":138},[128,55574,54719],{"class":54685},[128,55576,54692],{"class":138},[128,55578,55579],{"class":130,"line":221},[128,55580,160],{"emptyLinePlaceholder":159},[128,55582,55583,55585,55587],{"class":130,"line":230},[128,55584,4657],{"class":138},[128,55586,55183],{"class":54685},[128,55588,54692],{"class":138},[128,55590,55591,55593,55595],{"class":130,"line":235},[128,55592,55526],{"class":138},[128,55594,55196],{"class":54685},[128,55596,54692],{"class":138},[128,55598,55599,55602,55604,55606,55609,55611,55613,55615,55617,55619,55621,55623,55625,55627],{"class":130,"line":244},[128,55600,55601],{"class":134},"    let",[128,55603,55216],{"class":138},[128,55605,270],{"class":134},[128,55607,55608],{"class":138}," [",[128,55610,4069],{"class":166},[128,55612,258],{"class":138},[128,55614,4043],{"class":166},[128,55616,258],{"class":138},[128,55618,3827],{"class":166},[128,55620,258],{"class":138},[128,55622,409],{"class":166},[128,55624,258],{"class":138},[128,55626,2592],{"class":166},[128,55628,2376],{"class":138},[128,55630,55631,55633,55635,55637,55639,55641,55643,55645,55647,55649,55651,55654,55656,55658,55660],{"class":130,"line":287},[128,55632,543],{"class":134},[128,55634,5260],{"class":138},[128,55636,55229],{"class":134},[128,55638,12984],{"class":138},[128,55640,270],{"class":134},[128,55642,7659],{"class":166},[128,55644,12991],{"class":138},[128,55646,4657],{"class":134},[128,55648,55347],{"class":138},[128,55650,55350],{"class":166},[128,55652,55653],{"class":134}," -",[128,55655,28605],{"class":166},[128,55657,6783],{"class":138},[128,55659,5877],{"class":134},[128,55661,15968],{"class":138},[128,55663,55664,55667,55669,55671,55673,55675,55677,55679,55681,55683,55685,55687,55689,55691,55693,55695,55697],{"class":130,"line":301},[128,55665,55666],{"class":134},"      for",[128,55668,5260],{"class":138},[128,55670,55229],{"class":134},[128,55672,13046],{"class":138},[128,55674,270],{"class":134},[128,55676,7659],{"class":166},[128,55678,13053],{"class":138},[128,55680,4657],{"class":134},[128,55682,55347],{"class":138},[128,55684,55350],{"class":166},[128,55686,55653],{"class":134},[128,55688,12984],{"class":138},[128,55690,4281],{"class":134},[128,55692,28605],{"class":166},[128,55694,13060],{"class":138},[128,55696,5877],{"class":134},[128,55698,15968],{"class":138},[128,55700,55701],{"class":130,"line":310},[128,55702,55703],{"class":3814},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[128,55705,55706,55708,55711,55713,55716,55718,55720],{"class":130,"line":323},[128,55707,558],{"class":134},[128,55709,55710],{"class":138}," (arr[j] ",[128,55712,4705],{"class":134},[128,55714,55715],{"class":138}," arr[j ",[128,55717,2457],{"class":134},[128,55719,28605],{"class":166},[128,55721,55722],{"class":138},"]) {\n",[128,55724,55725],{"class":130,"line":330},[128,55726,55727],{"class":3814},"          \u002F\u002F 交换两个变量\n",[128,55729,55730,55733,55736,55738],{"class":130,"line":335},[128,55731,55732],{"class":134},"          let",[128,55734,55735],{"class":138}," tmp ",[128,55737,270],{"class":134},[128,55739,55740],{"class":138}," arr[j]\n",[128,55742,55743,55746,55748,55750,55752,55754],{"class":130,"line":340},[128,55744,55745],{"class":138},"          arr[j] ",[128,55747,270],{"class":134},[128,55749,55715],{"class":138},[128,55751,2457],{"class":134},[128,55753,28605],{"class":166},[128,55755,2376],{"class":138},[128,55757,55758,55761,55763,55765,55767,55769],{"class":130,"line":351},[128,55759,55760],{"class":138},"          arr[j ",[128,55762,2457],{"class":134},[128,55764,28605],{"class":166},[128,55766,567],{"class":138},[128,55768,270],{"class":134},[128,55770,55771],{"class":138}," tmp\n",[128,55773,55774],{"class":130,"line":384},[128,55775,2014],{"class":138},[128,55777,55778],{"class":130,"line":414},[128,55779,55780],{"class":138},"      }\n",[128,55782,55783],{"class":130,"line":419},[128,55784,5773],{"class":138},[128,55786,55787,55790,55792],{"class":130,"line":424},[128,55788,55789],{"class":138},"    document.",[128,55791,55310],{"class":199},[128,55793,55794],{"class":138},"(arr)\n",[128,55796,55797,55800,55802],{"class":130,"line":434},[128,55798,55799],{"class":138},"  \u003C\u002F",[128,55801,55196],{"class":54685},[128,55803,54692],{"class":138},[128,55805,55806,55808,55810],{"class":130,"line":447},[128,55807,55168],{"class":138},[128,55809,55183],{"class":54685},[128,55811,54692],{"class":138},[128,55813,55814],{"class":130,"line":459},[128,55815,160],{"emptyLinePlaceholder":159},[128,55817,55818,55820,55822],{"class":130,"line":471},[128,55819,55168],{"class":138},[128,55821,54020],{"class":54685},[128,55823,54692],{"class":138},[19,55825,55826],{},[5074,55827],{"alt":112,"src":55828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,55830,55831],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,55833,55834],{},"let arr = [4, 2, 5, 1, 3]",[19,55836,55837],{},"\u002F\u002F 1.升序排列写法",[19,55839,55840],{},"arr.sort(function (a, b) {",[19,55842,55843],{},"return a - b",[19,55845,55846],{},"})",[19,55848,55849],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,55851,55852],{},"\u002F\u002F 降序排列写法",[19,55854,55840],{},[19,55856,55857],{},"return b - a",[19,55859,55846],{},[19,55861,55862],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,55864,55866],{"id":55865},"_29-函数","2.9 函数",[19,55868,55869],{},[5074,55870],{"alt":112,"src":55871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,55873,55874],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,55876,55877],{},"函数的声明用function",[19,55879,55880],{},"函数里边可以嵌套函数",[72,55882,55884],{"id":55883},"_291-函数传参","2.9.1 函数传参",[19,55886,55887],{},[5074,55888],{"alt":112,"src":55889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,55891,55892],{},[5074,55893],{"alt":112,"src":55894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[4752,55896,55897,55900,55903,55906,55909,55912],{},[29,55898,55899],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[29,55901,55902],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[29,55904,55905],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[29,55907,55908],{},"开发中尽量保持形参和实参个数一致",[29,55910,55911],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[29,55913,55914],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,55916,55917],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[72,55919,55921],{"id":55920},"_292-函数的返回值","2.9.2 函数的返回值",[19,55923,55924],{},[5074,55925],{"alt":112,"src":55926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,55928,55929],{},[5074,55930],{"alt":112,"src":55931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[4752,55933,55934,55937,55940,55943,55946],{},[29,55935,55936],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[29,55938,55939],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[29,55941,55942],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[29,55944,55945],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[29,55947,55948],{},"断点调试:进入函数内部看执行过程F11",[72,55950,55952],{"id":55951},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[106,55954,55956],{"className":54018,"code":55955,"language":54020,"meta":112,"style":112},"    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",[114,55957,55958,55963,55968,55972,55977],{"__ignoreMap":112},[128,55959,55960],{"class":130,"line":131},[128,55961,55962],{"class":138},"    function fn(a, b) {\n",[128,55964,55965],{"class":130,"line":142},[128,55966,55967],{"class":138},"      console.log(a + b);\n",[128,55969,55970],{"class":130,"line":156},[128,55971,5773],{"class":138},[128,55973,55974],{"class":130,"line":163},[128,55975,55976],{"class":138},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[128,55978,55979],{"class":130,"line":183},[128,55980,55981],{"class":138},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[72,55983,55985],{"id":55984},"_294-作用域","2.9.4 作用域",[4752,55987,55988,55994,55999,56002,56005],{},[29,55989,55990,55991],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[3903,55992,55993],{},"作用域",[29,55995,55996],{},[3903,55997,55998],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[29,56000,56001],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[29,56003,56004],{},"函数内部可以直接所使用全局变量",[29,56006,56007],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,56009,18157],{},[106,56011,56013],{"className":54018,"code":56012,"language":54020,"meta":112,"style":112},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[114,56014,56015,56020,56025,56029,56034,56039,56044],{"__ignoreMap":112},[128,56016,56017],{"class":130,"line":131},[128,56018,56019],{"class":138},"    function fun() {\n",[128,56021,56022],{"class":130,"line":142},[128,56023,56024],{"class":138},"      num = 10\n",[128,56026,56027],{"class":130,"line":156},[128,56028,5773],{"class":138},[128,56030,56031],{"class":130,"line":163},[128,56032,56033],{"class":138},"    fun()\n",[128,56035,56036],{"class":130,"line":183},[128,56037,56038],{"class":138},"    console.log(num)\n",[128,56040,56041],{"class":130,"line":188},[128,56042,56043],{"class":138},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[128,56045,56046],{"class":130,"line":193},[128,56047,56048],{"class":138},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[4752,56050,56051,56054],{},[29,56052,56053],{},"函数内部的形参可以看做是局部变量",[29,56055,56056],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,56058,56059,56060],{},"变量访问原则： ",[3903,56061,56062],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[72,56064,56066],{"id":56065},"_295-匿名函数","2.9.5 匿名函数",[19,56068,56069],{},"函数可以分为具名函数和匿名函数",[19,56071,56072],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[26,56074,56075],{},[29,56076,56077],{},"函数表达式",[19,56079,56080],{},[5074,56081],{"alt":112,"src":56082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,56084,56085],{},"里边也可以写参数",[19,56087,56088],{},"具名函数调用位置可以随意调整；",[19,56090,56091],{},"匿名函数函数表达式形式只能在声明后才可以使用",[26,56093,56094],{"start":142},[29,56095,56096],{},"立即执行函数",[19,56098,56099],{},[5074,56100],{"alt":112,"src":56101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,56103,56104],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,56106,56107],{},"写法：两个小括号，然后在第一个小括号中写function",[19,56109,56110],{},"(function () {})();",[19,56112,56113],{},"不要落下最后的;",[19,56115,56116],{},"立即执行函数必须要加;",[19,56118,56119],{},"分号写前写后都没问题",[19,56121,56122],{},"写前：",[19,56124,56125],{},"(function() {})()",[19,56127,56128],{},";(function () {})();",[19,56130,56131],{},"写后:",[19,56133,56134],{},"(function() {})();",[19,56136,56110],{},[19,56138,56139],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,56141,56142],{},"还有一种写法：",[19,56144,56145],{},"(function(){}());",[19,56147,56148],{},"或者:",[19,56150,56151],{},"!function(){}();",[19,56153,56154],{},"立即执行函数有时候也是可以加名字的：",[19,56156,56157],{},"(function flexible(window,document) {}(window,document));",[19,56159,56160],{},"省一些调用方法",[72,56162,56164],{"id":56163},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,56166,56167],{},[5074,56168],{"alt":112,"src":56169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,56171,56172],{},"这样就不用非得给x,y初始化了",[19,56174,56175],{},[5074,56176],{"alt":112,"src":56177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,56179,56180],{},"代码执行时先看左边",[19,56182,56183],{},"例如：console.log(false && 3+5)",[19,56185,56186],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,56188,56189],{},"&&都是真时，就返回最后一个真值",[19,56191,56192],{},"console.log(11 && 22)",[19,56194,56195],{},"输出22",[19,56197,56198],{},"逻辑与：遇真则真",[19,56200,18157],{},[19,56202,56203],{},"let age=1",[19,56205,56206],{},"console.log(11 || age++)",[19,56208,56209],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,56211,56212],{},"console.log(11 || 22)",[19,56214,56215],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,56217,56218],{},"||如果都是假的话，就取最后一个假的值了",[72,56220,56222],{"id":56221},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,56224,56225],{},"显示转换：",[19,56227,56228,56231,56232],{},[3903,56229,56230],{},"记忆","： ",[3903,56233,56234],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,56236,56237],{},"空字符串为假，其他字符串全为真",[19,56239,56240],{},[5074,56241],{"alt":112,"src":56242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,56244,56245],{},"隐式转换：",[19,56247,56248],{},[5074,56249],{"alt":112,"src":56250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,56252,56253],{},"隐式转换:",[19,56255,56256],{},"null+3=3",[19,56258,56259],{},"undefined+3=NaN",[19,56261,56262],{},"null==undefined 输出true,他两个都当0看",[19,56264,56265],{},"null===undefined 输出false",[19,56267,56268],{},"undefined做任何操作都是NaN",[19,56270,56271],{},"NaN不等于NaN，NaN表示计算错误",[14,56273,56275],{"id":56274},"_210-对象","2.10 对象",[72,56277,56279],{"id":56278},"_2101-对象的介绍","2.10.1 对象的介绍",[19,56281,56282],{},"对象也是一种数据类型，里边的数据是无序的",[19,56284,56285],{},"对象由属性和方法组成",[19,56287,56288],{},[5074,56289],{"alt":112,"src":56290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,56292,56293],{},[5074,56294],{"alt":112,"src":56295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,56297,56298],{},[5074,56299],{"alt":112,"src":56300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[72,56302,56304],{"id":56303},"_2102-对象属性","2.10.2 对象属性",[19,56306,56307],{},[5074,56308],{"alt":112,"src":56309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[26,56311,56312],{},[29,56313,56314],{},"查询对象",[19,56316,56317],{},"对象名.属性 goods.uname",[19,56319,56320],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,56322,56323],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,56325,56326],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,56328,56329],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[26,56331,56332],{"start":142},[29,56333,56334],{},"重新赋值",[19,56336,56337],{},"对象名.属性=新值",[26,56339,56340],{"start":156},[29,56341,56342],{},"增加新数据",[19,56344,56337],{},[26,56346,56347],{"start":163},[29,56348,56349],{},"删除对象中的属性",[19,56351,56352],{},"delete 对象名.属性",[72,56354,56356],{"id":56355},"_2103-对象方法","2.10.3 对象方法",[19,56358,56359],{},[5074,56360],{"alt":112,"src":56361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,56363,56364],{},"后边跟的是匿名函数",[19,56366,56367],{},"对象外面的叫函数；对象内部的叫方法",[19,56369,56370],{},[5074,56371],{"alt":112,"src":56372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[72,56374,56376],{"id":56375},"_2104-遍历对象","2.10.4 遍历对象",[19,56378,56379],{},"理解为加括号的python字典遍历",[19,56381,56382],{},[5074,56383],{"alt":112,"src":56384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,56386,56387],{},"k是字符串类型",[19,56389,56390],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[106,56392,56394],{"className":54018,"code":56393,"language":54020,"meta":112,"style":112},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[114,56395,56396,56401,56406,56411,56416],{"__ignoreMap":112},[128,56397,56398],{"class":130,"line":131},[128,56399,56400],{"class":138},"   let arr = [1, 2, 3]\n",[128,56402,56403],{"class":130,"line":142},[128,56404,56405],{"class":138},"    for (let k in arr) {\n",[128,56407,56408],{"class":130,"line":156},[128,56409,56410],{"class":138},"      console.log(k)\n",[128,56412,56413],{"class":130,"line":163},[128,56414,56415],{"class":138},"      console.log(arr[k])\n",[128,56417,56418],{"class":130,"line":183},[128,56419,5773],{"class":138},[19,56421,56422],{},[5074,56423],{"alt":112,"src":56424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,56426,56427],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,56429,56430],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,56432,56433],{},"for in 得到的k是属性名",[55196,56435,56436],{},"\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,56438,56439],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[72,56441,56443],{"id":56442},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,56445,56446],{},"数组中放对象信息",[106,56448,56452],{"className":56449,"code":56450,"language":56451,"meta":112,"style":112},"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",[114,56453,56454,56462,56467,56472,56477,56482,56487,56492,56497,56502,56507,56512,56517,56521,56525],{"__ignoreMap":112},[128,56455,56456,56458,56460],{"class":130,"line":131},[128,56457,4657],{"class":138},[128,56459,55196],{"class":54685},[128,56461,54692],{"class":138},[128,56463,56464],{"class":130,"line":142},[128,56465,56466],{"class":138},"    let students = [\n",[128,56468,56469],{"class":130,"line":156},[128,56470,56471],{"class":138},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[128,56473,56474],{"class":130,"line":163},[128,56475,56476],{"class":138},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[128,56478,56479],{"class":130,"line":183},[128,56480,56481],{"class":138},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[128,56483,56484],{"class":130,"line":188},[128,56485,56486],{"class":138},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[128,56488,56489],{"class":130,"line":193},[128,56490,56491],{"class":138},"    ]\n",[128,56493,56494],{"class":130,"line":206},[128,56495,56496],{"class":138},"    for (let i = 0; i \u003C students.length; i++) {\n",[128,56498,56499],{"class":130,"line":221},[128,56500,56501],{"class":138},"      for (let k in students[i]) {\n",[128,56503,56504],{"class":130,"line":230},[128,56505,56506],{"class":138},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[128,56508,56509],{"class":130,"line":235},[128,56510,56511],{"class":138},"        \u002F\u002F输出每个人的名字：\n",[128,56513,56514],{"class":130,"line":244},[128,56515,56516],{"class":138},"        \u002F\u002Fconsole.log(students[i].name)\n",[128,56518,56519],{"class":130,"line":287},[128,56520,55780],{"class":138},[128,56522,56523],{"class":130,"line":301},[128,56524,5773],{"class":138},[128,56526,56527,56529,56531],{"class":130,"line":310},[128,56528,55799],{"class":138},[128,56530,55196],{"class":54685},[128,56532,54692],{"class":138},[72,56534,56536],{"id":56535},"_2106-内置对象","2.10.6 内置对象",[19,56538,56539],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[26,56541,56542],{},[29,56543,56544],{},"数学对象Math",[19,56546,56547],{},[5074,56548],{"alt":112,"src":56549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,56551,56552],{},[3989,56553,56556],{"href":56554,"rel":56555},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[27352],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,56558,56559],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,56561,56562],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,56564,56565],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,56567,56568],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,56570,56571],{},"null属于对象数据类型",[26,56573,56574],{"start":142},[29,56575,56576],{},"生成任意范围随机数",[19,56578,56579],{},[5074,56580],{"alt":112,"src":56581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,56583,56584],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,56586,56587],{},"乘以几就取不到几",[19,56589,56590],{},"取数组中的随机元素：",[19,56592,56593],{},"let arr = ['red', 'green', 'blue']",[19,56595,56596],{},"let random = Math.floor(Math.random() * arr.length)",[19,56598,56599],{},"console.log(arr[random])",[19,56601,56602],{},"这个函数得到的是全闭区间",[19,56604,56605],{},"function getRandom(N, M) {",[19,56607,56608],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,56610,1453],{},[19,56612,56613],{},"console.log(getRandom(4, 8))",[72,56615,56617],{"id":56616},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,56619,56620],{},[5074,56621],{"alt":112,"src":56622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,56624,56625],{},[5074,56626],{"alt":112,"src":56627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,56629,56630],{},[5074,56631],{"alt":112,"src":56632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,56634,56635],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,56637,56638],{},[5074,56639],{"alt":112,"src":56640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,56642,56643],{},[5074,56644],{"alt":112,"src":56645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,56647,56648],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,56650,56651],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,56653,56654],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[3659,56656,56657],{},"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":112,"searchDepth":142,"depth":142,"links":56659},[56660,56668,56669,56670,56671,56672,56679,56683,56689,56698],{"id":53853,"depth":142,"text":53854,"children":56661},[56662,56663,56664,56665,56666,56667],{"id":53857,"depth":156,"text":53858},{"id":53874,"depth":156,"text":53875},{"id":53914,"depth":156,"text":53915},{"id":53926,"depth":156,"text":53927},{"id":53935,"depth":156,"text":53936},{"id":53983,"depth":156,"text":53984},{"id":53993,"depth":142,"text":53994},{"id":54081,"depth":142,"text":54082},{"id":54104,"depth":142,"text":54105},{"id":54116,"depth":142,"text":54117},{"id":54303,"depth":142,"text":54304,"children":56673},[56674,56675,56676,56677,56678],{"id":54307,"depth":156,"text":54308},{"id":54316,"depth":156,"text":54317},{"id":54344,"depth":156,"text":54345},{"id":54380,"depth":156,"text":54381},{"id":54405,"depth":156,"text":54406},{"id":54417,"depth":142,"text":54418,"children":56680},[56681,56682],{"id":54438,"depth":156,"text":54439},{"id":54532,"depth":156,"text":54533},{"id":54590,"depth":142,"text":54591,"children":56684},[56685,56686,56687,56688],{"id":54594,"depth":156,"text":54595},{"id":54618,"depth":156,"text":54619},{"id":54671,"depth":156,"text":54672},{"id":55479,"depth":156,"text":55480},{"id":55865,"depth":142,"text":55866,"children":56690},[56691,56692,56693,56694,56695,56696,56697],{"id":55883,"depth":156,"text":55884},{"id":55920,"depth":156,"text":55921},{"id":55951,"depth":156,"text":55952},{"id":55984,"depth":156,"text":55985},{"id":56065,"depth":156,"text":56066},{"id":56163,"depth":156,"text":56164},{"id":56221,"depth":156,"text":56222},{"id":56274,"depth":142,"text":56275,"children":56699},[56700,56701,56702,56703,56704,56705,56706],{"id":56278,"depth":156,"text":56279},{"id":56303,"depth":156,"text":56304},{"id":56355,"depth":156,"text":56356},{"id":56375,"depth":156,"text":56376},{"id":56442,"depth":156,"text":56443},{"id":56535,"depth":156,"text":56536},{"id":56616,"depth":156,"text":56617},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":53845,"description":3686},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":56713,"title":56714,"body":56715,"description":3686,"extension":3687,"meta":80047,"navigation":159,"path":80048,"seo":80049,"stem":80050,"__hash__":80051},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":56716,"toc":79987},[56717,56720,56723,56726,56731,56734,56737,56740,56744,56748,56754,56759,56767,56774,56777,56781,56786,56791,56796,56799,56802,56813,56816,56820,56823,56826,56831,56836,56841,56844,56847,56939,56942,56947,56950,56955,56958,56961,56966,56969,56974,56978,56981,56995,56999,57004,57007,57010,57014,57019,57022,57026,57030,57035,57039,57044,57047,57050,57053,57056,57059,57062,57067,57072,57100,57103,57106,57109,57114,57117,57120,57123,57126,57130,57159,57163,57168,57173,57176,57179,57182,57187,57301,57306,57311,57472,57477,57480,57484,57489,57494,57497,57500,57503,57506,57509,57512,57515,57518,57521,57524,57527,57530,57533,57536,57538,57541,57544,57547,57552,57556,57953,57956,57962,57966,57971,59252,59257,59260,59263,59266,59271,60467,60471,60477,60482,60485,60490,60495,60499,60503,60508,60511,60516,60519,60522,60526,61434,61437,61441,61662,61665,61668,61671,61897,61900,62124,62127,62131,62136,62139,62142,62370,62373,62406,62409,62413,62418,62422,62425,62428,62431,62434,62437,62440,62443,62448,63728,63732,63735,64827,64831,64834,64837,64840,64843,64847,64850,64853,64855,64863,66343,66347,66350,66353,66356,66565,66568,66572,66576,66581,66586,66589,66592,66597,66601,66606,66609,66718,66722,66727,66732,66735,66738,66742,66747,66752,66757,66760,66763,66774,66777,66782,66787,66790,66793,66866,66870,66875,66878,66880,66891,66895,66900,68226,68229,68232,68235,68237,68240,68243,68246,68249,68252,68255,68258,68261,68264,68267,68270,68273,68275,68277,68280,68284,69378,69381,69384,69400,69414,69417,69422,69428,69433,69437,69441,69446,69450,69455,69897,69902,69905,69909,69914,69917,69920,69924,69929,69933,69938,69943,69947,69952,69957,69960,69965,69970,69974,69979,69984,70088,70091,70095,70100,70466,70469,70472,70475,70478,70481,70484,70487,70490,71786,71790,71795,71800,71803,71806,71809,71812,71814,71819,71824,71827,71831,71836,71841,71846,71849,71852,71855,71858,71861,71866,71869,71873,71878,71883,71887,71892,71895,71900,71903,71906,71909,71912,71915,71920,71923,71926,71929,71932,71936,71941,71944,71948,71953,71956,71959,71963,71992,71995,71999,72003,72008,72012,72017,72020,72023,72026,72029,72032,72035,72038,72041,72044,72047,72050,72053,72056,72059,72063,72068,72073,72076,72080,72084,72089,72092,72096,72099,72102,72107,72112,72117,72122,72127,72130,72133,72138,72143,72147,72152,72155,72160,72163,72166,72169,72172,72177,72180,72189,72193,72198,72201,72204,72208,72211,72216,72220,72223,72229,72235,72239,72265,72268,73826,73829,74325,74328,74333,74338,74343,74347,74352,74357,74362,74366,74371,74374,74377,74380,74383,74387,74390,74395,74398,74403,74407,74412,74415,74420,74425,74430,74433,74436,74441,74446,74449,74452,74456,74459,74464,74467,74472,74475,74480,74485,74490,74493,74498,74563,74566,74577,74581,74586,74758,74762,74767,74770,74773,74776,74780,74791,74795,74798,74803,74808,74811,74814,74817,74820,74823,74825,74828,74831,74834,74839,74842,74847,74850,74854,74857,74860,74874,74878,74881,74936,74941,74944,74947,74952,74955,74959,74964,75094,75098,75103,75108,75189,75194,75198,75201,75206,75211,75217,75220,75223,75226,75230,75235,75238,75249,75253,75270,78316,78320,78323,78326,78329,78350,78354,78357,78365,78368,78373,78376,78379,78384,78389,78393,78414,78418,78423,78426,78429,78432,78435,78439,78444,78447,78451,78456,78459,78464,78467,78472,78475,78480,79683,79687,79692,79695,79700,79984],[10,56718,56714],{"id":56719},"_3web-apis",[19,56721,56722],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,56724,56725],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,56727,56728],{},[5074,56729],{"alt":112,"src":56730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,56732,56733],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,56735,56736],{},"建议数组和对象使用 const 来声明",[19,56738,56739],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,56741,56743],{"id":56742},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[72,56745,56747],{"id":56746},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,56749,56750,56753],{},[114,56751,56752],{},"document"," = HTML 文件解析后的对象化表示；",[19,56755,56756,56758],{},[114,56757,56752],{}," ≠ HTML 文件本身",[19,56760,56761,56766],{},[3903,56762,56763],{},[114,56764,56765],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,56768,56769,56773],{},[3903,56770,56771],{},[114,56772,56752],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,56775,56776],{},"document实际上为window.document的简写",[72,56778,56780],{"id":56779},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,56782,56783],{},[5074,56784],{"alt":112,"src":56785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,56787,56788],{},[5074,56789],{"alt":112,"src":56790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,56792,56793],{},[5074,56794],{"alt":112,"src":56795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,56797,56798],{},"console.dir()",[19,56800,56801],{},"dir用来打印对象",[4752,56803,56804,56807,56810],{},[29,56805,56806],{},"任何一个标签，都是一个对象",[29,56808,56809],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[29,56811,56812],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,56814,56815],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[72,56817,56819],{"id":56818},"_312-获取dom对象","3.1.2 获取DoM对象",[19,56821,56822],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,56824,56825],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,56827,56828],{},[3903,56829,56830],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[26,56832,56833],{},[29,56834,56835],{},"利用CSS选择器来获取标签元素",[19,56837,56838],{},[5074,56839],{"alt":112,"src":56840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,56842,56843],{},"里边的选择器必须必须加引号！！！",[19,56845,56846],{},"只选择第一个元素",[106,56848,56850],{"className":56449,"code":56849,"language":56451,"meta":112,"style":112},"\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",[114,56851,56852,56860,56881,56900,56908,56913,56918,56923,56931],{"__ignoreMap":112},[128,56853,56854,56856,56858],{"class":130,"line":131},[128,56855,4657],{"class":138},[128,56857,55183],{"class":54685},[128,56859,54692],{"class":138},[128,56861,56862,56864,56866,56869,56871,56874,56877,56879],{"class":130,"line":142},[128,56863,55526],{"class":138},[128,56865,54994],{"class":54685},[128,56867,56868],{"class":199}," class",[128,56870,270],{"class":138},[128,56872,56873],{"class":176},"\"box\"",[128,56875,56876],{"class":138},">123\u003C\u002F",[128,56878,54994],{"class":54685},[128,56880,54692],{"class":138},[128,56882,56883,56885,56887,56889,56891,56893,56896,56898],{"class":130,"line":156},[128,56884,55526],{"class":138},[128,56886,54994],{"class":54685},[128,56888,56868],{"class":199},[128,56890,270],{"class":138},[128,56892,56873],{"class":176},[128,56894,56895],{"class":138},">456\u003C\u002F",[128,56897,54994],{"class":54685},[128,56899,54692],{"class":138},[128,56901,56902,56904,56906],{"class":130,"line":163},[128,56903,55526],{"class":138},[128,56905,55196],{"class":54685},[128,56907,54692],{"class":138},[128,56909,56910],{"class":130,"line":183},[128,56911,56912],{"class":138},"    \u002F\u002F 1.获取匹配的第一个元素\n",[128,56914,56915],{"class":130,"line":188},[128,56916,56917],{"class":138},"    const box = document.querySelector('div')\n",[128,56919,56920],{"class":130,"line":193},[128,56921,56922],{"class":138},"    console.dir(box)\n",[128,56924,56925,56927,56929],{"class":130,"line":206},[128,56926,55799],{"class":138},[128,56928,55196],{"class":54685},[128,56930,54692],{"class":138},[128,56932,56933,56935,56937],{"class":130,"line":221},[128,56934,55168],{"class":138},[128,56936,55183],{"class":54685},[128,56938,54692],{"class":138},[19,56940,56941],{},"只选123，不选456",[19,56943,56944],{},[5074,56945],{"alt":112,"src":56946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,56948,56949],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,56951,56952],{},[5074,56953],{"alt":112,"src":56954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,56956,56957],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,56959,56960],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[26,56962,56963],{"start":142},[29,56964,56965],{},"其他方法来获取标签元素",[19,56967,56968],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,56970,56971],{},[5074,56972],{"alt":112,"src":56973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[72,56975,56977],{"id":56976},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,56979,56980],{},"设置修改DOM元素内容有两种方式：",[4752,56982,56983,56986,56989,56992],{},[29,56984,56985],{},"元素.innerText=''",[29,56987,56988],{},"元素.innerHTML=''",[29,56990,56991],{},"不写字符串输出数字也是可以的",[29,56993,56994],{},"元素.innerHtml=1",[25485,56996,56998],{"id":56997},"_3131-innertext","3.1.3.1 innerText",[19,57000,57001],{},[5074,57002],{"alt":112,"src":57003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,57005,57006],{},"思路：实现了修改盒子中的内容！",[19,57008,57009],{},"它只显示纯文本，不解析标签",[25485,57011,57013],{"id":57012},"_3132-innerhtml","3.1.3.2 innerHTML",[19,57015,57016],{},[5074,57017],{"alt":112,"src":57018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,57020,57021],{},"相比于innerText，他的强大之处在于可以解析标签",[72,57023,57025],{"id":57024},"_314-操作元素属性","3.1.4 操作元素属性",[25485,57027,57029],{"id":57028},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,57031,57032],{},[5074,57033],{"alt":112,"src":57034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[25485,57036,57038],{"id":57037},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,57040,57041],{},[5074,57042],{"alt":112,"src":57043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,57045,57046],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,57048,57049],{},"div.style.backgroundColor = 'hotpink'",[19,57051,57052],{},"如果按照css的写法，-表示减，就会出错",[19,57054,57055],{},"body元素不需要再获取，直接用就行！！！！！！",[19,57057,57058],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,57060,57061],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,57063,57064],{},[5074,57065],{"alt":112,"src":57066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,57068,57069],{},[5074,57070],{"alt":112,"src":57071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[26,57073,57074,57077,57080,57083,57086,57089],{},[29,57075,57076],{},"className这个方式就是修改很多样式的时候来使用的！",[29,57078,57079],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[29,57081,57082],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[29,57084,57085],{},"className为属性名，如果还用class的话就导致与关键字冲突",[29,57087,57088],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[29,57090,57091,57092,57097],{},"解析标签的时候就变为了",[54994,57093],{"className":57094},[57095,57096],"nav","box",[57098,57099],"br",{},[19,57101,57102],{},"例子：",[54994,57104],{"className":57105},[57095],[55196,57107,57108],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,57110,57111],{},[5074,57112],{"alt":112,"src":57113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,57115,57116],{},"追加和删除类名用classList",[19,57118,57119],{},"常用于类似于开关的操作",[19,57121,57122],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,57124,57125],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[25485,57127,57129],{"id":57128},"_3143-牢记点","3.1.4.3 牢记点",[26,57131,57132,57135,57138,57141,57144,57147,57150,57153,57156],{},[29,57133,57134],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[29,57136,57137],{},"使用style属性操作css时不要忘记引号",[29,57139,57140],{},"使用className或者classList时也不要忘记引号",[29,57142,57143],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[29,57145,57146],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[29,57148,57149],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[29,57151,57152],{},"若： let arr=['1','2',3] arr[0]=1",[29,57154,57155],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[29,57157,57158],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[72,57160,57162],{"id":57161},"_315-操作表单元素","3.1.5 操作表单元素",[26,57164,57165],{},[29,57166,57167],{},"天生的属性",[19,57169,57170],{},[5074,57171],{"alt":112,"src":57172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,57174,57175],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,57177,57178],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,57180,57181],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,57183,57184],{},[5074,57185],{"alt":112,"src":57186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[106,57188,57190],{"className":54018,"code":57189,"language":54020,"meta":112,"style":112},"在复选框中如果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",[114,57191,57192,57197,57228,57233,57238,57243,57248,57252,57257,57262,57279,57291,57296],{"__ignoreMap":112},[128,57193,57194],{"class":130,"line":131},[128,57195,57196],{"class":138},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[128,57198,57199,57201,57203,57206,57208,57211,57213,57215,57217,57219,57221,57223,57226],{"class":130,"line":142},[128,57200,4657],{"class":138},[128,57202,643],{"class":54685},[128,57204,57205],{"class":199}," type",[128,57207,270],{"class":138},[128,57209,57210],{"class":176},"\"checkbox\"",[128,57212,18442],{"class":199},[128,57214,270],{"class":138},[128,57216,11209],{"class":176},[128,57218,18481],{"class":199},[128,57220,270],{"class":138},[128,57222,11209],{"class":176},[128,57224,57225],{"class":199}," checked",[128,57227,54692],{"class":138},[128,57229,57230],{"class":130,"line":156},[128,57231,57232],{"class":138},"不选的话：\n",[128,57234,57235],{"class":130,"line":163},[128,57236,57237],{"class":138},"const input = document.querySelector('input')\n",[128,57239,57240],{"class":130,"line":183},[128,57241,57242],{"class":138},"input.checked=false\n",[128,57244,57245],{"class":130,"line":188},[128,57246,57247],{"class":138},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[128,57249,57250],{"class":130,"line":193},[128,57251,160],{"emptyLinePlaceholder":159},[128,57253,57254],{"class":130,"line":206},[128,57255,57256],{"class":138},"禁用按钮：\n",[128,57258,57259],{"class":130,"line":221},[128,57260,57261],{"class":138},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[128,57263,57264,57266,57269,57272,57275,57277],{"class":130,"line":230},[128,57265,4657],{"class":138},[128,57267,57268],{"class":54685},"button",[128,57270,57271],{"class":199}," disabled",[128,57273,57274],{"class":138},">点击\u003C\u002F",[128,57276,57268],{"class":54685},[128,57278,54692],{"class":138},[128,57280,57281,57283,57285,57287,57289],{"class":130,"line":235},[128,57282,4657],{"class":138},[128,57284,57268],{"class":54685},[128,57286,57274],{"class":138},[128,57288,57268],{"class":54685},[128,57290,54692],{"class":138},[128,57292,57293],{"class":130,"line":244},[128,57294,57295],{"class":138},"const bt = document.querySelector('button')\n",[128,57297,57298],{"class":130,"line":287},[128,57299,57300],{"class":138},"bt.disabled = false\n",[26,57302,57303],{"start":142},[29,57304,57305],{},"自定义属性",[19,57307,57308],{},[5074,57309],{"alt":112,"src":57310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[106,57312,57314],{"className":56449,"code":57313,"language":56451,"meta":112,"style":112},"\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",[114,57315,57316,57324,57352,57371,57390,57409,57428,57436,57441,57446,57451,57456,57464],{"__ignoreMap":112},[128,57317,57318,57320,57322],{"class":130,"line":131},[128,57319,4657],{"class":138},[128,57321,55183],{"class":54685},[128,57323,54692],{"class":138},[128,57325,57326,57328,57330,57333,57335,57337,57340,57342,57345,57348,57350],{"class":130,"line":142},[128,57327,55526],{"class":138},[128,57329,54994],{"class":54685},[128,57331,57332],{"class":199}," data-id",[128,57334,270],{"class":138},[128,57336,7246],{"class":176},[128,57338,57339],{"class":199}," data-spm",[128,57341,270],{"class":138},[128,57343,57344],{"class":176},"\"我不知道\"",[128,57346,57347],{"class":138},">1\u003C\u002F",[128,57349,54994],{"class":54685},[128,57351,54692],{"class":138},[128,57353,57354,57356,57358,57360,57362,57364,57367,57369],{"class":130,"line":156},[128,57355,55526],{"class":138},[128,57357,54994],{"class":54685},[128,57359,57332],{"class":199},[128,57361,270],{"class":138},[128,57363,7269],{"class":176},[128,57365,57366],{"class":138},">2\u003C\u002F",[128,57368,54994],{"class":54685},[128,57370,54692],{"class":138},[128,57372,57373,57375,57377,57379,57381,57383,57386,57388],{"class":130,"line":163},[128,57374,55526],{"class":138},[128,57376,54994],{"class":54685},[128,57378,57332],{"class":199},[128,57380,270],{"class":138},[128,57382,7282],{"class":176},[128,57384,57385],{"class":138},">3\u003C\u002F",[128,57387,54994],{"class":54685},[128,57389,54692],{"class":138},[128,57391,57392,57394,57396,57398,57400,57402,57405,57407],{"class":130,"line":183},[128,57393,55526],{"class":138},[128,57395,54994],{"class":54685},[128,57397,57332],{"class":199},[128,57399,270],{"class":138},[128,57401,7295],{"class":176},[128,57403,57404],{"class":138},">4\u003C\u002F",[128,57406,54994],{"class":54685},[128,57408,54692],{"class":138},[128,57410,57411,57413,57415,57417,57419,57421,57424,57426],{"class":130,"line":188},[128,57412,55526],{"class":138},[128,57414,54994],{"class":54685},[128,57416,57332],{"class":199},[128,57418,270],{"class":138},[128,57420,7315],{"class":176},[128,57422,57423],{"class":138},">5\u003C\u002F",[128,57425,54994],{"class":54685},[128,57427,54692],{"class":138},[128,57429,57430,57432,57434],{"class":130,"line":193},[128,57431,55526],{"class":138},[128,57433,55196],{"class":54685},[128,57435,54692],{"class":138},[128,57437,57438],{"class":130,"line":206},[128,57439,57440],{"class":138},"    const one = document.querySelector('div')\n",[128,57442,57443],{"class":130,"line":221},[128,57444,57445],{"class":138},"    console.log(one.dataset)\n",[128,57447,57448],{"class":130,"line":230},[128,57449,57450],{"class":138},"    console.log(one.dataset.id)\n",[128,57452,57453],{"class":130,"line":235},[128,57454,57455],{"class":138},"    console.log(one.dataset.spm)\n",[128,57457,57458,57460,57462],{"class":130,"line":244},[128,57459,55799],{"class":138},[128,57461,55196],{"class":54685},[128,57463,54692],{"class":138},[128,57465,57466,57468,57470],{"class":130,"line":287},[128,57467,55168],{"class":138},[128,57469,55183],{"class":54685},[128,57471,54692],{"class":138},[19,57473,57474],{},[5074,57475],{"alt":112,"src":57476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,57478,57479],{},"document.querySelector选择的是第一个对象（元素）",[72,57481,57483],{"id":57482},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,57485,57486],{},[5074,57487],{"alt":112,"src":57488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,57490,57491],{},[5074,57492],{"alt":112,"src":57493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,57495,57496],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[55196,57498,57499],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,57501,57502],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[55196,57504,57505],{},"\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,57507,57508],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,57510,57511],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,57513,57514],{},"单位为毫秒！！！",[19,57516,57517],{},"可以搭配匿名函数来用！！！",[19,57519,57520],{},"setInterval(function () {",[19,57522,57523],{},"alert('两秒执行一次')",[19,57525,57526],{},"}, 2000)",[19,57528,57529],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,57531,57532],{},"function fn() {",[19,57534,57535],{},"document.write(1)",[19,57537,1453],{},[19,57539,57540],{},"setInterval(fn, 1000)",[19,57542,57543],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,57545,57546],{},"setInterval('fn()', 1000)",[19,57548,57549],{},[5074,57550],{"alt":112,"src":57551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[25485,57553,57555],{"id":57554},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[106,57557,57559],{"className":54018,"code":57558,"language":54020,"meta":112,"style":112},"\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",[114,57560,57561,57571,57585,57589,57597,57611,57631,57643,57651,57655,57663,57700,57705,57710,57715,57723,57731,57753,57761,57766,57788,57793,57798,57809,57814,57834,57842,57857,57872,57883,57888,57898,57908,57912,57921,57925,57933,57941,57945],{"__ignoreMap":112},[128,57562,57563,57565,57567,57569],{"class":130,"line":131},[128,57564,54682],{"class":138},[128,57566,54686],{"class":54685},[128,57568,54689],{"class":199},[128,57570,54692],{"class":138},[128,57572,57573,57575,57577,57579,57581,57583],{"class":130,"line":142},[128,57574,4657],{"class":138},[128,57576,54020],{"class":54685},[128,57578,54701],{"class":199},[128,57580,270],{"class":138},[128,57582,54706],{"class":176},[128,57584,54692],{"class":138},[128,57586,57587],{"class":130,"line":156},[128,57588,160],{"emptyLinePlaceholder":159},[128,57590,57591,57593,57595],{"class":130,"line":163},[128,57592,4657],{"class":138},[128,57594,54719],{"class":54685},[128,57596,54692],{"class":138},[128,57598,57599,57601,57603,57605,57607,57609],{"class":130,"line":183},[128,57600,55526],{"class":138},[128,57602,54729],{"class":54685},[128,57604,54732],{"class":199},[128,57606,270],{"class":138},[128,57608,54737],{"class":176},[128,57610,54692],{"class":138},[128,57612,57613,57615,57617,57619,57621,57623,57625,57627,57629],{"class":130,"line":188},[128,57614,55526],{"class":138},[128,57616,54729],{"class":54685},[128,57618,18442],{"class":199},[128,57620,270],{"class":138},[128,57622,54776],{"class":176},[128,57624,54756],{"class":199},[128,57626,270],{"class":138},[128,57628,54783],{"class":176},[128,57630,54692],{"class":138},[128,57632,57633,57635,57637,57639,57641],{"class":130,"line":193},[128,57634,55526],{"class":138},[128,57636,2752],{"class":54685},[128,57638,54794],{"class":138},[128,57640,2752],{"class":54685},[128,57642,54692],{"class":138},[128,57644,57645,57647,57649],{"class":130,"line":206},[128,57646,55168],{"class":138},[128,57648,54719],{"class":54685},[128,57650,54692],{"class":138},[128,57652,57653],{"class":130,"line":221},[128,57654,160],{"emptyLinePlaceholder":159},[128,57656,57657,57659,57661],{"class":130,"line":230},[128,57658,4657],{"class":138},[128,57660,55183],{"class":54685},[128,57662,54692],{"class":138},[128,57664,57665,57667,57670,57672,57674,57676,57678,57680,57682,57685,57687,57690,57693,57695,57698],{"class":130,"line":235},[128,57666,55526],{"class":138},[128,57668,57669],{"class":54685},"textarea",[128,57671,18442],{"class":199},[128,57673,270],{"class":138},[128,57675,11209],{"class":176},[128,57677,18481],{"class":199},[128,57679,270],{"class":138},[128,57681,11209],{"class":176},[128,57683,57684],{"class":199}," cols",[128,57686,270],{"class":138},[128,57688,57689],{"class":176},"\"30\"",[128,57691,57692],{"class":199}," rows",[128,57694,270],{"class":138},[128,57696,57697],{"class":176},"\"10\"",[128,57699,54692],{"class":138},[128,57701,57702],{"class":130,"line":244},[128,57703,57704],{"class":138},"        用户注册协议\n",[128,57706,57707],{"class":130,"line":287},[128,57708,57709],{"class":138},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[128,57711,57712],{"class":130,"line":301},[128,57713,57714],{"class":138},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[128,57716,57717,57719,57721],{"class":130,"line":310},[128,57718,55159],{"class":138},[128,57720,57669],{"class":54685},[128,57722,54692],{"class":138},[128,57724,57725,57727,57729],{"class":130,"line":323},[128,57726,55526],{"class":138},[128,57728,57098],{"class":54685},[128,57730,54692],{"class":138},[128,57732,57733,57735,57737,57739,57741,57744,57746,57749,57751],{"class":130,"line":330},[128,57734,55526],{"class":138},[128,57736,57268],{"class":54685},[128,57738,56868],{"class":199},[128,57740,270],{"class":138},[128,57742,57743],{"class":176},"\"btn\"",[128,57745,57271],{"class":199},[128,57747,57748],{"class":138},">我已经阅读用户协议(5)\u003C\u002F",[128,57750,57268],{"class":54685},[128,57752,54692],{"class":138},[128,57754,57755,57757,57759],{"class":130,"line":335},[128,57756,55526],{"class":138},[128,57758,55196],{"class":54685},[128,57760,54692],{"class":138},[128,57762,57763],{"class":130,"line":340},[128,57764,57765],{"class":3814},"    \u002F\u002F 1. 获取元素\n",[128,57767,57768,57770,57773,57775,57778,57781,57783,57786],{"class":130,"line":351},[128,57769,14748],{"class":134},[128,57771,57772],{"class":166}," btn",[128,57774,170],{"class":134},[128,57776,57777],{"class":138}," document.",[128,57779,57780],{"class":199},"querySelector",[128,57782,253],{"class":138},[128,57784,57785],{"class":176},"'.btn'",[128,57787,180],{"class":138},[128,57789,57790],{"class":130,"line":384},[128,57791,57792],{"class":3814},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[128,57794,57795],{"class":130,"line":414},[128,57796,57797],{"class":3814},"    \u002F\u002F 2. 倒计时\n",[128,57799,57800,57802,57804,57806],{"class":130,"line":419},[128,57801,55601],{"class":134},[128,57803,12984],{"class":138},[128,57805,270],{"class":134},[128,57807,57808],{"class":166}," 5\n",[128,57810,57811],{"class":130,"line":424},[128,57812,57813],{"class":3814},"    \u002F\u002F 2.1 开启定时器\n",[128,57815,57816,57818,57821,57823,57826,57828,57831],{"class":130,"line":434},[128,57817,55601],{"class":134},[128,57819,57820],{"class":138}," n ",[128,57822,270],{"class":134},[128,57824,57825],{"class":199}," setInterval",[128,57827,253],{"class":138},[128,57829,57830],{"class":134},"function",[128,57832,57833],{"class":138}," () {\n",[128,57835,57836,57839],{"class":130,"line":447},[128,57837,57838],{"class":138},"      i",[128,57840,57841],{"class":134},"--\n",[128,57843,57844,57847,57849,57852,57854],{"class":130,"line":459},[128,57845,57846],{"class":138},"      btn.innerHTML ",[128,57848,270],{"class":134},[128,57850,57851],{"class":176}," `我已经阅读用户协议(${",[128,57853,4191],{"class":138},[128,57855,57856],{"class":176},"})`\n",[128,57858,57859,57862,57865,57868,57870],{"class":130,"line":471},[128,57860,57861],{"class":134},"      if",[128,57863,57864],{"class":138}," (i ",[128,57866,57867],{"class":134},"===",[128,57869,7659],{"class":166},[128,57871,15968],{"class":138},[128,57873,57874,57877,57880],{"class":130,"line":483},[128,57875,57876],{"class":199},"        clearInterval",[128,57878,57879],{"class":138},"(n)  ",[128,57881,57882],{"class":3814},"\u002F\u002F 关闭定时器\n",[128,57884,57885],{"class":130,"line":495},[128,57886,57887],{"class":3814},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[128,57889,57890,57893,57895],{"class":130,"line":507},[128,57891,57892],{"class":138},"        btn.disabled ",[128,57894,270],{"class":134},[128,57896,57897],{"class":166}," false\n",[128,57899,57900,57903,57905],{"class":130,"line":519},[128,57901,57902],{"class":138},"        btn.innerHTML ",[128,57904,270],{"class":134},[128,57906,57907],{"class":176}," '同意'\n",[128,57909,57910],{"class":130,"line":524},[128,57911,55780],{"class":138},[128,57913,57914,57917,57919],{"class":130,"line":529},[128,57915,57916],{"class":138},"    }, ",[128,57918,9967],{"class":166},[128,57920,180],{"class":138},[128,57922,57923],{"class":130,"line":540},[128,57924,160],{"emptyLinePlaceholder":159},[128,57926,57927,57929,57931],{"class":130,"line":555},[128,57928,55799],{"class":138},[128,57930,55196],{"class":54685},[128,57932,54692],{"class":138},[128,57934,57935,57937,57939],{"class":130,"line":576},[128,57936,55168],{"class":138},[128,57938,55183],{"class":54685},[128,57940,54692],{"class":138},[128,57942,57943],{"class":130,"line":584},[128,57944,160],{"emptyLinePlaceholder":159},[128,57946,57947,57949,57951],{"class":130,"line":593},[128,57948,55168],{"class":138},[128,57950,54020],{"class":54685},[128,57952,54692],{"class":138},[19,57954,57955],{},"不要一直想着用死循环,避免死循环",[19,57957,57958,57961],{},[114,57959,57960],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[25485,57963,57965],{"id":57964},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[26,57967,57968],{},[29,57969,57970],{},"法1",[106,57972,57974],{"className":54018,"code":57973,"language":54020,"meta":112,"style":112},"\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",[114,57975,57976,57986,58000,58004,58012,58026,58046,58058,58066,58072,58083,58094,58098,58102,58109,58121,58125,58129,58136,58148,58162,58175,58189,58193,58197,58204,58215,58226,58237,58249,58261,58273,58277,58281,58289,58299,58312,58324,58337,58341,58345,58352,58362,58374,58386,58397,58408,58418,58430,58442,58446,58450,58459,58471,58483,58511,58524,58528,58532,58539,58550,58554,58562,58570,58574,58582,58596,58611,58635,58643,58658,58671,58679,58700,58712,58724,58736,58748,58760,58772,58784,58793,58801,58809,58817,58828,58851,58870,58889,58908,58927,58946,58965,58985,58989,59009,59028,59048,59069,59080,59097,59107,59117,59127,59132,59137,59142,59147,59172,59185,59189,59212,59216,59224,59232,59240,59244],{"__ignoreMap":112},[128,57977,57978,57980,57982,57984],{"class":130,"line":131},[128,57979,54682],{"class":138},[128,57981,54686],{"class":54685},[128,57983,54689],{"class":199},[128,57985,54692],{"class":138},[128,57987,57988,57990,57992,57994,57996,57998],{"class":130,"line":142},[128,57989,4657],{"class":138},[128,57991,54020],{"class":54685},[128,57993,54701],{"class":199},[128,57995,270],{"class":138},[128,57997,54706],{"class":176},[128,57999,54692],{"class":138},[128,58001,58002],{"class":130,"line":156},[128,58003,160],{"emptyLinePlaceholder":159},[128,58005,58006,58008,58010],{"class":130,"line":163},[128,58007,4657],{"class":138},[128,58009,54719],{"class":54685},[128,58011,54692],{"class":138},[128,58013,58014,58016,58018,58020,58022,58024],{"class":130,"line":183},[128,58015,55526],{"class":138},[128,58017,54729],{"class":54685},[128,58019,54732],{"class":199},[128,58021,270],{"class":138},[128,58023,54737],{"class":176},[128,58025,54692],{"class":138},[128,58027,58028,58030,58032,58034,58036,58038,58040,58042,58044],{"class":130,"line":188},[128,58029,55526],{"class":138},[128,58031,54729],{"class":54685},[128,58033,18442],{"class":199},[128,58035,270],{"class":138},[128,58037,54776],{"class":176},[128,58039,54756],{"class":199},[128,58041,270],{"class":138},[128,58043,54783],{"class":176},[128,58045,54692],{"class":138},[128,58047,58048,58050,58052,58054,58056],{"class":130,"line":193},[128,58049,55526],{"class":138},[128,58051,2752],{"class":54685},[128,58053,54794],{"class":138},[128,58055,2752],{"class":54685},[128,58057,54692],{"class":138},[128,58059,58060,58062,58064],{"class":130,"line":206},[128,58061,55526],{"class":138},[128,58063,3659],{"class":54685},[128,58065,54692],{"class":138},[128,58067,58068,58070],{"class":130,"line":221},[128,58069,9960],{"class":54685},[128,58071,1959],{"class":138},[128,58073,58074,58077,58079,58081],{"class":130,"line":230},[128,58075,58076],{"class":166},"      padding",[128,58078,1967],{"class":138},[128,58080,2452],{"class":166},[128,58082,4905],{"class":138},[128,58084,58085,58088,58090,58092],{"class":130,"line":235},[128,58086,58087],{"class":166},"      margin",[128,58089,1967],{"class":138},[128,58091,2452],{"class":166},[128,58093,4905],{"class":138},[128,58095,58096],{"class":130,"line":244},[128,58097,5773],{"class":138},[128,58099,58100],{"class":130,"line":287},[128,58101,160],{"emptyLinePlaceholder":159},[128,58103,58104,58107],{"class":130,"line":301},[128,58105,58106],{"class":54685},"    li",[128,58108,1959],{"class":138},[128,58110,58111,58114,58116,58119],{"class":130,"line":310},[128,58112,58113],{"class":166},"      list-style",[128,58115,1967],{"class":138},[128,58117,58118],{"class":166},"none",[128,58120,4905],{"class":138},[128,58122,58123],{"class":130,"line":323},[128,58124,5773],{"class":138},[128,58126,58127],{"class":130,"line":330},[128,58128,160],{"emptyLinePlaceholder":159},[128,58130,58131,58134],{"class":130,"line":335},[128,58132,58133],{"class":199},"    .box",[128,58135,1959],{"class":138},[128,58137,58138,58141,58143,58146],{"class":130,"line":340},[128,58139,58140],{"class":166},"      position",[128,58142,1967],{"class":138},[128,58144,58145],{"class":166},"relative",[128,58147,4905],{"class":138},[128,58149,58150,58153,58155,58158,58160],{"class":130,"line":351},[128,58151,58152],{"class":166},"      width",[128,58154,1967],{"class":138},[128,58156,58157],{"class":166},"976",[128,58159,54875],{"class":134},[128,58161,4905],{"class":138},[128,58163,58164,58167,58169,58171,58173],{"class":130,"line":384},[128,58165,58166],{"class":166},"      height",[128,58168,1967],{"class":138},[128,58170,5150],{"class":166},[128,58172,54875],{"class":134},[128,58174,4905],{"class":138},[128,58176,58177,58179,58181,58183,58185,58187],{"class":130,"line":414},[128,58178,58087],{"class":166},[128,58180,1967],{"class":138},[128,58182,4061],{"class":166},[128,58184,54875],{"class":134},[128,58186,54939],{"class":166},[128,58188,4905],{"class":138},[128,58190,58191],{"class":130,"line":419},[128,58192,5773],{"class":138},[128,58194,58195],{"class":130,"line":424},[128,58196,160],{"emptyLinePlaceholder":159},[128,58198,58199,58202],{"class":130,"line":434},[128,58200,58201],{"class":199},"    .slider-footer",[128,58203,1959],{"class":138},[128,58205,58206,58208,58210,58213],{"class":130,"line":447},[128,58207,58140],{"class":166},[128,58209,1967],{"class":138},[128,58211,58212],{"class":166},"absolute",[128,58214,4905],{"class":138},[128,58216,58217,58220,58222,58224],{"class":130,"line":459},[128,58218,58219],{"class":166},"      left",[128,58221,1967],{"class":138},[128,58223,2452],{"class":166},[128,58225,4905],{"class":138},[128,58227,58228,58231,58233,58235],{"class":130,"line":471},[128,58229,58230],{"class":166},"      bottom",[128,58232,1967],{"class":138},[128,58234,2452],{"class":166},[128,58236,4905],{"class":138},[128,58238,58239,58241,58243,58245,58247],{"class":130,"line":483},[128,58240,58152],{"class":166},[128,58242,1967],{"class":138},[128,58244,4061],{"class":166},[128,58246,4078],{"class":134},[128,58248,4905],{"class":138},[128,58250,58251,58253,58255,58257,58259],{"class":130,"line":495},[128,58252,58166],{"class":166},[128,58254,1967],{"class":138},[128,58256,4324],{"class":166},[128,58258,4078],{"class":134},[128,58260,4905],{"class":138},[128,58262,58263,58266,58268,58271],{"class":130,"line":507},[128,58264,58265],{"class":166},"      background-color",[128,58267,1967],{"class":138},[128,58269,58270],{"class":166},"skyblue",[128,58272,4905],{"class":138},[128,58274,58275],{"class":130,"line":519},[128,58276,5773],{"class":138},[128,58278,58279],{"class":130,"line":524},[128,58280,160],{"emptyLinePlaceholder":159},[128,58282,58283,58285,58287],{"class":130,"line":529},[128,58284,58201],{"class":199},[128,58286,10382],{"class":54685},[128,58288,1959],{"class":138},[128,58290,58291,58293,58295,58297],{"class":130,"line":540},[128,58292,58140],{"class":166},[128,58294,1967],{"class":138},[128,58296,58212],{"class":166},[128,58298,4905],{"class":138},[128,58300,58301,58304,58306,58308,58310],{"class":130,"line":555},[128,58302,58303],{"class":166},"      font-size",[128,58305,1967],{"class":138},[128,58307,4648],{"class":166},[128,58309,54875],{"class":134},[128,58311,4905],{"class":138},[128,58313,58314,58316,58318,58320,58322],{"class":130,"line":576},[128,58315,58219],{"class":166},[128,58317,1967],{"class":138},[128,58319,4449],{"class":166},[128,58321,54875],{"class":134},[128,58323,4905],{"class":138},[128,58325,58326,58329,58331,58333,58335],{"class":130,"line":584},[128,58327,58328],{"class":166},"      top",[128,58330,1967],{"class":138},[128,58332,4069],{"class":166},[128,58334,54875],{"class":134},[128,58336,4905],{"class":138},[128,58338,58339],{"class":130,"line":593},[128,58340,5773],{"class":138},[128,58342,58343],{"class":130,"line":598},[128,58344,160],{"emptyLinePlaceholder":159},[128,58346,58347,58350],{"class":130,"line":603},[128,58348,58349],{"class":54685},"    ul",[128,58351,1959],{"class":138},[128,58353,58354,58356,58358,58360],{"class":130,"line":614},[128,58355,58140],{"class":166},[128,58357,1967],{"class":138},[128,58359,58212],{"class":166},[128,58361,4905],{"class":138},[128,58363,58364,58366,58368,58370,58372],{"class":130,"line":625},[128,58365,58328],{"class":166},[128,58367,1967],{"class":138},[128,58369,4530],{"class":166},[128,58371,54875],{"class":134},[128,58373,4905],{"class":138},[128,58375,58376,58378,58380,58382,58384],{"class":130,"line":633},[128,58377,58219],{"class":166},[128,58379,1967],{"class":138},[128,58381,4449],{"class":166},[128,58383,54875],{"class":134},[128,58385,4905],{"class":138},[128,58387,58388,58391,58393,58395],{"class":130,"line":649},[128,58389,58390],{"class":166},"      display",[128,58392,1967],{"class":138},[128,58394,54860],{"class":166},[128,58396,4905],{"class":138},[128,58398,58399,58402,58404,58406],{"class":130,"line":660},[128,58400,58401],{"class":166},"      justify-content",[128,58403,1967],{"class":138},[128,58405,55051],{"class":166},[128,58407,4905],{"class":138},[128,58409,58410,58412,58414,58416],{"class":130,"line":673},[128,58411,58140],{"class":166},[128,58413,1967],{"class":138},[128,58415,58212],{"class":166},[128,58417,4905],{"class":138},[128,58419,58420,58422,58424,58426,58428],{"class":130,"line":678},[128,58421,58152],{"class":166},[128,58423,1967],{"class":138},[128,58425,7559],{"class":166},[128,58427,54875],{"class":134},[128,58429,4905],{"class":138},[128,58431,58432,58434,58436,58438,58440],{"class":130,"line":683},[128,58433,58166],{"class":166},[128,58435,1967],{"class":138},[128,58437,4449],{"class":166},[128,58439,54875],{"class":134},[128,58441,4905],{"class":138},[128,58443,58444],{"class":130,"line":693},[128,58445,5773],{"class":138},[128,58447,58448],{"class":130,"line":702},[128,58449,160],{"emptyLinePlaceholder":159},[128,58451,58452,58454,58457],{"class":130,"line":709},[128,58453,58349],{"class":54685},[128,58455,58456],{"class":54685}," li",[128,58458,1959],{"class":138},[128,58460,58461,58463,58465,58467,58469],{"class":130,"line":723},[128,58462,58152],{"class":166},[128,58464,1967],{"class":138},[128,58466,4449],{"class":166},[128,58468,54875],{"class":134},[128,58470,4905],{"class":138},[128,58472,58473,58475,58477,58479,58481],{"class":130,"line":732},[128,58474,58166],{"class":166},[128,58476,1967],{"class":138},[128,58478,4449],{"class":166},[128,58480,54875],{"class":134},[128,58482,4905],{"class":138},[128,58484,58485,58487,58489,58492,58494,58496,58498,58500,58502,58504,58506,58509],{"class":130,"line":744},[128,58486,58265],{"class":166},[128,58488,1967],{"class":138},[128,58490,58491],{"class":166},"rgba",[128,58493,253],{"class":138},[128,58495,2452],{"class":166},[128,58497,258],{"class":138},[128,58499,2452],{"class":166},[128,58501,258],{"class":138},[128,58503,2452],{"class":166},[128,58505,258],{"class":138},[128,58507,58508],{"class":166},".4",[128,58510,6292],{"class":138},[128,58512,58513,58516,58518,58520,58522],{"class":130,"line":749},[128,58514,58515],{"class":166},"      border-radius",[128,58517,1967],{"class":138},[128,58519,4196],{"class":166},[128,58521,54875],{"class":134},[128,58523,4905],{"class":138},[128,58525,58526],{"class":130,"line":754},[128,58527,5773],{"class":138},[128,58529,58530],{"class":130,"line":764},[128,58531,160],{"emptyLinePlaceholder":159},[128,58533,58534,58537],{"class":130,"line":782},[128,58535,58536],{"class":199},"    .activate",[128,58538,1959],{"class":138},[128,58540,58541,58543,58545,58548],{"class":130,"line":787},[128,58542,58265],{"class":166},[128,58544,1967],{"class":138},[128,58546,58547],{"class":166},"#f7f7f7",[128,58549,4905],{"class":138},[128,58551,58552],{"class":130,"line":795},[128,58553,5773],{"class":138},[128,58555,58556,58558,58560],{"class":130,"line":807},[128,58557,55799],{"class":138},[128,58559,3659],{"class":54685},[128,58561,54692],{"class":138},[128,58563,58564,58566,58568],{"class":130,"line":813},[128,58565,55168],{"class":138},[128,58567,54719],{"class":54685},[128,58569,54692],{"class":138},[128,58571,58572],{"class":130,"line":818},[128,58573,160],{"emptyLinePlaceholder":159},[128,58575,58576,58578,58580],{"class":130,"line":835},[128,58577,4657],{"class":138},[128,58579,55183],{"class":54685},[128,58581,54692],{"class":138},[128,58583,58584,58586,58588,58590,58592,58594],{"class":130,"line":851},[128,58585,55526],{"class":138},[128,58587,54994],{"class":54685},[128,58589,56868],{"class":199},[128,58591,270],{"class":138},[128,58593,56873],{"class":176},[128,58595,54692],{"class":138},[128,58597,58598,58600,58602,58604,58606,58609],{"class":130,"line":867},[128,58599,54726],{"class":138},[128,58601,54994],{"class":54685},[128,58603,56868],{"class":199},[128,58605,270],{"class":138},[128,58607,58608],{"class":176},"\"slider-wrapper\"",[128,58610,54692],{"class":138},[128,58612,58613,58616,58618,58621,58623,58626,58629,58631,58633],{"class":130,"line":872},[128,58614,58615],{"class":138},"      \u003C",[128,58617,5074],{"class":54685},[128,58619,58620],{"class":199}," src",[128,58622,270],{"class":138},[128,58624,58625],{"class":176},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[128,58627,58628],{"class":199}," alt",[128,58630,270],{"class":138},[128,58632,11209],{"class":176},[128,58634,54692],{"class":138},[128,58636,58637,58639,58641],{"class":130,"line":878},[128,58638,55159],{"class":138},[128,58640,54994],{"class":54685},[128,58642,54692],{"class":138},[128,58644,58645,58647,58649,58651,58653,58656],{"class":130,"line":887},[128,58646,54726],{"class":138},[128,58648,54994],{"class":54685},[128,58650,56868],{"class":199},[128,58652,270],{"class":138},[128,58654,58655],{"class":176},"\"slider-footer\"",[128,58657,54692],{"class":138},[128,58659,58660,58662,58664,58667,58669],{"class":130,"line":896},[128,58661,58615],{"class":138},[128,58663,19],{"class":54685},[128,58665,58666],{"class":138},">对人类来说会不会太超前了?\u003C\u002F",[128,58668,19],{"class":54685},[128,58670,54692],{"class":138},[128,58672,58673,58675,58677],{"class":130,"line":905},[128,58674,58615],{"class":138},[128,58676,4752],{"class":54685},[128,58678,54692],{"class":138},[128,58680,58681,58684,58686,58688,58690,58693,58696,58698],{"class":130,"line":914},[128,58682,58683],{"class":138},"        \u003C",[128,58685,29],{"class":54685},[128,58687,56868],{"class":199},[128,58689,270],{"class":138},[128,58691,58692],{"class":176},"\"activate\"",[128,58694,58695],{"class":138},">\u003C\u002F",[128,58697,29],{"class":54685},[128,58699,54692],{"class":138},[128,58701,58702,58704,58706,58708,58710],{"class":130,"line":920},[128,58703,58683],{"class":138},[128,58705,29],{"class":54685},[128,58707,58695],{"class":138},[128,58709,29],{"class":54685},[128,58711,54692],{"class":138},[128,58713,58714,58716,58718,58720,58722],{"class":130,"line":926},[128,58715,58683],{"class":138},[128,58717,29],{"class":54685},[128,58719,58695],{"class":138},[128,58721,29],{"class":54685},[128,58723,54692],{"class":138},[128,58725,58726,58728,58730,58732,58734],{"class":130,"line":938},[128,58727,58683],{"class":138},[128,58729,29],{"class":54685},[128,58731,58695],{"class":138},[128,58733,29],{"class":54685},[128,58735,54692],{"class":138},[128,58737,58738,58740,58742,58744,58746],{"class":130,"line":943},[128,58739,58683],{"class":138},[128,58741,29],{"class":54685},[128,58743,58695],{"class":138},[128,58745,29],{"class":54685},[128,58747,54692],{"class":138},[128,58749,58750,58752,58754,58756,58758],{"class":130,"line":948},[128,58751,58683],{"class":138},[128,58753,29],{"class":54685},[128,58755,58695],{"class":138},[128,58757,29],{"class":54685},[128,58759,54692],{"class":138},[128,58761,58762,58764,58766,58768,58770],{"class":130,"line":958},[128,58763,58683],{"class":138},[128,58765,29],{"class":54685},[128,58767,58695],{"class":138},[128,58769,29],{"class":54685},[128,58771,54692],{"class":138},[128,58773,58774,58776,58778,58780,58782],{"class":130,"line":974},[128,58775,58683],{"class":138},[128,58777,29],{"class":54685},[128,58779,58695],{"class":138},[128,58781,29],{"class":54685},[128,58783,54692],{"class":138},[128,58785,58786,58789,58791],{"class":130,"line":985},[128,58787,58788],{"class":138},"      \u003C\u002F",[128,58790,4752],{"class":54685},[128,58792,54692],{"class":138},[128,58794,58795,58797,58799],{"class":130,"line":990},[128,58796,55159],{"class":138},[128,58798,54994],{"class":54685},[128,58800,54692],{"class":138},[128,58802,58803,58805,58807],{"class":130,"line":1005},[128,58804,55799],{"class":138},[128,58806,54994],{"class":54685},[128,58808,54692],{"class":138},[128,58810,58811,58813,58815],{"class":130,"line":1017},[128,58812,55526],{"class":138},[128,58814,55196],{"class":54685},[128,58816,54692],{"class":138},[128,58818,58819,58821,58824,58826],{"class":130,"line":1022},[128,58820,14748],{"class":134},[128,58822,58823],{"class":166}," arrImage",[128,58825,170],{"class":134},[128,58827,2246],{"class":138},[128,58829,58830,58833,58836,58839,58842,58845,58848],{"class":130,"line":1027},[128,58831,58832],{"class":138},"      { url: ",[128,58834,58835],{"class":176},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[128,58837,58838],{"class":138},", title: ",[128,58840,58841],{"class":176},"'对人类来说会不会太超前了?'",[128,58843,58844],{"class":138},", color: ",[128,58846,58847],{"class":176},"'rgba(100,67,68)'",[128,58849,58850],{"class":138}," },\n",[128,58852,58853,58855,58858,58860,58863,58865,58868],{"class":130,"line":1033},[128,58854,58832],{"class":138},[128,58856,58857],{"class":176},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[128,58859,58838],{"class":138},[128,58861,58862],{"class":176},"'开启剑与雪的黑暗传说!'",[128,58864,58844],{"class":138},[128,58866,58867],{"class":176},"'rgba(43,35,26)'",[128,58869,58850],{"class":138},[128,58871,58872,58874,58877,58879,58882,58884,58887],{"class":130,"line":1038},[128,58873,58832],{"class":138},[128,58875,58876],{"class":176},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[128,58878,58838],{"class":138},[128,58880,58881],{"class":176},"'真正的jo厨出现了!'",[128,58883,58844],{"class":138},[128,58885,58886],{"class":176},"'rgba(36,31,33)'",[128,58888,58850],{"class":138},[128,58890,58891,58893,58896,58898,58901,58903,58906],{"class":130,"line":1050},[128,58892,58832],{"class":138},[128,58894,58895],{"class":176},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[128,58897,58838],{"class":138},[128,58899,58900],{"class":176},"'李玉刚:让世界通过b站看到东方大国文化'",[128,58902,58844],{"class":138},[128,58904,58905],{"class":176},"'rgba(139,98,66)'",[128,58907,58850],{"class":138},[128,58909,58910,58912,58915,58917,58920,58922,58925],{"class":130,"line":1055},[128,58911,58832],{"class":138},[128,58913,58914],{"class":176},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[128,58916,58838],{"class":138},[128,58918,58919],{"class":176},"'快来分享你的寒假日常吧'",[128,58921,58844],{"class":138},[128,58923,58924],{"class":176},"'rgba(67,90,92)'",[128,58926,58850],{"class":138},[128,58928,58929,58931,58934,58936,58939,58941,58944],{"class":130,"line":1060},[128,58930,58832],{"class":138},[128,58932,58933],{"class":176},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[128,58935,58838],{"class":138},[128,58937,58938],{"class":176},"'哔哩哔哩小年YEAR'",[128,58940,58844],{"class":138},[128,58942,58943],{"class":176},"'rgba(166,131,143)'",[128,58945,58850],{"class":138},[128,58947,58948,58950,58953,58955,58958,58960,58963],{"class":130,"line":1070},[128,58949,58832],{"class":138},[128,58951,58952],{"class":176},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[128,58954,58838],{"class":138},[128,58956,58957],{"class":176},"'一站式解决你的电脑配置问题'",[128,58959,58844],{"class":138},[128,58961,58962],{"class":176},"'rgba(53,29,25)'",[128,58964,58850],{"class":138},[128,58966,58967,58969,58972,58974,58977,58979,58982],{"class":130,"line":1086},[128,58968,58832],{"class":138},[128,58970,58971],{"class":176},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[128,58973,58838],{"class":138},[128,58975,58976],{"class":176},"'谁不想和小猫咪贴贴呢?'",[128,58978,58844],{"class":138},[128,58980,58981],{"class":176},"'rgba(99,72,114)'",[128,58983,58984],{"class":138}," }\n",[128,58986,58987],{"class":130,"line":1095},[128,58988,56491],{"class":138},[128,58990,58991,58993,58996,58998,59000,59002,59004,59007],{"class":130,"line":1100},[128,58992,14748],{"class":134},[128,58994,58995],{"class":166}," img",[128,58997,170],{"class":134},[128,58999,57777],{"class":138},[128,59001,57780],{"class":199},[128,59003,253],{"class":138},[128,59005,59006],{"class":176},"'.slider-wrapper img'",[128,59008,180],{"class":138},[128,59010,59011,59013,59015,59017,59019,59021,59023,59026],{"class":130,"line":1113},[128,59012,14748],{"class":134},[128,59014,10382],{"class":166},[128,59016,170],{"class":134},[128,59018,57777],{"class":138},[128,59020,57780],{"class":199},[128,59022,253],{"class":138},[128,59024,59025],{"class":176},"'.slider-footer p'",[128,59027,180],{"class":138},[128,59029,59030,59032,59035,59037,59039,59041,59043,59046],{"class":130,"line":1124},[128,59031,14748],{"class":134},[128,59033,59034],{"class":166}," color",[128,59036,170],{"class":134},[128,59038,57777],{"class":138},[128,59040,57780],{"class":199},[128,59042,253],{"class":138},[128,59044,59045],{"class":176},"'.slider-footer'",[128,59047,180],{"class":138},[128,59049,59050,59052,59055,59057,59059,59062,59064,59067],{"class":130,"line":1129},[128,59051,14748],{"class":134},[128,59053,59054],{"class":166}," lis",[128,59056,170],{"class":134},[128,59058,57777],{"class":138},[128,59060,59061],{"class":199},"querySelectorAll",[128,59063,253],{"class":138},[128,59065,59066],{"class":176},"'.slider-footer ul li'",[128,59068,180],{"class":138},[128,59070,59071,59073,59075,59077],{"class":130,"line":1134},[128,59072,55601],{"class":134},[128,59074,12984],{"class":138},[128,59076,270],{"class":134},[128,59078,59079],{"class":166}," 1\n",[128,59081,59082,59084,59087,59089,59091,59093,59095],{"class":130,"line":1150},[128,59083,55601],{"class":134},[128,59085,59086],{"class":138}," timer ",[128,59088,270],{"class":134},[128,59090,57825],{"class":199},[128,59092,253],{"class":138},[128,59094,57830],{"class":134},[128,59096,57833],{"class":138},[128,59098,59099,59102,59104],{"class":130,"line":1164},[128,59100,59101],{"class":138},"      img.src ",[128,59103,270],{"class":134},[128,59105,59106],{"class":138}," arrImage[i].url\n",[128,59108,59109,59112,59114],{"class":130,"line":1178},[128,59110,59111],{"class":138},"      p.innerHTML ",[128,59113,270],{"class":134},[128,59115,59116],{"class":138}," arrImage[i].title\n",[128,59118,59119,59122,59124],{"class":130,"line":1183},[128,59120,59121],{"class":138},"      color.style.backgroundColor ",[128,59123,270],{"class":134},[128,59125,59126],{"class":138}," arrImage[i].color\n",[128,59128,59129],{"class":130,"line":1199},[128,59130,59131],{"class":3814},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[128,59133,59134],{"class":130,"line":1214},[128,59135,59136],{"class":3814},"      \u002F\u002F li.classList.add('activate')\n",[128,59138,59139],{"class":130,"line":1229},[128,59140,59141],{"class":3814},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[128,59143,59144],{"class":130,"line":1234},[128,59145,59146],{"class":3814},"      \u002F\u002F lis[i].classList.remove('activate')\n",[128,59148,59149,59152,59154,59156,59159,59162,59165,59167,59170],{"class":130,"line":1239},[128,59150,59151],{"class":138},"      document.",[128,59153,57780],{"class":199},[128,59155,253],{"class":138},[128,59157,59158],{"class":176},"'.activate'",[128,59160,59161],{"class":138},")?.classList.",[128,59163,59164],{"class":199},"toggle",[128,59166,253],{"class":138},[128,59168,59169],{"class":176},"'activate'",[128,59171,180],{"class":138},[128,59173,59174,59177,59179,59181,59183],{"class":130,"line":1251},[128,59175,59176],{"class":138},"      lis[i].classList.",[128,59178,8892],{"class":199},[128,59180,253],{"class":138},[128,59182,59169],{"class":176},[128,59184,180],{"class":138},[128,59186,59187],{"class":130,"line":1256},[128,59188,160],{"emptyLinePlaceholder":159},[128,59190,59191,59194,59196,59198,59200,59202,59204,59206,59209],{"class":130,"line":1261},[128,59192,59193],{"class":138},"      i ",[128,59195,270],{"class":134},[128,59197,57864],{"class":138},[128,59199,2457],{"class":134},[128,59201,28605],{"class":166},[128,59203,276],{"class":138},[128,59205,4078],{"class":134},[128,59207,59208],{"class":138}," arrImage.",[128,59210,59211],{"class":166},"length\n",[128,59213,59214],{"class":130,"line":1271},[128,59215,160],{"emptyLinePlaceholder":159},[128,59217,59218,59220,59222],{"class":130,"line":1287},[128,59219,57916],{"class":138},[128,59221,9967],{"class":166},[128,59223,180],{"class":138},[128,59225,59226,59228,59230],{"class":130,"line":1296},[128,59227,55799],{"class":138},[128,59229,55196],{"class":54685},[128,59231,54692],{"class":138},[128,59233,59234,59236,59238],{"class":130,"line":1301},[128,59235,55168],{"class":138},[128,59237,55183],{"class":54685},[128,59239,54692],{"class":138},[128,59241,59242],{"class":130,"line":1314},[128,59243,160],{"emptyLinePlaceholder":159},[128,59245,59246,59248,59250],{"class":130,"line":1325},[128,59247,55168],{"class":138},[128,59249,54020],{"class":54685},[128,59251,54692],{"class":138},[19,59253,59254],{},[5074,59255],{"alt":112,"src":59256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,59258,59259],{},"?.就是短路保护,确保输出正常进行",[19,59261,59262],{},"不要忘记取余%,有时候可以用",[19,59264,59265],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[26,59267,59268],{"start":142},[29,59269,59270],{},"法2",[106,59272,59274],{"className":54018,"code":59273,"language":54020,"meta":112,"style":112},"\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",[114,59275,59276,59286,59300,59304,59312,59326,59346,59358,59366,59372,59382,59392,59396,59400,59406,59416,59420,59424,59430,59440,59452,59464,59478,59482,59486,59492,59502,59512,59522,59534,59546,59556,59560,59564,59572,59582,59594,59606,59618,59622,59626,59632,59642,59654,59666,59676,59686,59696,59708,59720,59724,59728,59736,59748,59760,59786,59798,59802,59806,59812,59822,59826,59834,59842,59846,59854,59868,59882,59902,59910,59924,59936,59944,59962,59974,59986,59998,60010,60022,60034,60046,60054,60062,60070,60078,60089,60105,60121,60137,60153,60169,60185,60201,60217,60221,60226,60244,60262,60272,60277,60282,60293,60299,60314,60323,60327,60332,60341,60346,60355,60360,60365,60370,60393,60423,60427,60435,60439,60447,60455,60459],{"__ignoreMap":112},[128,59277,59278,59280,59282,59284],{"class":130,"line":131},[128,59279,54682],{"class":138},[128,59281,54686],{"class":54685},[128,59283,54689],{"class":199},[128,59285,54692],{"class":138},[128,59287,59288,59290,59292,59294,59296,59298],{"class":130,"line":142},[128,59289,4657],{"class":138},[128,59291,54020],{"class":54685},[128,59293,54701],{"class":199},[128,59295,270],{"class":138},[128,59297,54706],{"class":176},[128,59299,54692],{"class":138},[128,59301,59302],{"class":130,"line":156},[128,59303,160],{"emptyLinePlaceholder":159},[128,59305,59306,59308,59310],{"class":130,"line":163},[128,59307,4657],{"class":138},[128,59309,54719],{"class":54685},[128,59311,54692],{"class":138},[128,59313,59314,59316,59318,59320,59322,59324],{"class":130,"line":183},[128,59315,55526],{"class":138},[128,59317,54729],{"class":54685},[128,59319,54732],{"class":199},[128,59321,270],{"class":138},[128,59323,54737],{"class":176},[128,59325,54692],{"class":138},[128,59327,59328,59330,59332,59334,59336,59338,59340,59342,59344],{"class":130,"line":188},[128,59329,55526],{"class":138},[128,59331,54729],{"class":54685},[128,59333,18442],{"class":199},[128,59335,270],{"class":138},[128,59337,54776],{"class":176},[128,59339,54756],{"class":199},[128,59341,270],{"class":138},[128,59343,54783],{"class":176},[128,59345,54692],{"class":138},[128,59347,59348,59350,59352,59354,59356],{"class":130,"line":193},[128,59349,55526],{"class":138},[128,59351,2752],{"class":54685},[128,59353,54794],{"class":138},[128,59355,2752],{"class":54685},[128,59357,54692],{"class":138},[128,59359,59360,59362,59364],{"class":130,"line":206},[128,59361,55526],{"class":138},[128,59363,3659],{"class":54685},[128,59365,54692],{"class":138},[128,59367,59368,59370],{"class":130,"line":221},[128,59369,9960],{"class":54685},[128,59371,1959],{"class":138},[128,59373,59374,59376,59378,59380],{"class":130,"line":230},[128,59375,58076],{"class":166},[128,59377,1967],{"class":138},[128,59379,2452],{"class":166},[128,59381,4905],{"class":138},[128,59383,59384,59386,59388,59390],{"class":130,"line":235},[128,59385,58087],{"class":166},[128,59387,1967],{"class":138},[128,59389,2452],{"class":166},[128,59391,4905],{"class":138},[128,59393,59394],{"class":130,"line":244},[128,59395,5773],{"class":138},[128,59397,59398],{"class":130,"line":287},[128,59399,160],{"emptyLinePlaceholder":159},[128,59401,59402,59404],{"class":130,"line":301},[128,59403,58106],{"class":54685},[128,59405,1959],{"class":138},[128,59407,59408,59410,59412,59414],{"class":130,"line":310},[128,59409,58113],{"class":166},[128,59411,1967],{"class":138},[128,59413,58118],{"class":166},[128,59415,4905],{"class":138},[128,59417,59418],{"class":130,"line":323},[128,59419,5773],{"class":138},[128,59421,59422],{"class":130,"line":330},[128,59423,160],{"emptyLinePlaceholder":159},[128,59425,59426,59428],{"class":130,"line":335},[128,59427,58133],{"class":199},[128,59429,1959],{"class":138},[128,59431,59432,59434,59436,59438],{"class":130,"line":340},[128,59433,58140],{"class":166},[128,59435,1967],{"class":138},[128,59437,58145],{"class":166},[128,59439,4905],{"class":138},[128,59441,59442,59444,59446,59448,59450],{"class":130,"line":351},[128,59443,58152],{"class":166},[128,59445,1967],{"class":138},[128,59447,58157],{"class":166},[128,59449,54875],{"class":134},[128,59451,4905],{"class":138},[128,59453,59454,59456,59458,59460,59462],{"class":130,"line":384},[128,59455,58166],{"class":166},[128,59457,1967],{"class":138},[128,59459,5150],{"class":166},[128,59461,54875],{"class":134},[128,59463,4905],{"class":138},[128,59465,59466,59468,59470,59472,59474,59476],{"class":130,"line":414},[128,59467,58087],{"class":166},[128,59469,1967],{"class":138},[128,59471,4061],{"class":166},[128,59473,54875],{"class":134},[128,59475,54939],{"class":166},[128,59477,4905],{"class":138},[128,59479,59480],{"class":130,"line":419},[128,59481,5773],{"class":138},[128,59483,59484],{"class":130,"line":424},[128,59485,160],{"emptyLinePlaceholder":159},[128,59487,59488,59490],{"class":130,"line":434},[128,59489,58201],{"class":199},[128,59491,1959],{"class":138},[128,59493,59494,59496,59498,59500],{"class":130,"line":447},[128,59495,58140],{"class":166},[128,59497,1967],{"class":138},[128,59499,58212],{"class":166},[128,59501,4905],{"class":138},[128,59503,59504,59506,59508,59510],{"class":130,"line":459},[128,59505,58219],{"class":166},[128,59507,1967],{"class":138},[128,59509,2452],{"class":166},[128,59511,4905],{"class":138},[128,59513,59514,59516,59518,59520],{"class":130,"line":471},[128,59515,58230],{"class":166},[128,59517,1967],{"class":138},[128,59519,2452],{"class":166},[128,59521,4905],{"class":138},[128,59523,59524,59526,59528,59530,59532],{"class":130,"line":483},[128,59525,58152],{"class":166},[128,59527,1967],{"class":138},[128,59529,4061],{"class":166},[128,59531,4078],{"class":134},[128,59533,4905],{"class":138},[128,59535,59536,59538,59540,59542,59544],{"class":130,"line":495},[128,59537,58166],{"class":166},[128,59539,1967],{"class":138},[128,59541,4324],{"class":166},[128,59543,4078],{"class":134},[128,59545,4905],{"class":138},[128,59547,59548,59550,59552,59554],{"class":130,"line":507},[128,59549,58265],{"class":166},[128,59551,1967],{"class":138},[128,59553,58270],{"class":166},[128,59555,4905],{"class":138},[128,59557,59558],{"class":130,"line":519},[128,59559,5773],{"class":138},[128,59561,59562],{"class":130,"line":524},[128,59563,160],{"emptyLinePlaceholder":159},[128,59565,59566,59568,59570],{"class":130,"line":529},[128,59567,58201],{"class":199},[128,59569,10382],{"class":54685},[128,59571,1959],{"class":138},[128,59573,59574,59576,59578,59580],{"class":130,"line":540},[128,59575,58140],{"class":166},[128,59577,1967],{"class":138},[128,59579,58212],{"class":166},[128,59581,4905],{"class":138},[128,59583,59584,59586,59588,59590,59592],{"class":130,"line":555},[128,59585,58303],{"class":166},[128,59587,1967],{"class":138},[128,59589,4648],{"class":166},[128,59591,54875],{"class":134},[128,59593,4905],{"class":138},[128,59595,59596,59598,59600,59602,59604],{"class":130,"line":576},[128,59597,58219],{"class":166},[128,59599,1967],{"class":138},[128,59601,4449],{"class":166},[128,59603,54875],{"class":134},[128,59605,4905],{"class":138},[128,59607,59608,59610,59612,59614,59616],{"class":130,"line":584},[128,59609,58328],{"class":166},[128,59611,1967],{"class":138},[128,59613,4069],{"class":166},[128,59615,54875],{"class":134},[128,59617,4905],{"class":138},[128,59619,59620],{"class":130,"line":593},[128,59621,5773],{"class":138},[128,59623,59624],{"class":130,"line":598},[128,59625,160],{"emptyLinePlaceholder":159},[128,59627,59628,59630],{"class":130,"line":603},[128,59629,58349],{"class":54685},[128,59631,1959],{"class":138},[128,59633,59634,59636,59638,59640],{"class":130,"line":614},[128,59635,58140],{"class":166},[128,59637,1967],{"class":138},[128,59639,58212],{"class":166},[128,59641,4905],{"class":138},[128,59643,59644,59646,59648,59650,59652],{"class":130,"line":625},[128,59645,58328],{"class":166},[128,59647,1967],{"class":138},[128,59649,4530],{"class":166},[128,59651,54875],{"class":134},[128,59653,4905],{"class":138},[128,59655,59656,59658,59660,59662,59664],{"class":130,"line":633},[128,59657,58219],{"class":166},[128,59659,1967],{"class":138},[128,59661,4449],{"class":166},[128,59663,54875],{"class":134},[128,59665,4905],{"class":138},[128,59667,59668,59670,59672,59674],{"class":130,"line":649},[128,59669,58390],{"class":166},[128,59671,1967],{"class":138},[128,59673,54860],{"class":166},[128,59675,4905],{"class":138},[128,59677,59678,59680,59682,59684],{"class":130,"line":660},[128,59679,58401],{"class":166},[128,59681,1967],{"class":138},[128,59683,55051],{"class":166},[128,59685,4905],{"class":138},[128,59687,59688,59690,59692,59694],{"class":130,"line":673},[128,59689,58140],{"class":166},[128,59691,1967],{"class":138},[128,59693,58212],{"class":166},[128,59695,4905],{"class":138},[128,59697,59698,59700,59702,59704,59706],{"class":130,"line":678},[128,59699,58152],{"class":166},[128,59701,1967],{"class":138},[128,59703,7559],{"class":166},[128,59705,54875],{"class":134},[128,59707,4905],{"class":138},[128,59709,59710,59712,59714,59716,59718],{"class":130,"line":683},[128,59711,58166],{"class":166},[128,59713,1967],{"class":138},[128,59715,4449],{"class":166},[128,59717,54875],{"class":134},[128,59719,4905],{"class":138},[128,59721,59722],{"class":130,"line":693},[128,59723,5773],{"class":138},[128,59725,59726],{"class":130,"line":702},[128,59727,160],{"emptyLinePlaceholder":159},[128,59729,59730,59732,59734],{"class":130,"line":709},[128,59731,58349],{"class":54685},[128,59733,58456],{"class":54685},[128,59735,1959],{"class":138},[128,59737,59738,59740,59742,59744,59746],{"class":130,"line":723},[128,59739,58152],{"class":166},[128,59741,1967],{"class":138},[128,59743,4449],{"class":166},[128,59745,54875],{"class":134},[128,59747,4905],{"class":138},[128,59749,59750,59752,59754,59756,59758],{"class":130,"line":732},[128,59751,58166],{"class":166},[128,59753,1967],{"class":138},[128,59755,4449],{"class":166},[128,59757,54875],{"class":134},[128,59759,4905],{"class":138},[128,59761,59762,59764,59766,59768,59770,59772,59774,59776,59778,59780,59782,59784],{"class":130,"line":744},[128,59763,58265],{"class":166},[128,59765,1967],{"class":138},[128,59767,58491],{"class":166},[128,59769,253],{"class":138},[128,59771,2452],{"class":166},[128,59773,258],{"class":138},[128,59775,2452],{"class":166},[128,59777,258],{"class":138},[128,59779,2452],{"class":166},[128,59781,258],{"class":138},[128,59783,58508],{"class":166},[128,59785,6292],{"class":138},[128,59787,59788,59790,59792,59794,59796],{"class":130,"line":749},[128,59789,58515],{"class":166},[128,59791,1967],{"class":138},[128,59793,4196],{"class":166},[128,59795,54875],{"class":134},[128,59797,4905],{"class":138},[128,59799,59800],{"class":130,"line":754},[128,59801,5773],{"class":138},[128,59803,59804],{"class":130,"line":764},[128,59805,160],{"emptyLinePlaceholder":159},[128,59807,59808,59810],{"class":130,"line":782},[128,59809,58536],{"class":199},[128,59811,1959],{"class":138},[128,59813,59814,59816,59818,59820],{"class":130,"line":787},[128,59815,58265],{"class":166},[128,59817,1967],{"class":138},[128,59819,58547],{"class":166},[128,59821,4905],{"class":138},[128,59823,59824],{"class":130,"line":795},[128,59825,5773],{"class":138},[128,59827,59828,59830,59832],{"class":130,"line":807},[128,59829,55799],{"class":138},[128,59831,3659],{"class":54685},[128,59833,54692],{"class":138},[128,59835,59836,59838,59840],{"class":130,"line":813},[128,59837,55168],{"class":138},[128,59839,54719],{"class":54685},[128,59841,54692],{"class":138},[128,59843,59844],{"class":130,"line":818},[128,59845,160],{"emptyLinePlaceholder":159},[128,59847,59848,59850,59852],{"class":130,"line":835},[128,59849,4657],{"class":138},[128,59851,55183],{"class":54685},[128,59853,54692],{"class":138},[128,59855,59856,59858,59860,59862,59864,59866],{"class":130,"line":851},[128,59857,55526],{"class":138},[128,59859,54994],{"class":54685},[128,59861,56868],{"class":199},[128,59863,270],{"class":138},[128,59865,56873],{"class":176},[128,59867,54692],{"class":138},[128,59869,59870,59872,59874,59876,59878,59880],{"class":130,"line":867},[128,59871,54726],{"class":138},[128,59873,54994],{"class":54685},[128,59875,56868],{"class":199},[128,59877,270],{"class":138},[128,59879,58608],{"class":176},[128,59881,54692],{"class":138},[128,59883,59884,59886,59888,59890,59892,59894,59896,59898,59900],{"class":130,"line":872},[128,59885,58615],{"class":138},[128,59887,5074],{"class":54685},[128,59889,58620],{"class":199},[128,59891,270],{"class":138},[128,59893,58625],{"class":176},[128,59895,58628],{"class":199},[128,59897,270],{"class":138},[128,59899,11209],{"class":176},[128,59901,54692],{"class":138},[128,59903,59904,59906,59908],{"class":130,"line":878},[128,59905,55159],{"class":138},[128,59907,54994],{"class":54685},[128,59909,54692],{"class":138},[128,59911,59912,59914,59916,59918,59920,59922],{"class":130,"line":887},[128,59913,54726],{"class":138},[128,59915,54994],{"class":54685},[128,59917,56868],{"class":199},[128,59919,270],{"class":138},[128,59921,58655],{"class":176},[128,59923,54692],{"class":138},[128,59925,59926,59928,59930,59932,59934],{"class":130,"line":896},[128,59927,58615],{"class":138},[128,59929,19],{"class":54685},[128,59931,58666],{"class":138},[128,59933,19],{"class":54685},[128,59935,54692],{"class":138},[128,59937,59938,59940,59942],{"class":130,"line":905},[128,59939,58615],{"class":138},[128,59941,4752],{"class":54685},[128,59943,54692],{"class":138},[128,59945,59946,59948,59950,59952,59954,59956,59958,59960],{"class":130,"line":914},[128,59947,58683],{"class":138},[128,59949,29],{"class":54685},[128,59951,56868],{"class":199},[128,59953,270],{"class":138},[128,59955,58692],{"class":176},[128,59957,58695],{"class":138},[128,59959,29],{"class":54685},[128,59961,54692],{"class":138},[128,59963,59964,59966,59968,59970,59972],{"class":130,"line":920},[128,59965,58683],{"class":138},[128,59967,29],{"class":54685},[128,59969,58695],{"class":138},[128,59971,29],{"class":54685},[128,59973,54692],{"class":138},[128,59975,59976,59978,59980,59982,59984],{"class":130,"line":926},[128,59977,58683],{"class":138},[128,59979,29],{"class":54685},[128,59981,58695],{"class":138},[128,59983,29],{"class":54685},[128,59985,54692],{"class":138},[128,59987,59988,59990,59992,59994,59996],{"class":130,"line":938},[128,59989,58683],{"class":138},[128,59991,29],{"class":54685},[128,59993,58695],{"class":138},[128,59995,29],{"class":54685},[128,59997,54692],{"class":138},[128,59999,60000,60002,60004,60006,60008],{"class":130,"line":943},[128,60001,58683],{"class":138},[128,60003,29],{"class":54685},[128,60005,58695],{"class":138},[128,60007,29],{"class":54685},[128,60009,54692],{"class":138},[128,60011,60012,60014,60016,60018,60020],{"class":130,"line":948},[128,60013,58683],{"class":138},[128,60015,29],{"class":54685},[128,60017,58695],{"class":138},[128,60019,29],{"class":54685},[128,60021,54692],{"class":138},[128,60023,60024,60026,60028,60030,60032],{"class":130,"line":958},[128,60025,58683],{"class":138},[128,60027,29],{"class":54685},[128,60029,58695],{"class":138},[128,60031,29],{"class":54685},[128,60033,54692],{"class":138},[128,60035,60036,60038,60040,60042,60044],{"class":130,"line":974},[128,60037,58683],{"class":138},[128,60039,29],{"class":54685},[128,60041,58695],{"class":138},[128,60043,29],{"class":54685},[128,60045,54692],{"class":138},[128,60047,60048,60050,60052],{"class":130,"line":985},[128,60049,58788],{"class":138},[128,60051,4752],{"class":54685},[128,60053,54692],{"class":138},[128,60055,60056,60058,60060],{"class":130,"line":990},[128,60057,55159],{"class":138},[128,60059,54994],{"class":54685},[128,60061,54692],{"class":138},[128,60063,60064,60066,60068],{"class":130,"line":1005},[128,60065,55799],{"class":138},[128,60067,54994],{"class":54685},[128,60069,54692],{"class":138},[128,60071,60072,60074,60076],{"class":130,"line":1017},[128,60073,55526],{"class":138},[128,60075,55196],{"class":54685},[128,60077,54692],{"class":138},[128,60079,60080,60082,60085,60087],{"class":130,"line":1022},[128,60081,14748],{"class":134},[128,60083,60084],{"class":166}," sliderData",[128,60086,170],{"class":134},[128,60088,2246],{"class":138},[128,60090,60091,60093,60095,60097,60099,60101,60103],{"class":130,"line":1027},[128,60092,58832],{"class":138},[128,60094,58835],{"class":176},[128,60096,58838],{"class":138},[128,60098,58841],{"class":176},[128,60100,58844],{"class":138},[128,60102,58847],{"class":176},[128,60104,58850],{"class":138},[128,60106,60107,60109,60111,60113,60115,60117,60119],{"class":130,"line":1033},[128,60108,58832],{"class":138},[128,60110,58857],{"class":176},[128,60112,58838],{"class":138},[128,60114,58862],{"class":176},[128,60116,58844],{"class":138},[128,60118,58867],{"class":176},[128,60120,58850],{"class":138},[128,60122,60123,60125,60127,60129,60131,60133,60135],{"class":130,"line":1038},[128,60124,58832],{"class":138},[128,60126,58876],{"class":176},[128,60128,58838],{"class":138},[128,60130,58881],{"class":176},[128,60132,58844],{"class":138},[128,60134,58886],{"class":176},[128,60136,58850],{"class":138},[128,60138,60139,60141,60143,60145,60147,60149,60151],{"class":130,"line":1050},[128,60140,58832],{"class":138},[128,60142,58895],{"class":176},[128,60144,58838],{"class":138},[128,60146,58900],{"class":176},[128,60148,58844],{"class":138},[128,60150,58905],{"class":176},[128,60152,58850],{"class":138},[128,60154,60155,60157,60159,60161,60163,60165,60167],{"class":130,"line":1055},[128,60156,58832],{"class":138},[128,60158,58914],{"class":176},[128,60160,58838],{"class":138},[128,60162,58919],{"class":176},[128,60164,58844],{"class":138},[128,60166,58924],{"class":176},[128,60168,58850],{"class":138},[128,60170,60171,60173,60175,60177,60179,60181,60183],{"class":130,"line":1060},[128,60172,58832],{"class":138},[128,60174,58933],{"class":176},[128,60176,58838],{"class":138},[128,60178,58938],{"class":176},[128,60180,58844],{"class":138},[128,60182,58943],{"class":176},[128,60184,58850],{"class":138},[128,60186,60187,60189,60191,60193,60195,60197,60199],{"class":130,"line":1070},[128,60188,58832],{"class":138},[128,60190,58952],{"class":176},[128,60192,58838],{"class":138},[128,60194,58957],{"class":176},[128,60196,58844],{"class":138},[128,60198,58962],{"class":176},[128,60200,58850],{"class":138},[128,60202,60203,60205,60207,60209,60211,60213,60215],{"class":130,"line":1086},[128,60204,58832],{"class":138},[128,60206,58971],{"class":176},[128,60208,58838],{"class":138},[128,60210,58976],{"class":176},[128,60212,58844],{"class":138},[128,60214,58981],{"class":176},[128,60216,58984],{"class":138},[128,60218,60219],{"class":130,"line":1095},[128,60220,56491],{"class":138},[128,60222,60223],{"class":130,"line":1100},[128,60224,60225],{"class":3814},"    \u002F\u002F 1.获取元素\n",[128,60227,60228,60230,60232,60234,60236,60238,60240,60242],{"class":130,"line":1113},[128,60229,14748],{"class":134},[128,60231,58995],{"class":166},[128,60233,170],{"class":134},[128,60235,57777],{"class":138},[128,60237,57780],{"class":199},[128,60239,253],{"class":138},[128,60241,59006],{"class":176},[128,60243,180],{"class":138},[128,60245,60246,60248,60250,60252,60254,60256,60258,60260],{"class":130,"line":1124},[128,60247,14748],{"class":134},[128,60249,10382],{"class":166},[128,60251,170],{"class":134},[128,60253,57777],{"class":138},[128,60255,57780],{"class":199},[128,60257,253],{"class":138},[128,60259,59025],{"class":176},[128,60261,180],{"class":138},[128,60263,60264,60266,60268,60270],{"class":130,"line":1129},[128,60265,55601],{"class":134},[128,60267,12984],{"class":138},[128,60269,270],{"class":134},[128,60271,50718],{"class":166},[128,60273,60274],{"class":130,"line":1134},[128,60275,60276],{"class":3814},"    \u002F\u002F 2.开启定时器\n",[128,60278,60279],{"class":130,"line":1150},[128,60280,60281],{"class":3814},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[128,60283,60284,60287,60289,60291],{"class":130,"line":1164},[128,60285,60286],{"class":199},"    setInterval",[128,60288,253],{"class":138},[128,60290,57830],{"class":134},[128,60292,57833],{"class":138},[128,60294,60295,60297],{"class":130,"line":1178},[128,60296,57838],{"class":138},[128,60298,6275],{"class":134},[128,60300,60301,60303,60305,60307,60310,60312],{"class":130,"line":1183},[128,60302,57861],{"class":134},[128,60304,57864],{"class":138},[128,60306,5308],{"class":134},[128,60308,60309],{"class":138}," sliderData.",[128,60311,55350],{"class":166},[128,60313,15968],{"class":138},[128,60315,60316,60319,60321],{"class":130,"line":1199},[128,60317,60318],{"class":138},"        i ",[128,60320,270],{"class":134},[128,60322,50718],{"class":166},[128,60324,60325],{"class":130,"line":1214},[128,60326,55780],{"class":138},[128,60328,60329],{"class":130,"line":1229},[128,60330,60331],{"class":3814},"      \u002F\u002F 更换图片路径\n",[128,60333,60334,60336,60338],{"class":130,"line":1234},[128,60335,59101],{"class":138},[128,60337,270],{"class":134},[128,60339,60340],{"class":138}," sliderData[i].url\n",[128,60342,60343],{"class":130,"line":1239},[128,60344,60345],{"class":3814},"      \u002F\u002F 把文字写到p里面\n",[128,60347,60348,60350,60352],{"class":130,"line":1251},[128,60349,59111],{"class":138},[128,60351,270],{"class":134},[128,60353,60354],{"class":138}," sliderData[i].title\n",[128,60356,60357],{"class":130,"line":1256},[128,60358,60359],{"class":3814},"      \u002F\u002F 小圆点\n",[128,60361,60362],{"class":130,"line":1261},[128,60363,60364],{"class":3814},"      \u002F\u002F 先删除以前的active\n",[128,60366,60367],{"class":130,"line":1271},[128,60368,60369],{"class":3814},"      \u002F\u002F 只让当前li添加active\n",[128,60371,60372,60374,60376,60378,60381,60384,60387,60389,60391],{"class":130,"line":1287},[128,60373,59151],{"class":138},[128,60375,57780],{"class":199},[128,60377,253],{"class":138},[128,60379,60380],{"class":176},"'.slider-footer .activate'",[128,60382,60383],{"class":138},").classList.",[128,60385,60386],{"class":199},"remove",[128,60388,253],{"class":138},[128,60390,59169],{"class":176},[128,60392,180],{"class":138},[128,60394,60395,60397,60399,60401,60404,60406,60408,60410,60413,60415,60417,60419,60421],{"class":130,"line":1296},[128,60396,59151],{"class":138},[128,60398,57780],{"class":199},[128,60400,253],{"class":138},[128,60402,60403],{"class":176},"`.slider-footer ul li:nth-child(${",[128,60405,4191],{"class":138},[128,60407,48951],{"class":134},[128,60409,28605],{"class":166},[128,60411,60412],{"class":176},"})`",[128,60414,60383],{"class":138},[128,60416,8892],{"class":199},[128,60418,253],{"class":138},[128,60420,59169],{"class":176},[128,60422,180],{"class":138},[128,60424,60425],{"class":130,"line":1301},[128,60426,160],{"emptyLinePlaceholder":159},[128,60428,60429,60431,60433],{"class":130,"line":1314},[128,60430,57916],{"class":138},[128,60432,9967],{"class":166},[128,60434,180],{"class":138},[128,60436,60437],{"class":130,"line":1325},[128,60438,160],{"emptyLinePlaceholder":159},[128,60440,60441,60443,60445],{"class":130,"line":1330},[128,60442,55799],{"class":138},[128,60444,55196],{"class":54685},[128,60446,54692],{"class":138},[128,60448,60449,60451,60453],{"class":130,"line":1335},[128,60450,55168],{"class":138},[128,60452,55183],{"class":54685},[128,60454,54692],{"class":138},[128,60456,60457],{"class":130,"line":1341},[128,60458,160],{"emptyLinePlaceholder":159},[128,60460,60461,60463,60465],{"class":130,"line":1346},[128,60462,55168],{"class":138},[128,60464,54020],{"class":54685},[128,60466,54692],{"class":138},[72,60468,60470],{"id":60469},"_317-重要知识点","3.1.7 重要知识点",[19,60472,60473,60474],{},"浏览器在渲染文本时， ",[3903,60475,60476],{},"没有空格或换行符就没有“断行点”",[19,60478,60479],{},[5074,60480],{"alt":112,"src":60481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,60483,60484],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,60486,60487],{},[5074,60488],{"alt":112,"src":60489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,60491,60492],{},[5074,60493],{"alt":112,"src":60494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,60496,60498],{"id":60497},"_32-dom事件基础","3.2 DOM事件基础",[72,60500,60502],{"id":60501},"_321-事件监听","3.2.1 事件监听",[19,60504,60505],{},[5074,60506],{"alt":112,"src":60507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,60509,60510],{},"事件监听有响应的发生",[19,60512,60513],{},[5074,60514],{"alt":112,"src":60515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,60517,60518],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,60520,60521],{},"对于有名函数,要执行的函数名后边不要加()",[72,60523,60525],{"id":60524},"_322-随机点名案例","3.2.2 随机点名案例",[106,60527,60529],{"className":54018,"code":60528,"language":54020,"meta":112,"style":112},"\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",[114,60530,60531,60541,60555,60559,60567,60581,60601,60613,60621,60627,60637,60647,60651,60655,60662,60673,60677,60681,60687,60699,60713,60723,60735,60748,60752,60756,60763,60767,60780,60792,60804,60808,60812,60816,60823,60833,60837,60841,60850,60862,60874,60889,60893,60901,60909,60913,60921,60934,60948,60961,60981,60989,61004,61024,61044,61052,61056,61064,61069,61105,61125,61130,61149,61154,61165,61170,61181,61186,61205,61220,61225,61251,61261,61270,61275,61291,61296,61301,61306,61321,61325,61329,61334,61353,61370,61378,61383,61398,61402,61406,61414,61422,61426],{"__ignoreMap":112},[128,60532,60533,60535,60537,60539],{"class":130,"line":131},[128,60534,54682],{"class":138},[128,60536,54686],{"class":54685},[128,60538,54689],{"class":199},[128,60540,54692],{"class":138},[128,60542,60543,60545,60547,60549,60551,60553],{"class":130,"line":142},[128,60544,4657],{"class":138},[128,60546,54020],{"class":54685},[128,60548,54701],{"class":199},[128,60550,270],{"class":138},[128,60552,54706],{"class":176},[128,60554,54692],{"class":138},[128,60556,60557],{"class":130,"line":156},[128,60558,160],{"emptyLinePlaceholder":159},[128,60560,60561,60563,60565],{"class":130,"line":163},[128,60562,4657],{"class":138},[128,60564,54719],{"class":54685},[128,60566,54692],{"class":138},[128,60568,60569,60571,60573,60575,60577,60579],{"class":130,"line":183},[128,60570,55526],{"class":138},[128,60572,54729],{"class":54685},[128,60574,54732],{"class":199},[128,60576,270],{"class":138},[128,60578,54737],{"class":176},[128,60580,54692],{"class":138},[128,60582,60583,60585,60587,60589,60591,60593,60595,60597,60599],{"class":130,"line":188},[128,60584,55526],{"class":138},[128,60586,54729],{"class":54685},[128,60588,18442],{"class":199},[128,60590,270],{"class":138},[128,60592,54776],{"class":176},[128,60594,54756],{"class":199},[128,60596,270],{"class":138},[128,60598,54783],{"class":176},[128,60600,54692],{"class":138},[128,60602,60603,60605,60607,60609,60611],{"class":130,"line":193},[128,60604,55526],{"class":138},[128,60606,2752],{"class":54685},[128,60608,54794],{"class":138},[128,60610,2752],{"class":54685},[128,60612,54692],{"class":138},[128,60614,60615,60617,60619],{"class":130,"line":206},[128,60616,55526],{"class":138},[128,60618,3659],{"class":54685},[128,60620,54692],{"class":138},[128,60622,60623,60625],{"class":130,"line":221},[128,60624,9960],{"class":54685},[128,60626,1959],{"class":138},[128,60628,60629,60631,60633,60635],{"class":130,"line":230},[128,60630,58087],{"class":166},[128,60632,1967],{"class":138},[128,60634,2452],{"class":166},[128,60636,4905],{"class":138},[128,60638,60639,60641,60643,60645],{"class":130,"line":235},[128,60640,58076],{"class":166},[128,60642,1967],{"class":138},[128,60644,2452],{"class":166},[128,60646,4905],{"class":138},[128,60648,60649],{"class":130,"line":244},[128,60650,5773],{"class":138},[128,60652,60653],{"class":130,"line":287},[128,60654,160],{"emptyLinePlaceholder":159},[128,60656,60657,60660],{"class":130,"line":301},[128,60658,60659],{"class":54685},"    h2",[128,60661,1959],{"class":138},[128,60663,60664,60667,60669,60671],{"class":130,"line":310},[128,60665,60666],{"class":166},"      text-align",[128,60668,1967],{"class":138},[128,60670,54975],{"class":166},[128,60672,4905],{"class":138},[128,60674,60675],{"class":130,"line":323},[128,60676,5773],{"class":138},[128,60678,60679],{"class":130,"line":330},[128,60680,160],{"emptyLinePlaceholder":159},[128,60682,60683,60685],{"class":130,"line":335},[128,60684,58133],{"class":199},[128,60686,1959],{"class":138},[128,60688,60689,60691,60693,60695,60697],{"class":130,"line":340},[128,60690,58152],{"class":166},[128,60692,1967],{"class":138},[128,60694,5150],{"class":166},[128,60696,54875],{"class":134},[128,60698,4905],{"class":138},[128,60700,60701,60703,60705,60707,60709,60711],{"class":130,"line":351},[128,60702,58087],{"class":166},[128,60704,1967],{"class":138},[128,60706,4405],{"class":166},[128,60708,54875],{"class":134},[128,60710,54939],{"class":166},[128,60712,4905],{"class":138},[128,60714,60715,60717,60719,60721],{"class":130,"line":384},[128,60716,58390],{"class":166},[128,60718,1967],{"class":138},[128,60720,54860],{"class":166},[128,60722,4905],{"class":138},[128,60724,60725,60727,60729,60731,60733],{"class":130,"line":414},[128,60726,58303],{"class":166},[128,60728,1967],{"class":138},[128,60730,4573],{"class":166},[128,60732,54875],{"class":134},[128,60734,4905],{"class":138},[128,60736,60737,60740,60742,60744,60746],{"class":130,"line":419},[128,60738,60739],{"class":166},"      line-height",[128,60741,1967],{"class":138},[128,60743,4151],{"class":166},[128,60745,54875],{"class":134},[128,60747,4905],{"class":138},[128,60749,60750],{"class":130,"line":424},[128,60751,5773],{"class":138},[128,60753,60754],{"class":130,"line":434},[128,60755,160],{"emptyLinePlaceholder":159},[128,60757,60758,60761],{"class":130,"line":447},[128,60759,60760],{"class":199},"    .qs",[128,60762,1959],{"class":138},[128,60764,60765],{"class":130,"line":459},[128,60766,160],{"emptyLinePlaceholder":159},[128,60768,60769,60771,60773,60776,60778],{"class":130,"line":471},[128,60770,58152],{"class":166},[128,60772,1967],{"class":138},[128,60774,60775],{"class":166},"450",[128,60777,54875],{"class":134},[128,60779,4905],{"class":138},[128,60781,60782,60784,60786,60788,60790],{"class":130,"line":483},[128,60783,58166],{"class":166},[128,60785,1967],{"class":138},[128,60787,4151],{"class":166},[128,60789,54875],{"class":134},[128,60791,4905],{"class":138},[128,60793,60794,60797,60799,60802],{"class":130,"line":495},[128,60795,60796],{"class":166},"      color",[128,60798,1967],{"class":138},[128,60800,60801],{"class":166},"red",[128,60803,4905],{"class":138},[128,60805,60806],{"class":130,"line":507},[128,60807,160],{"emptyLinePlaceholder":159},[128,60809,60810],{"class":130,"line":519},[128,60811,5773],{"class":138},[128,60813,60814],{"class":130,"line":524},[128,60815,160],{"emptyLinePlaceholder":159},[128,60817,60818,60821],{"class":130,"line":529},[128,60819,60820],{"class":199},"    .btns",[128,60822,1959],{"class":138},[128,60824,60825,60827,60829,60831],{"class":130,"line":540},[128,60826,60666],{"class":166},[128,60828,1967],{"class":138},[128,60830,54975],{"class":166},[128,60832,4905],{"class":138},[128,60834,60835],{"class":130,"line":555},[128,60836,5773],{"class":138},[128,60838,60839],{"class":130,"line":576},[128,60840,160],{"emptyLinePlaceholder":159},[128,60842,60843,60845,60848],{"class":130,"line":584},[128,60844,60820],{"class":199},[128,60846,60847],{"class":54685}," button",[128,60849,1959],{"class":138},[128,60851,60852,60854,60856,60858,60860],{"class":130,"line":593},[128,60853,58152],{"class":166},[128,60855,1967],{"class":138},[128,60857,3115],{"class":166},[128,60859,54875],{"class":134},[128,60861,4905],{"class":138},[128,60863,60864,60866,60868,60870,60872],{"class":130,"line":598},[128,60865,58166],{"class":166},[128,60867,1967],{"class":138},[128,60869,4023],{"class":166},[128,60871,54875],{"class":134},[128,60873,4905],{"class":138},[128,60875,60876,60878,60880,60882,60885,60887],{"class":130,"line":603},[128,60877,58087],{"class":166},[128,60879,1967],{"class":138},[128,60881,2452],{"class":166},[128,60883,60884],{"class":166}," 50",[128,60886,54875],{"class":134},[128,60888,4905],{"class":138},[128,60890,60891],{"class":130,"line":614},[128,60892,5773],{"class":138},[128,60894,60895,60897,60899],{"class":130,"line":625},[128,60896,55799],{"class":138},[128,60898,3659],{"class":54685},[128,60900,54692],{"class":138},[128,60902,60903,60905,60907],{"class":130,"line":633},[128,60904,55168],{"class":138},[128,60906,54719],{"class":54685},[128,60908,54692],{"class":138},[128,60910,60911],{"class":130,"line":649},[128,60912,160],{"emptyLinePlaceholder":159},[128,60914,60915,60917,60919],{"class":130,"line":660},[128,60916,4657],{"class":138},[128,60918,55183],{"class":54685},[128,60920,54692],{"class":138},[128,60922,60923,60925,60927,60930,60932],{"class":130,"line":673},[128,60924,55526],{"class":138},[128,60926,14],{"class":54685},[128,60928,60929],{"class":138},">随机点名\u003C\u002F",[128,60931,14],{"class":54685},[128,60933,54692],{"class":138},[128,60935,60936,60938,60940,60942,60944,60946],{"class":130,"line":678},[128,60937,55526],{"class":138},[128,60939,54994],{"class":54685},[128,60941,56868],{"class":199},[128,60943,270],{"class":138},[128,60945,56873],{"class":176},[128,60947,54692],{"class":138},[128,60949,60950,60952,60954,60957,60959],{"class":130,"line":683},[128,60951,54726],{"class":138},[128,60953,128],{"class":54685},[128,60955,60956],{"class":138},">名字是：\u003C\u002F",[128,60958,128],{"class":54685},[128,60960,54692],{"class":138},[128,60962,60963,60965,60967,60969,60971,60974,60977,60979],{"class":130,"line":693},[128,60964,54726],{"class":138},[128,60966,54994],{"class":54685},[128,60968,56868],{"class":199},[128,60970,270],{"class":138},[128,60972,60973],{"class":176},"\"qs\"",[128,60975,60976],{"class":138},">这里显示姓名\u003C\u002F",[128,60978,54994],{"class":54685},[128,60980,54692],{"class":138},[128,60982,60983,60985,60987],{"class":130,"line":702},[128,60984,55799],{"class":138},[128,60986,54994],{"class":54685},[128,60988,54692],{"class":138},[128,60990,60991,60993,60995,60997,60999,61002],{"class":130,"line":709},[128,60992,55526],{"class":138},[128,60994,54994],{"class":54685},[128,60996,56868],{"class":199},[128,60998,270],{"class":138},[128,61000,61001],{"class":176},"\"btns\"",[128,61003,54692],{"class":138},[128,61005,61006,61008,61010,61012,61014,61017,61020,61022],{"class":130,"line":723},[128,61007,54726],{"class":138},[128,61009,57268],{"class":54685},[128,61011,56868],{"class":199},[128,61013,270],{"class":138},[128,61015,61016],{"class":176},"\"start\"",[128,61018,61019],{"class":138},">开始\u003C\u002F",[128,61021,57268],{"class":54685},[128,61023,54692],{"class":138},[128,61025,61026,61028,61030,61032,61034,61037,61040,61042],{"class":130,"line":732},[128,61027,54726],{"class":138},[128,61029,57268],{"class":54685},[128,61031,56868],{"class":199},[128,61033,270],{"class":138},[128,61035,61036],{"class":176},"\"end\"",[128,61038,61039],{"class":138},">结束\u003C\u002F",[128,61041,57268],{"class":54685},[128,61043,54692],{"class":138},[128,61045,61046,61048,61050],{"class":130,"line":744},[128,61047,55799],{"class":138},[128,61049,54994],{"class":54685},[128,61051,54692],{"class":138},[128,61053,61054],{"class":130,"line":749},[128,61055,160],{"emptyLinePlaceholder":159},[128,61057,61058,61060,61062],{"class":130,"line":754},[128,61059,55526],{"class":138},[128,61061,55196],{"class":54685},[128,61063,54692],{"class":138},[128,61065,61066],{"class":130,"line":764},[128,61067,61068],{"class":3814},"    \u002F\u002F 数据数组\n",[128,61070,61071,61073,61076,61078,61080,61083,61085,61088,61090,61093,61095,61098,61100,61103],{"class":130,"line":782},[128,61072,14748],{"class":134},[128,61074,61075],{"class":166}," arr",[128,61077,170],{"class":134},[128,61079,55608],{"class":138},[128,61081,61082],{"class":176},"'马超'",[128,61084,258],{"class":138},[128,61086,61087],{"class":176},"'黄忠'",[128,61089,258],{"class":138},[128,61091,61092],{"class":176},"'赵云'",[128,61094,258],{"class":138},[128,61096,61097],{"class":176},"'关羽'",[128,61099,258],{"class":138},[128,61101,61102],{"class":176},"'张飞'",[128,61104,2376],{"class":138},[128,61106,61107,61109,61112,61114,61116,61118,61120,61123],{"class":130,"line":787},[128,61108,14748],{"class":134},[128,61110,61111],{"class":166}," qs",[128,61113,170],{"class":134},[128,61115,57777],{"class":138},[128,61117,57780],{"class":199},[128,61119,253],{"class":138},[128,61121,61122],{"class":176},"'.qs'",[128,61124,180],{"class":138},[128,61126,61127],{"class":130,"line":795},[128,61128,61129],{"class":3814},"    \u002F\u002F 1.业务1.开始按钮模块\n",[128,61131,61132,61134,61136,61138,61140,61142,61144,61147],{"class":130,"line":807},[128,61133,14748],{"class":134},[128,61135,7750],{"class":166},[128,61137,170],{"class":134},[128,61139,57777],{"class":138},[128,61141,57780],{"class":199},[128,61143,253],{"class":138},[128,61145,61146],{"class":176},"'.start'",[128,61148,180],{"class":138},[128,61150,61151],{"class":130,"line":813},[128,61152,61153],{"class":3814},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[128,61155,61156,61158,61161,61163],{"class":130,"line":818},[128,61157,55601],{"class":134},[128,61159,61160],{"class":138}," timerId ",[128,61162,270],{"class":134},[128,61164,50718],{"class":166},[128,61166,61167],{"class":130,"line":835},[128,61168,61169],{"class":3814},"    \u002F\u002F 随机号要全局变量\n",[128,61171,61172,61174,61177,61179],{"class":130,"line":851},[128,61173,55601],{"class":134},[128,61175,61176],{"class":138}," random ",[128,61178,270],{"class":134},[128,61180,50718],{"class":166},[128,61182,61183],{"class":130,"line":867},[128,61184,61185],{"class":3814},"    \u002F\u002F 1.1 添加点击事件\n",[128,61187,61188,61191,61194,61196,61199,61201,61203],{"class":130,"line":872},[128,61189,61190],{"class":138},"    start.",[128,61192,61193],{"class":199},"addEventListener",[128,61195,253],{"class":138},[128,61197,61198],{"class":176},"'click'",[128,61200,258],{"class":138},[128,61202,57830],{"class":134},[128,61204,57833],{"class":138},[128,61206,61207,61210,61212,61214,61216,61218],{"class":130,"line":878},[128,61208,61209],{"class":138},"      timerId ",[128,61211,270],{"class":134},[128,61213,57825],{"class":199},[128,61215,253],{"class":138},[128,61217,57830],{"class":134},[128,61219,57833],{"class":138},[128,61221,61222],{"class":130,"line":887},[128,61223,61224],{"class":3814},"        \u002F\u002F 随机数\n",[128,61226,61227,61230,61232,61235,61238,61241,61243,61245,61247,61249],{"class":130,"line":896},[128,61228,61229],{"class":138},"        random ",[128,61231,270],{"class":134},[128,61233,61234],{"class":199}," parseInt",[128,61236,61237],{"class":138},"(Math.",[128,61239,61240],{"class":199},"random",[128,61242,16576],{"class":138},[128,61244,4205],{"class":134},[128,61246,55347],{"class":138},[128,61248,55350],{"class":166},[128,61250,180],{"class":138},[128,61252,61253,61256,61258],{"class":130,"line":905},[128,61254,61255],{"class":138},"        qs.innerHTML ",[128,61257,270],{"class":134},[128,61259,61260],{"class":138}," arr[random]\n",[128,61262,61263,61266,61268],{"class":130,"line":914},[128,61264,61265],{"class":138},"      }, ",[128,61267,4023],{"class":166},[128,61269,180],{"class":138},[128,61271,61272],{"class":130,"line":920},[128,61273,61274],{"class":3814},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[128,61276,61277,61279,61282,61284,61287,61289],{"class":130,"line":926},[128,61278,57861],{"class":134},[128,61280,61281],{"class":138}," (arr.",[128,61283,55350],{"class":166},[128,61285,61286],{"class":134}," ===",[128,61288,28605],{"class":166},[128,61290,15968],{"class":138},[128,61292,61293],{"class":130,"line":938},[128,61294,61295],{"class":3814},"        \u002F\u002F start.disabled = true\n",[128,61297,61298],{"class":130,"line":943},[128,61299,61300],{"class":3814},"        \u002F\u002F end.disabled = true\n",[128,61302,61303],{"class":130,"line":948},[128,61304,61305],{"class":3814},"        \u002F\u002F 可以合起来写\n",[128,61307,61308,61311,61313,61316,61318],{"class":130,"line":958},[128,61309,61310],{"class":138},"        start.disabled ",[128,61312,270],{"class":134},[128,61314,61315],{"class":138}," end.disabled ",[128,61317,270],{"class":134},[128,61319,61320],{"class":166}," true\n",[128,61322,61323],{"class":130,"line":974},[128,61324,55780],{"class":138},[128,61326,61327],{"class":130,"line":985},[128,61328,917],{"class":138},[128,61330,61331],{"class":130,"line":990},[128,61332,61333],{"class":3814},"    \u002F\u002F 1.2 关闭按钮模块\n",[128,61335,61336,61338,61340,61342,61344,61346,61348,61351],{"class":130,"line":1005},[128,61337,14748],{"class":134},[128,61339,7766],{"class":166},[128,61341,170],{"class":134},[128,61343,57777],{"class":138},[128,61345,57780],{"class":199},[128,61347,253],{"class":138},[128,61349,61350],{"class":176},"'.end'",[128,61352,180],{"class":138},[128,61354,61355,61358,61360,61362,61364,61366,61368],{"class":130,"line":1017},[128,61356,61357],{"class":138},"    end.",[128,61359,61193],{"class":199},[128,61361,253],{"class":138},[128,61363,61198],{"class":176},[128,61365,258],{"class":138},[128,61367,57830],{"class":134},[128,61369,57833],{"class":138},[128,61371,61372,61375],{"class":130,"line":1022},[128,61373,61374],{"class":199},"      clearInterval",[128,61376,61377],{"class":138},"(timerId)\n",[128,61379,61380],{"class":130,"line":1027},[128,61381,61382],{"class":3814},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[128,61384,61385,61388,61391,61394,61396],{"class":130,"line":1033},[128,61386,61387],{"class":138},"      arr.",[128,61389,61390],{"class":199},"splice",[128,61392,61393],{"class":138},"(random, ",[128,61395,2592],{"class":166},[128,61397,180],{"class":138},[128,61399,61400],{"class":130,"line":1038},[128,61401,917],{"class":138},[128,61403,61404],{"class":130,"line":1050},[128,61405,160],{"emptyLinePlaceholder":159},[128,61407,61408,61410,61412],{"class":130,"line":1055},[128,61409,55799],{"class":138},[128,61411,55196],{"class":54685},[128,61413,54692],{"class":138},[128,61415,61416,61418,61420],{"class":130,"line":1060},[128,61417,55168],{"class":138},[128,61419,55183],{"class":54685},[128,61421,54692],{"class":138},[128,61423,61424],{"class":130,"line":1070},[128,61425,160],{"emptyLinePlaceholder":159},[128,61427,61428,61430,61432],{"class":130,"line":1086},[128,61429,55168],{"class":138},[128,61431,54020],{"class":54685},[128,61433,54692],{"class":138},[19,61435,61436],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[72,61438,61440],{"id":61439},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[106,61442,61444],{"className":54018,"code":61443,"language":54020,"meta":112,"style":112},"\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",[114,61445,61446,61456,61470,61474,61482,61496,61516,61528,61536,61540,61548,61560,61568,61587,61604,61620,61630,61634,61642,61650,61654],{"__ignoreMap":112},[128,61447,61448,61450,61452,61454],{"class":130,"line":131},[128,61449,54682],{"class":138},[128,61451,54686],{"class":54685},[128,61453,54689],{"class":199},[128,61455,54692],{"class":138},[128,61457,61458,61460,61462,61464,61466,61468],{"class":130,"line":142},[128,61459,4657],{"class":138},[128,61461,54020],{"class":54685},[128,61463,54701],{"class":199},[128,61465,270],{"class":138},[128,61467,54706],{"class":176},[128,61469,54692],{"class":138},[128,61471,61472],{"class":130,"line":156},[128,61473,160],{"emptyLinePlaceholder":159},[128,61475,61476,61478,61480],{"class":130,"line":163},[128,61477,4657],{"class":138},[128,61479,54719],{"class":54685},[128,61481,54692],{"class":138},[128,61483,61484,61486,61488,61490,61492,61494],{"class":130,"line":183},[128,61485,55526],{"class":138},[128,61487,54729],{"class":54685},[128,61489,54732],{"class":199},[128,61491,270],{"class":138},[128,61493,54737],{"class":176},[128,61495,54692],{"class":138},[128,61497,61498,61500,61502,61504,61506,61508,61510,61512,61514],{"class":130,"line":188},[128,61499,55526],{"class":138},[128,61501,54729],{"class":54685},[128,61503,18442],{"class":199},[128,61505,270],{"class":138},[128,61507,54776],{"class":176},[128,61509,54756],{"class":199},[128,61511,270],{"class":138},[128,61513,54783],{"class":176},[128,61515,54692],{"class":138},[128,61517,61518,61520,61522,61524,61526],{"class":130,"line":193},[128,61519,55526],{"class":138},[128,61521,2752],{"class":54685},[128,61523,54794],{"class":138},[128,61525,2752],{"class":54685},[128,61527,54692],{"class":138},[128,61529,61530,61532,61534],{"class":130,"line":206},[128,61531,55168],{"class":138},[128,61533,54719],{"class":54685},[128,61535,54692],{"class":138},[128,61537,61538],{"class":130,"line":221},[128,61539,160],{"emptyLinePlaceholder":159},[128,61541,61542,61544,61546],{"class":130,"line":230},[128,61543,4657],{"class":138},[128,61545,55183],{"class":54685},[128,61547,54692],{"class":138},[128,61549,61550,61552,61554,61556,61558],{"class":130,"line":235},[128,61551,55526],{"class":138},[128,61553,57268],{"class":54685},[128,61555,57274],{"class":138},[128,61557,57268],{"class":54685},[128,61559,54692],{"class":138},[128,61561,61562,61564,61566],{"class":130,"line":244},[128,61563,55526],{"class":138},[128,61565,55196],{"class":54685},[128,61567,54692],{"class":138},[128,61569,61570,61572,61574,61576,61578,61580,61582,61585],{"class":130,"line":287},[128,61571,14748],{"class":134},[128,61573,57772],{"class":166},[128,61575,170],{"class":134},[128,61577,57777],{"class":138},[128,61579,57780],{"class":199},[128,61581,253],{"class":138},[128,61583,61584],{"class":176},"'button'",[128,61586,180],{"class":138},[128,61588,61589,61592,61594,61596,61598,61600,61602],{"class":130,"line":301},[128,61590,61591],{"class":138},"    btn.",[128,61593,61193],{"class":199},[128,61595,253],{"class":138},[128,61597,61198],{"class":176},[128,61599,258],{"class":138},[128,61601,57830],{"class":134},[128,61603,57833],{"class":138},[128,61605,61606,61609,61611,61613,61616,61618],{"class":130,"line":310},[128,61607,61608],{"class":134},"      const",[128,61610,5826],{"class":166},[128,61612,170],{"class":134},[128,61614,61615],{"class":138}," Math.",[128,61617,61240],{"class":199},[128,61619,5563],{"class":138},[128,61621,61622,61625,61628],{"class":130,"line":323},[128,61623,61624],{"class":138},"      console.",[128,61626,61627],{"class":199},"log",[128,61629,3772],{"class":138},[128,61631,61632],{"class":130,"line":330},[128,61633,917],{"class":138},[128,61635,61636,61638,61640],{"class":130,"line":335},[128,61637,55799],{"class":138},[128,61639,55196],{"class":54685},[128,61641,54692],{"class":138},[128,61643,61644,61646,61648],{"class":130,"line":340},[128,61645,55168],{"class":138},[128,61647,55183],{"class":54685},[128,61649,54692],{"class":138},[128,61651,61652],{"class":130,"line":351},[128,61653,160],{"emptyLinePlaceholder":159},[128,61655,61656,61658,61660],{"class":130,"line":384},[128,61657,55168],{"class":138},[128,61659,54020],{"class":54685},[128,61661,54692],{"class":138},[19,61663,61664],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,61666,61667],{},"常量不可以重新赋值",[19,61669,61670],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[106,61672,61674],{"className":54018,"code":61673,"language":54020,"meta":112,"style":112},"\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",[114,61675,61676,61686,61700,61704,61712,61726,61746,61758,61766,61770,61778,61790,61798,61809,61827,61843,61857,61865,61869,61877,61885,61889],{"__ignoreMap":112},[128,61677,61678,61680,61682,61684],{"class":130,"line":131},[128,61679,54682],{"class":138},[128,61681,54686],{"class":54685},[128,61683,54689],{"class":199},[128,61685,54692],{"class":138},[128,61687,61688,61690,61692,61694,61696,61698],{"class":130,"line":142},[128,61689,4657],{"class":138},[128,61691,54020],{"class":54685},[128,61693,54701],{"class":199},[128,61695,270],{"class":138},[128,61697,54706],{"class":176},[128,61699,54692],{"class":138},[128,61701,61702],{"class":130,"line":156},[128,61703,160],{"emptyLinePlaceholder":159},[128,61705,61706,61708,61710],{"class":130,"line":163},[128,61707,4657],{"class":138},[128,61709,54719],{"class":54685},[128,61711,54692],{"class":138},[128,61713,61714,61716,61718,61720,61722,61724],{"class":130,"line":183},[128,61715,55526],{"class":138},[128,61717,54729],{"class":54685},[128,61719,54732],{"class":199},[128,61721,270],{"class":138},[128,61723,54737],{"class":176},[128,61725,54692],{"class":138},[128,61727,61728,61730,61732,61734,61736,61738,61740,61742,61744],{"class":130,"line":188},[128,61729,55526],{"class":138},[128,61731,54729],{"class":54685},[128,61733,18442],{"class":199},[128,61735,270],{"class":138},[128,61737,54776],{"class":176},[128,61739,54756],{"class":199},[128,61741,270],{"class":138},[128,61743,54783],{"class":176},[128,61745,54692],{"class":138},[128,61747,61748,61750,61752,61754,61756],{"class":130,"line":193},[128,61749,55526],{"class":138},[128,61751,2752],{"class":54685},[128,61753,54794],{"class":138},[128,61755,2752],{"class":54685},[128,61757,54692],{"class":138},[128,61759,61760,61762,61764],{"class":130,"line":206},[128,61761,55168],{"class":138},[128,61763,54719],{"class":54685},[128,61765,54692],{"class":138},[128,61767,61768],{"class":130,"line":221},[128,61769,160],{"emptyLinePlaceholder":159},[128,61771,61772,61774,61776],{"class":130,"line":230},[128,61773,4657],{"class":138},[128,61775,55183],{"class":54685},[128,61777,54692],{"class":138},[128,61779,61780,61782,61784,61786,61788],{"class":130,"line":235},[128,61781,55526],{"class":138},[128,61783,57268],{"class":54685},[128,61785,57274],{"class":138},[128,61787,57268],{"class":54685},[128,61789,54692],{"class":138},[128,61791,61792,61794,61796],{"class":130,"line":244},[128,61793,55526],{"class":138},[128,61795,55196],{"class":54685},[128,61797,54692],{"class":138},[128,61799,61800,61802,61804,61806],{"class":130,"line":287},[128,61801,14748],{"class":134},[128,61803,5826],{"class":166},[128,61805,170],{"class":134},[128,61807,61808],{"class":166}," 10\n",[128,61810,61811,61813,61815,61817,61819,61821,61823,61825],{"class":130,"line":301},[128,61812,14748],{"class":134},[128,61814,57772],{"class":166},[128,61816,170],{"class":134},[128,61818,57777],{"class":138},[128,61820,57780],{"class":199},[128,61822,253],{"class":138},[128,61824,61584],{"class":176},[128,61826,180],{"class":138},[128,61828,61829,61831,61833,61835,61837,61839,61841],{"class":130,"line":310},[128,61830,61591],{"class":138},[128,61832,61193],{"class":199},[128,61834,253],{"class":138},[128,61836,61198],{"class":176},[128,61838,258],{"class":138},[128,61840,57830],{"class":134},[128,61842,57833],{"class":138},[128,61844,61845,61847,61849,61851,61853,61855],{"class":130,"line":323},[128,61846,61608],{"class":134},[128,61848,5826],{"class":166},[128,61850,170],{"class":134},[128,61852,61615],{"class":138},[128,61854,61240],{"class":199},[128,61856,5563],{"class":138},[128,61858,61859,61861,61863],{"class":130,"line":330},[128,61860,61624],{"class":138},[128,61862,61627],{"class":199},[128,61864,3772],{"class":138},[128,61866,61867],{"class":130,"line":335},[128,61868,917],{"class":138},[128,61870,61871,61873,61875],{"class":130,"line":340},[128,61872,55799],{"class":138},[128,61874,55196],{"class":54685},[128,61876,54692],{"class":138},[128,61878,61879,61881,61883],{"class":130,"line":351},[128,61880,55168],{"class":138},[128,61882,55183],{"class":54685},[128,61884,54692],{"class":138},[128,61886,61887],{"class":130,"line":384},[128,61888,160],{"emptyLinePlaceholder":159},[128,61890,61891,61893,61895],{"class":130,"line":414},[128,61892,55168],{"class":138},[128,61894,54020],{"class":54685},[128,61896,54692],{"class":138},[19,61898,61899],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[106,61901,61903],{"className":54018,"code":61902,"language":54020,"meta":112,"style":112},"\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",[114,61904,61905,61915,61929,61933,61941,61955,61975,61987,61995,61999,62007,62019,62027,62037,62055,62071,62084,62092,62096,62104,62112,62116],{"__ignoreMap":112},[128,61906,61907,61909,61911,61913],{"class":130,"line":131},[128,61908,54682],{"class":138},[128,61910,54686],{"class":54685},[128,61912,54689],{"class":199},[128,61914,54692],{"class":138},[128,61916,61917,61919,61921,61923,61925,61927],{"class":130,"line":142},[128,61918,4657],{"class":138},[128,61920,54020],{"class":54685},[128,61922,54701],{"class":199},[128,61924,270],{"class":138},[128,61926,54706],{"class":176},[128,61928,54692],{"class":138},[128,61930,61931],{"class":130,"line":156},[128,61932,160],{"emptyLinePlaceholder":159},[128,61934,61935,61937,61939],{"class":130,"line":163},[128,61936,4657],{"class":138},[128,61938,54719],{"class":54685},[128,61940,54692],{"class":138},[128,61942,61943,61945,61947,61949,61951,61953],{"class":130,"line":183},[128,61944,55526],{"class":138},[128,61946,54729],{"class":54685},[128,61948,54732],{"class":199},[128,61950,270],{"class":138},[128,61952,54737],{"class":176},[128,61954,54692],{"class":138},[128,61956,61957,61959,61961,61963,61965,61967,61969,61971,61973],{"class":130,"line":188},[128,61958,55526],{"class":138},[128,61960,54729],{"class":54685},[128,61962,18442],{"class":199},[128,61964,270],{"class":138},[128,61966,54776],{"class":176},[128,61968,54756],{"class":199},[128,61970,270],{"class":138},[128,61972,54783],{"class":176},[128,61974,54692],{"class":138},[128,61976,61977,61979,61981,61983,61985],{"class":130,"line":193},[128,61978,55526],{"class":138},[128,61980,2752],{"class":54685},[128,61982,54794],{"class":138},[128,61984,2752],{"class":54685},[128,61986,54692],{"class":138},[128,61988,61989,61991,61993],{"class":130,"line":206},[128,61990,55168],{"class":138},[128,61992,54719],{"class":54685},[128,61994,54692],{"class":138},[128,61996,61997],{"class":130,"line":221},[128,61998,160],{"emptyLinePlaceholder":159},[128,62000,62001,62003,62005],{"class":130,"line":230},[128,62002,4657],{"class":138},[128,62004,55183],{"class":54685},[128,62006,54692],{"class":138},[128,62008,62009,62011,62013,62015,62017],{"class":130,"line":235},[128,62010,55526],{"class":138},[128,62012,57268],{"class":54685},[128,62014,57274],{"class":138},[128,62016,57268],{"class":54685},[128,62018,54692],{"class":138},[128,62020,62021,62023,62025],{"class":130,"line":244},[128,62022,55526],{"class":138},[128,62024,55196],{"class":54685},[128,62026,54692],{"class":138},[128,62028,62029,62031,62033,62035],{"class":130,"line":287},[128,62030,14748],{"class":134},[128,62032,5826],{"class":166},[128,62034,170],{"class":134},[128,62036,61808],{"class":166},[128,62038,62039,62041,62043,62045,62047,62049,62051,62053],{"class":130,"line":301},[128,62040,14748],{"class":134},[128,62042,57772],{"class":166},[128,62044,170],{"class":134},[128,62046,57777],{"class":138},[128,62048,57780],{"class":199},[128,62050,253],{"class":138},[128,62052,61584],{"class":176},[128,62054,180],{"class":138},[128,62056,62057,62059,62061,62063,62065,62067,62069],{"class":130,"line":310},[128,62058,61591],{"class":138},[128,62060,61193],{"class":199},[128,62062,253],{"class":138},[128,62064,61198],{"class":176},[128,62066,258],{"class":138},[128,62068,57830],{"class":134},[128,62070,57833],{"class":138},[128,62072,62073,62076,62078,62080,62082],{"class":130,"line":323},[128,62074,62075],{"class":138},"      num ",[128,62077,270],{"class":134},[128,62079,61615],{"class":138},[128,62081,61240],{"class":199},[128,62083,5563],{"class":138},[128,62085,62086,62088,62090],{"class":130,"line":330},[128,62087,61624],{"class":138},[128,62089,61627],{"class":199},[128,62091,3772],{"class":138},[128,62093,62094],{"class":130,"line":335},[128,62095,917],{"class":138},[128,62097,62098,62100,62102],{"class":130,"line":340},[128,62099,55799],{"class":138},[128,62101,55196],{"class":54685},[128,62103,54692],{"class":138},[128,62105,62106,62108,62110],{"class":130,"line":351},[128,62107,55168],{"class":138},[128,62109,55183],{"class":54685},[128,62111,54692],{"class":138},[128,62113,62114],{"class":130,"line":384},[128,62115,160],{"emptyLinePlaceholder":159},[128,62117,62118,62120,62122],{"class":130,"line":414},[128,62119,55168],{"class":138},[128,62121,54020],{"class":54685},[128,62123,54692],{"class":138},[19,62125,62126],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[72,62128,62130],{"id":62129},"_324-事件监听版本","3.2.4 事件监听版本",[19,62132,62133],{},[5074,62134],{"alt":112,"src":62135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,62137,62138],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,62140,62141],{},"这种方式会覆盖前边的事件监听:",[106,62143,62145],{"className":54018,"code":62144,"language":54020,"meta":112,"style":112},"\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",[114,62146,62147,62157,62171,62175,62183,62197,62217,62229,62237,62241,62249,62261,62269,62287,62301,62312,62316,62328,62338,62342,62350,62358,62362],{"__ignoreMap":112},[128,62148,62149,62151,62153,62155],{"class":130,"line":131},[128,62150,54682],{"class":138},[128,62152,54686],{"class":54685},[128,62154,54689],{"class":199},[128,62156,54692],{"class":138},[128,62158,62159,62161,62163,62165,62167,62169],{"class":130,"line":142},[128,62160,4657],{"class":138},[128,62162,54020],{"class":54685},[128,62164,54701],{"class":199},[128,62166,270],{"class":138},[128,62168,54706],{"class":176},[128,62170,54692],{"class":138},[128,62172,62173],{"class":130,"line":156},[128,62174,160],{"emptyLinePlaceholder":159},[128,62176,62177,62179,62181],{"class":130,"line":163},[128,62178,4657],{"class":138},[128,62180,54719],{"class":54685},[128,62182,54692],{"class":138},[128,62184,62185,62187,62189,62191,62193,62195],{"class":130,"line":183},[128,62186,55526],{"class":138},[128,62188,54729],{"class":54685},[128,62190,54732],{"class":199},[128,62192,270],{"class":138},[128,62194,54737],{"class":176},[128,62196,54692],{"class":138},[128,62198,62199,62201,62203,62205,62207,62209,62211,62213,62215],{"class":130,"line":188},[128,62200,55526],{"class":138},[128,62202,54729],{"class":54685},[128,62204,18442],{"class":199},[128,62206,270],{"class":138},[128,62208,54776],{"class":176},[128,62210,54756],{"class":199},[128,62212,270],{"class":138},[128,62214,54783],{"class":176},[128,62216,54692],{"class":138},[128,62218,62219,62221,62223,62225,62227],{"class":130,"line":193},[128,62220,55526],{"class":138},[128,62222,2752],{"class":54685},[128,62224,54794],{"class":138},[128,62226,2752],{"class":54685},[128,62228,54692],{"class":138},[128,62230,62231,62233,62235],{"class":130,"line":206},[128,62232,55168],{"class":138},[128,62234,54719],{"class":54685},[128,62236,54692],{"class":138},[128,62238,62239],{"class":130,"line":221},[128,62240,160],{"emptyLinePlaceholder":159},[128,62242,62243,62245,62247],{"class":130,"line":230},[128,62244,4657],{"class":138},[128,62246,55183],{"class":54685},[128,62248,54692],{"class":138},[128,62250,62251,62253,62255,62257,62259],{"class":130,"line":235},[128,62252,55526],{"class":138},[128,62254,57268],{"class":54685},[128,62256,57274],{"class":138},[128,62258,57268],{"class":54685},[128,62260,54692],{"class":138},[128,62262,62263,62265,62267],{"class":130,"line":244},[128,62264,55526],{"class":138},[128,62266,55196],{"class":54685},[128,62268,54692],{"class":138},[128,62270,62271,62273,62275,62277,62279,62281,62283,62285],{"class":130,"line":287},[128,62272,14748],{"class":134},[128,62274,57772],{"class":166},[128,62276,170],{"class":134},[128,62278,57777],{"class":138},[128,62280,57780],{"class":199},[128,62282,253],{"class":138},[128,62284,61584],{"class":176},[128,62286,180],{"class":138},[128,62288,62289,62291,62294,62296,62299],{"class":130,"line":301},[128,62290,61591],{"class":138},[128,62292,62293],{"class":199},"onclick",[128,62295,170],{"class":134},[128,62297,62298],{"class":134}," function",[128,62300,57833],{"class":138},[128,62302,62303,62306,62308,62310],{"class":130,"line":310},[128,62304,62305],{"class":199},"      alert",[128,62307,253],{"class":138},[128,62309,4222],{"class":166},[128,62311,180],{"class":138},[128,62313,62314],{"class":130,"line":323},[128,62315,5773],{"class":138},[128,62317,62318,62320,62322,62324,62326],{"class":130,"line":330},[128,62319,61591],{"class":138},[128,62321,62293],{"class":199},[128,62323,170],{"class":134},[128,62325,62298],{"class":134},[128,62327,57833],{"class":138},[128,62329,62330,62332,62334,62336],{"class":130,"line":335},[128,62331,62305],{"class":199},[128,62333,253],{"class":138},[128,62335,4499],{"class":166},[128,62337,180],{"class":138},[128,62339,62340],{"class":130,"line":340},[128,62341,5773],{"class":138},[128,62343,62344,62346,62348],{"class":130,"line":351},[128,62345,55799],{"class":138},[128,62347,55196],{"class":54685},[128,62349,54692],{"class":138},[128,62351,62352,62354,62356],{"class":130,"line":384},[128,62353,55168],{"class":138},[128,62355,55183],{"class":54685},[128,62357,54692],{"class":138},[128,62359,62360],{"class":130,"line":414},[128,62361,160],{"emptyLinePlaceholder":159},[128,62363,62364,62366,62368],{"class":130,"line":419},[128,62365,55168],{"class":138},[128,62367,54020],{"class":54685},[128,62369,54692],{"class":138},[19,62371,62372],{},"只要点击就输出结果为22,前边11被覆盖了",[106,62374,62376],{"className":54018,"code":62375,"language":54020,"meta":112,"style":112},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[114,62377,62378,62383,62388,62392,62397,62402],{"__ignoreMap":112},[128,62379,62380],{"class":130,"line":131},[128,62381,62382],{"class":138},"  btn.addEventListener('click', function () {\n",[128,62384,62385],{"class":130,"line":142},[128,62386,62387],{"class":138},"      alert(11)\n",[128,62389,62390],{"class":130,"line":156},[128,62391,917],{"class":138},[128,62393,62394],{"class":130,"line":163},[128,62395,62396],{"class":138},"    btn.addEventListener('click', function () {\n",[128,62398,62399],{"class":130,"line":183},[128,62400,62401],{"class":138},"      alert(22)\n",[128,62403,62404],{"class":130,"line":188},[128,62405,917],{"class":138},[19,62407,62408],{},"点击第一次输出11,第二次点击为22",[72,62410,62412],{"id":62411},"_325-事件类型","3.2.5 事件类型",[19,62414,62415],{},[5074,62416],{"alt":112,"src":62417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[25485,62419,62421],{"id":62420},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,62423,62424],{},"补充知识:",[19,62426,62427],{},"轮播图自动播放模块,可以使用",[19,62429,62430],{},"let timerId = setInterval(function () {",[19,62432,62433],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,62435,62436],{},"用js方法模拟进行点击事件,click必须加()",[19,62438,62439],{},"next.click()",[19,62441,62442],{},"}, 1000)",[19,62444,62445],{},[5074,62446],{"alt":112,"src":62447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[106,62449,62451],{"className":56449,"code":62450,"language":56451,"meta":112,"style":112},"\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",[114,62452,62453,62457,62467,62481,62485,62493,62508,62528,62548,62561,62569,62574,62579,62583,62587,62592,62597,62602,62607,62611,62615,62620,62625,62630,62634,62638,62643,62647,62652,62657,62661,62665,62670,62675,62680,62685,62690,62694,62698,62703,62708,62713,62718,62723,62727,62731,62736,62741,62746,62751,62756,62761,62766,62771,62776,62781,62785,62789,62794,62799,62803,62807,62812,62817,62821,62826,62831,62835,62839,62844,62848,62853,62858,62862,62867,62871,62875,62880,62885,62890,62895,62900,62905,62910,62914,62918,62922,62927,62932,62937,62942,62946,62954,62962,62966,62974,62989,63003,63024,63032,63046,63059,63074,63093,63105,63117,63129,63141,63153,63165,63177,63185,63200,63224,63248,63256,63264,63272,63280,63285,63290,63295,63300,63305,63310,63315,63320,63325,63330,63334,63339,63344,63349,63354,63359,63364,63369,63374,63379,63383,63388,63393,63398,63403,63408,63413,63418,63423,63428,63433,63438,63443,63447,63451,63456,63461,63466,63470,63475,63480,63485,63490,63495,63499,63504,63508,63512,63516,63520,63524,63528,63533,63538,63543,63548,63553,63558,63563,63568,63573,63577,63581,63586,63591,63596,63601,63606,63610,63615,63620,63625,63630,63635,63640,63644,63648,63653,63657,63662,63666,63671,63676,63681,63686,63691,63696,63700,63708,63716,63720],{"__ignoreMap":112},[128,62454,62455],{"class":130,"line":131},[128,62456,160],{"emptyLinePlaceholder":159},[128,62458,62459,62461,62463,62465],{"class":130,"line":142},[128,62460,54682],{"class":138},[128,62462,54686],{"class":134},[128,62464,54689],{"class":166},[128,62466,54692],{"class":138},[128,62468,62469,62471,62473,62475,62477,62479],{"class":130,"line":156},[128,62470,4657],{"class":138},[128,62472,54020],{"class":54685},[128,62474,54701],{"class":199},[128,62476,270],{"class":138},[128,62478,54706],{"class":176},[128,62480,54692],{"class":138},[128,62482,62483],{"class":130,"line":163},[128,62484,160],{"emptyLinePlaceholder":159},[128,62486,62487,62489,62491],{"class":130,"line":183},[128,62488,4657],{"class":138},[128,62490,54719],{"class":54685},[128,62492,54692],{"class":138},[128,62494,62495,62497,62499,62501,62503,62505],{"class":130,"line":188},[128,62496,55526],{"class":138},[128,62498,54729],{"class":54685},[128,62500,54732],{"class":199},[128,62502,270],{"class":138},[128,62504,54737],{"class":176},[128,62506,62507],{"class":138}," \u002F>\n",[128,62509,62510,62512,62514,62516,62518,62520,62522,62524,62526],{"class":130,"line":193},[128,62511,55526],{"class":138},[128,62513,54729],{"class":54685},[128,62515,54748],{"class":199},[128,62517,270],{"class":138},[128,62519,54753],{"class":176},[128,62521,54756],{"class":199},[128,62523,270],{"class":138},[128,62525,54761],{"class":176},[128,62527,62507],{"class":138},[128,62529,62530,62532,62534,62536,62538,62540,62542,62544,62546],{"class":130,"line":206},[128,62531,55526],{"class":138},[128,62533,54729],{"class":54685},[128,62535,18442],{"class":199},[128,62537,270],{"class":138},[128,62539,54776],{"class":176},[128,62541,54756],{"class":199},[128,62543,270],{"class":138},[128,62545,54783],{"class":176},[128,62547,62507],{"class":138},[128,62549,62550,62552,62554,62557,62559],{"class":130,"line":221},[128,62551,55526],{"class":138},[128,62553,2752],{"class":54685},[128,62555,62556],{"class":138},">轮播图点击切换\u003C\u002F",[128,62558,2752],{"class":54685},[128,62560,54692],{"class":138},[128,62562,62563,62565,62567],{"class":130,"line":230},[128,62564,55526],{"class":138},[128,62566,3659],{"class":54685},[128,62568,54692],{"class":138},[128,62570,62571],{"class":130,"line":235},[128,62572,62573],{"class":138},"    * {\n",[128,62575,62576],{"class":130,"line":244},[128,62577,62578],{"class":138},"      box-sizing: border-box;\n",[128,62580,62581],{"class":130,"line":287},[128,62582,5773],{"class":138},[128,62584,62585],{"class":130,"line":301},[128,62586,160],{"emptyLinePlaceholder":159},[128,62588,62589],{"class":130,"line":310},[128,62590,62591],{"class":138},"    .slider {\n",[128,62593,62594],{"class":130,"line":323},[128,62595,62596],{"class":138},"      width: 560px;\n",[128,62598,62599],{"class":130,"line":330},[128,62600,62601],{"class":138},"      height: 400px;\n",[128,62603,62604],{"class":130,"line":335},[128,62605,62606],{"class":138},"      overflow: hidden;\n",[128,62608,62609],{"class":130,"line":340},[128,62610,5773],{"class":138},[128,62612,62613],{"class":130,"line":351},[128,62614,160],{"emptyLinePlaceholder":159},[128,62616,62617],{"class":130,"line":384},[128,62618,62619],{"class":138},"    .slider-wrapper {\n",[128,62621,62622],{"class":130,"line":414},[128,62623,62624],{"class":138},"      width: 100%;\n",[128,62626,62627],{"class":130,"line":419},[128,62628,62629],{"class":138},"      height: 320px;\n",[128,62631,62632],{"class":130,"line":424},[128,62633,5773],{"class":138},[128,62635,62636],{"class":130,"line":434},[128,62637,160],{"emptyLinePlaceholder":159},[128,62639,62640],{"class":130,"line":447},[128,62641,62642],{"class":138},"    .slider-wrapper img {\n",[128,62644,62645],{"class":130,"line":459},[128,62646,62624],{"class":138},[128,62648,62649],{"class":130,"line":471},[128,62650,62651],{"class":138},"      height: 100%;\n",[128,62653,62654],{"class":130,"line":483},[128,62655,62656],{"class":138},"      display: block;\n",[128,62658,62659],{"class":130,"line":495},[128,62660,5773],{"class":138},[128,62662,62663],{"class":130,"line":507},[128,62664,160],{"emptyLinePlaceholder":159},[128,62666,62667],{"class":130,"line":519},[128,62668,62669],{"class":138},"    .slider-footer {\n",[128,62671,62672],{"class":130,"line":524},[128,62673,62674],{"class":138},"      height: 80px;\n",[128,62676,62677],{"class":130,"line":529},[128,62678,62679],{"class":138},"      background-color: rgb(100, 67, 68);\n",[128,62681,62682],{"class":130,"line":540},[128,62683,62684],{"class":138},"      padding: 12px 12px 0 12px;\n",[128,62686,62687],{"class":130,"line":555},[128,62688,62689],{"class":138},"      position: relative;\n",[128,62691,62692],{"class":130,"line":576},[128,62693,5773],{"class":138},[128,62695,62696],{"class":130,"line":584},[128,62697,160],{"emptyLinePlaceholder":159},[128,62699,62700],{"class":130,"line":593},[128,62701,62702],{"class":138},"    .slider-footer .toggle {\n",[128,62704,62705],{"class":130,"line":598},[128,62706,62707],{"class":138},"      position: absolute;\n",[128,62709,62710],{"class":130,"line":603},[128,62711,62712],{"class":138},"      right: 0;\n",[128,62714,62715],{"class":130,"line":614},[128,62716,62717],{"class":138},"      top: 12px;\n",[128,62719,62720],{"class":130,"line":625},[128,62721,62722],{"class":138},"      display: flex;\n",[128,62724,62725],{"class":130,"line":633},[128,62726,5773],{"class":138},[128,62728,62729],{"class":130,"line":649},[128,62730,160],{"emptyLinePlaceholder":159},[128,62732,62733],{"class":130,"line":660},[128,62734,62735],{"class":138},"    .slider-footer .toggle button {\n",[128,62737,62738],{"class":130,"line":673},[128,62739,62740],{"class":138},"      margin-right: 12px;\n",[128,62742,62743],{"class":130,"line":678},[128,62744,62745],{"class":138},"      width: 28px;\n",[128,62747,62748],{"class":130,"line":683},[128,62749,62750],{"class":138},"      height: 28px;\n",[128,62752,62753],{"class":130,"line":693},[128,62754,62755],{"class":138},"      appearance: none;\n",[128,62757,62758],{"class":130,"line":702},[128,62759,62760],{"class":138},"      border: none;\n",[128,62762,62763],{"class":130,"line":709},[128,62764,62765],{"class":138},"      background: rgba(255, 255, 255, 0.1);\n",[128,62767,62768],{"class":130,"line":723},[128,62769,62770],{"class":138},"      color: #fff;\n",[128,62772,62773],{"class":130,"line":732},[128,62774,62775],{"class":138},"      border-radius: 4px;\n",[128,62777,62778],{"class":130,"line":744},[128,62779,62780],{"class":138},"      cursor: pointer;\n",[128,62782,62783],{"class":130,"line":749},[128,62784,5773],{"class":138},[128,62786,62787],{"class":130,"line":754},[128,62788,160],{"emptyLinePlaceholder":159},[128,62790,62791],{"class":130,"line":764},[128,62792,62793],{"class":138},"    .slider-footer .toggle button:hover {\n",[128,62795,62796],{"class":130,"line":782},[128,62797,62798],{"class":138},"      background: rgba(255, 255, 255, 0.2);\n",[128,62800,62801],{"class":130,"line":787},[128,62802,5773],{"class":138},[128,62804,62805],{"class":130,"line":795},[128,62806,160],{"emptyLinePlaceholder":159},[128,62808,62809],{"class":130,"line":807},[128,62810,62811],{"class":138},"    .slider-footer p {\n",[128,62813,62814],{"class":130,"line":813},[128,62815,62816],{"class":138},"      margin: 0;\n",[128,62818,62819],{"class":130,"line":818},[128,62820,62770],{"class":138},[128,62822,62823],{"class":130,"line":835},[128,62824,62825],{"class":138},"      font-size: 18px;\n",[128,62827,62828],{"class":130,"line":851},[128,62829,62830],{"class":138},"      margin-bottom: 10px;\n",[128,62832,62833],{"class":130,"line":867},[128,62834,5773],{"class":138},[128,62836,62837],{"class":130,"line":872},[128,62838,160],{"emptyLinePlaceholder":159},[128,62840,62841],{"class":130,"line":878},[128,62842,62843],{"class":138},"    .slider-indicator {\n",[128,62845,62846],{"class":130,"line":887},[128,62847,62816],{"class":138},[128,62849,62850],{"class":130,"line":896},[128,62851,62852],{"class":138},"      padding: 0;\n",[128,62854,62855],{"class":130,"line":905},[128,62856,62857],{"class":138},"      list-style: none;\n",[128,62859,62860],{"class":130,"line":914},[128,62861,62722],{"class":138},[128,62863,62864],{"class":130,"line":920},[128,62865,62866],{"class":138},"      align-items: center;\n",[128,62868,62869],{"class":130,"line":926},[128,62870,5773],{"class":138},[128,62872,62873],{"class":130,"line":938},[128,62874,160],{"emptyLinePlaceholder":159},[128,62876,62877],{"class":130,"line":943},[128,62878,62879],{"class":138},"    .slider-indicator li {\n",[128,62881,62882],{"class":130,"line":948},[128,62883,62884],{"class":138},"      width: 8px;\n",[128,62886,62887],{"class":130,"line":958},[128,62888,62889],{"class":138},"      height: 8px;\n",[128,62891,62892],{"class":130,"line":974},[128,62893,62894],{"class":138},"      margin: 4px;\n",[128,62896,62897],{"class":130,"line":985},[128,62898,62899],{"class":138},"      border-radius: 50%;\n",[128,62901,62902],{"class":130,"line":990},[128,62903,62904],{"class":138},"      background: #fff;\n",[128,62906,62907],{"class":130,"line":1005},[128,62908,62909],{"class":138},"      opacity: 0.4;\n",[128,62911,62912],{"class":130,"line":1017},[128,62913,62780],{"class":138},[128,62915,62916],{"class":130,"line":1022},[128,62917,5773],{"class":138},[128,62919,62920],{"class":130,"line":1027},[128,62921,160],{"emptyLinePlaceholder":159},[128,62923,62924],{"class":130,"line":1033},[128,62925,62926],{"class":138},"    .slider-indicator li.active {\n",[128,62928,62929],{"class":130,"line":1038},[128,62930,62931],{"class":138},"      width: 12px;\n",[128,62933,62934],{"class":130,"line":1050},[128,62935,62936],{"class":138},"      height: 12px;\n",[128,62938,62939],{"class":130,"line":1055},[128,62940,62941],{"class":138},"      opacity: 1;\n",[128,62943,62944],{"class":130,"line":1060},[128,62945,5773],{"class":138},[128,62947,62948,62950,62952],{"class":130,"line":1070},[128,62949,55799],{"class":138},[128,62951,3659],{"class":54685},[128,62953,54692],{"class":138},[128,62955,62956,62958,62960],{"class":130,"line":1086},[128,62957,55168],{"class":138},[128,62959,54719],{"class":54685},[128,62961,54692],{"class":138},[128,62963,62964],{"class":130,"line":1095},[128,62965,160],{"emptyLinePlaceholder":159},[128,62967,62968,62970,62972],{"class":130,"line":1100},[128,62969,4657],{"class":138},[128,62971,55183],{"class":54685},[128,62973,54692],{"class":138},[128,62975,62976,62978,62980,62982,62984,62987],{"class":130,"line":1113},[128,62977,55526],{"class":138},[128,62979,54994],{"class":54685},[128,62981,56868],{"class":199},[128,62983,270],{"class":138},[128,62985,62986],{"class":176},"\"slider\"",[128,62988,54692],{"class":138},[128,62990,62991,62993,62995,62997,62999,63001],{"class":130,"line":1124},[128,62992,54726],{"class":138},[128,62994,54994],{"class":54685},[128,62996,56868],{"class":199},[128,62998,270],{"class":138},[128,63000,58608],{"class":176},[128,63002,54692],{"class":138},[128,63004,63005,63007,63009,63011,63013,63016,63018,63020,63022],{"class":130,"line":1129},[128,63006,58615],{"class":138},[128,63008,5074],{"class":54685},[128,63010,58620],{"class":199},[128,63012,270],{"class":138},[128,63014,63015],{"class":176},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[128,63017,58628],{"class":199},[128,63019,270],{"class":138},[128,63021,11209],{"class":176},[128,63023,62507],{"class":138},[128,63025,63026,63028,63030],{"class":130,"line":1134},[128,63027,55159],{"class":138},[128,63029,54994],{"class":54685},[128,63031,54692],{"class":138},[128,63033,63034,63036,63038,63040,63042,63044],{"class":130,"line":1150},[128,63035,54726],{"class":138},[128,63037,54994],{"class":54685},[128,63039,56868],{"class":199},[128,63041,270],{"class":138},[128,63043,58655],{"class":176},[128,63045,54692],{"class":138},[128,63047,63048,63050,63052,63055,63057],{"class":130,"line":1164},[128,63049,58615],{"class":138},[128,63051,19],{"class":54685},[128,63053,63054],{"class":138},">对人类来说会不会太超前了？\u003C\u002F",[128,63056,19],{"class":54685},[128,63058,54692],{"class":138},[128,63060,63061,63063,63065,63067,63069,63072],{"class":130,"line":1178},[128,63062,58615],{"class":138},[128,63064,4752],{"class":54685},[128,63066,56868],{"class":199},[128,63068,270],{"class":138},[128,63070,63071],{"class":176},"\"slider-indicator\"",[128,63073,54692],{"class":138},[128,63075,63076,63078,63080,63082,63084,63087,63089,63091],{"class":130,"line":1183},[128,63077,58683],{"class":138},[128,63079,29],{"class":54685},[128,63081,56868],{"class":199},[128,63083,270],{"class":138},[128,63085,63086],{"class":176},"\"active\"",[128,63088,58695],{"class":138},[128,63090,29],{"class":54685},[128,63092,54692],{"class":138},[128,63094,63095,63097,63099,63101,63103],{"class":130,"line":1199},[128,63096,58683],{"class":138},[128,63098,29],{"class":54685},[128,63100,58695],{"class":138},[128,63102,29],{"class":54685},[128,63104,54692],{"class":138},[128,63106,63107,63109,63111,63113,63115],{"class":130,"line":1214},[128,63108,58683],{"class":138},[128,63110,29],{"class":54685},[128,63112,58695],{"class":138},[128,63114,29],{"class":54685},[128,63116,54692],{"class":138},[128,63118,63119,63121,63123,63125,63127],{"class":130,"line":1229},[128,63120,58683],{"class":138},[128,63122,29],{"class":54685},[128,63124,58695],{"class":138},[128,63126,29],{"class":54685},[128,63128,54692],{"class":138},[128,63130,63131,63133,63135,63137,63139],{"class":130,"line":1234},[128,63132,58683],{"class":138},[128,63134,29],{"class":54685},[128,63136,58695],{"class":138},[128,63138,29],{"class":54685},[128,63140,54692],{"class":138},[128,63142,63143,63145,63147,63149,63151],{"class":130,"line":1239},[128,63144,58683],{"class":138},[128,63146,29],{"class":54685},[128,63148,58695],{"class":138},[128,63150,29],{"class":54685},[128,63152,54692],{"class":138},[128,63154,63155,63157,63159,63161,63163],{"class":130,"line":1251},[128,63156,58683],{"class":138},[128,63158,29],{"class":54685},[128,63160,58695],{"class":138},[128,63162,29],{"class":54685},[128,63164,54692],{"class":138},[128,63166,63167,63169,63171,63173,63175],{"class":130,"line":1256},[128,63168,58683],{"class":138},[128,63170,29],{"class":54685},[128,63172,58695],{"class":138},[128,63174,29],{"class":54685},[128,63176,54692],{"class":138},[128,63178,63179,63181,63183],{"class":130,"line":1261},[128,63180,58788],{"class":138},[128,63182,4752],{"class":54685},[128,63184,54692],{"class":138},[128,63186,63187,63189,63191,63193,63195,63198],{"class":130,"line":1271},[128,63188,58615],{"class":138},[128,63190,54994],{"class":54685},[128,63192,56868],{"class":199},[128,63194,270],{"class":138},[128,63196,63197],{"class":176},"\"toggle\"",[128,63199,54692],{"class":138},[128,63201,63202,63204,63206,63208,63210,63213,63215,63218,63220,63222],{"class":130,"line":1287},[128,63203,58683],{"class":138},[128,63205,57268],{"class":54685},[128,63207,56868],{"class":199},[128,63209,270],{"class":138},[128,63211,63212],{"class":176},"\"prev\"",[128,63214,4705],{"class":138},[128,63216,63217],{"class":166},"&lt;",[128,63219,55168],{"class":138},[128,63221,57268],{"class":54685},[128,63223,54692],{"class":138},[128,63225,63226,63228,63230,63232,63234,63237,63239,63242,63244,63246],{"class":130,"line":1296},[128,63227,58683],{"class":138},[128,63229,57268],{"class":54685},[128,63231,56868],{"class":199},[128,63233,270],{"class":138},[128,63235,63236],{"class":176},"\"next\"",[128,63238,4705],{"class":138},[128,63240,63241],{"class":166},"&gt;",[128,63243,55168],{"class":138},[128,63245,57268],{"class":54685},[128,63247,54692],{"class":138},[128,63249,63250,63252,63254],{"class":130,"line":1301},[128,63251,58788],{"class":138},[128,63253,54994],{"class":54685},[128,63255,54692],{"class":138},[128,63257,63258,63260,63262],{"class":130,"line":1314},[128,63259,55159],{"class":138},[128,63261,54994],{"class":54685},[128,63263,54692],{"class":138},[128,63265,63266,63268,63270],{"class":130,"line":1325},[128,63267,55799],{"class":138},[128,63269,54994],{"class":54685},[128,63271,54692],{"class":138},[128,63273,63274,63276,63278],{"class":130,"line":1330},[128,63275,55526],{"class":138},[128,63277,55196],{"class":54685},[128,63279,54692],{"class":138},[128,63281,63282],{"class":130,"line":1335},[128,63283,63284],{"class":138},"    \u002F\u002F 1. 初始数据\n",[128,63286,63287],{"class":130,"line":1341},[128,63288,63289],{"class":138},"    const data = [\n",[128,63291,63292],{"class":130,"line":1346},[128,63293,63294],{"class":138},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[128,63296,63297],{"class":130,"line":1351},[128,63298,63299],{"class":138},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[128,63301,63302],{"class":130,"line":1362},[128,63303,63304],{"class":138},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[128,63306,63307],{"class":130,"line":1370},[128,63308,63309],{"class":138},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[128,63311,63312],{"class":130,"line":1397},[128,63313,63314],{"class":138},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[128,63316,63317],{"class":130,"line":1417},[128,63318,63319],{"class":138},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[128,63321,63322],{"class":130,"line":1437},[128,63323,63324],{"class":138},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[128,63326,63327],{"class":130,"line":1458},[128,63328,63329],{"class":138},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[128,63331,63332],{"class":130,"line":1464},[128,63333,56491],{"class":138},[128,63335,63336],{"class":130,"line":1469},[128,63337,63338],{"class":138},"    \u002F\u002F 获取元素\n",[128,63340,63341],{"class":130,"line":1474},[128,63342,63343],{"class":138},"    const img = document.querySelector('.slider-wrapper img')\n",[128,63345,63346],{"class":130,"line":1484},[128,63347,63348],{"class":138},"    const p = document.querySelector('.slider-footer p')\n",[128,63350,63351],{"class":130,"line":1493},[128,63352,63353],{"class":138},"    const footer = document.querySelector('.slider-footer')\n",[128,63355,63356],{"class":130,"line":1505},[128,63357,63358],{"class":138},"    \u002F\u002F 1. 右按钮业务\n",[128,63360,63361],{"class":130,"line":1510},[128,63362,63363],{"class":138},"    \u002F\u002F 1.1 获取右侧按钮 \n",[128,63365,63366],{"class":130,"line":1515},[128,63367,63368],{"class":138},"    const next = document.querySelector('.next')\n",[128,63370,63371],{"class":130,"line":1543},[128,63372,63373],{"class":138},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[128,63375,63376],{"class":130,"line":1554},[128,63377,63378],{"class":138},"    \u002F\u002F 1.2 注册点击事件\n",[128,63380,63381],{"class":130,"line":1560},[128,63382,160],{"emptyLinePlaceholder":159},[128,63384,63385],{"class":130,"line":1565},[128,63386,63387],{"class":138},"    next.addEventListener('click', function () {\n",[128,63389,63390],{"class":130,"line":1570},[128,63391,63392],{"class":138},"      \u002F\u002F console.log(11)\n",[128,63394,63395],{"class":130,"line":1580},[128,63396,63397],{"class":138},"      i++\n",[128,63399,63400],{"class":130,"line":1591},[128,63401,63402],{"class":138},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[128,63404,63405],{"class":130,"line":1596},[128,63406,63407],{"class":138},"      \u002F\u002F if (i >= 8) {\n",[128,63409,63410],{"class":130,"line":1605},[128,63411,63412],{"class":138},"      \u002F\u002F   i = 0\n",[128,63414,63415],{"class":130,"line":1611},[128,63416,63417],{"class":138},"      \u002F\u002F }\n",[128,63419,63420],{"class":130,"line":1628},[128,63421,63422],{"class":138},"      i = i >= data.length ? 0 : i\n",[128,63424,63425],{"class":130,"line":1633},[128,63426,63427],{"class":138},"      \u002F\u002F 1.3 得到对应的对象\n",[128,63429,63430],{"class":130,"line":1648},[128,63431,63432],{"class":138},"      \u002F\u002F console.log(data[i])\n",[128,63434,63435],{"class":130,"line":1654},[128,63436,63437],{"class":138},"      \u002F\u002F 调用函数\n",[128,63439,63440],{"class":130,"line":1669},[128,63441,63442],{"class":138},"      toggle()\n",[128,63444,63445],{"class":130,"line":1675},[128,63446,917],{"class":138},[128,63448,63449],{"class":130,"line":1689},[128,63450,160],{"emptyLinePlaceholder":159},[128,63452,63453],{"class":130,"line":1695},[128,63454,63455],{"class":138},"    \u002F\u002F 2. 左侧按钮业务\n",[128,63457,63458],{"class":130,"line":1709},[128,63459,63460],{"class":138},"    \u002F\u002F 2.1 获取左侧按钮 \n",[128,63462,63463],{"class":130,"line":1715},[128,63464,63465],{"class":138},"    const prev = document.querySelector('.prev')\n",[128,63467,63468],{"class":130,"line":1729},[128,63469,63378],{"class":138},[128,63471,63472],{"class":130,"line":1735},[128,63473,63474],{"class":138},"    prev.addEventListener('click', function () {\n",[128,63476,63477],{"class":130,"line":1749},[128,63478,63479],{"class":138},"      i--\n",[128,63481,63482],{"class":130,"line":1761},[128,63483,63484],{"class":138},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[128,63486,63487],{"class":130,"line":1767},[128,63488,63489],{"class":138},"      \u002F\u002F if (i \u003C 0) {\n",[128,63491,63492],{"class":130,"line":1775},[128,63493,63494],{"class":138},"      \u002F\u002F   i = 7\n",[128,63496,63497],{"class":130,"line":1787},[128,63498,63417],{"class":138},[128,63500,63501],{"class":130,"line":1792},[128,63502,63503],{"class":138},"      i = i \u003C 0 ? data.length - 1 : i\n",[128,63505,63506],{"class":130,"line":1797},[128,63507,63427],{"class":138},[128,63509,63510],{"class":130,"line":1814},[128,63511,63432],{"class":138},[128,63513,63514],{"class":130,"line":36751},[128,63515,63437],{"class":138},[128,63517,63518],{"class":130,"line":36757},[128,63519,63442],{"class":138},[128,63521,63522],{"class":130,"line":36768},[128,63523,917],{"class":138},[128,63525,63526],{"class":130,"line":36774},[128,63527,160],{"emptyLinePlaceholder":159},[128,63529,63530],{"class":130,"line":36780},[128,63531,63532],{"class":138},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[128,63534,63535],{"class":130,"line":36786},[128,63536,63537],{"class":138},"    function toggle() {\n",[128,63539,63540],{"class":130,"line":36804},[128,63541,63542],{"class":138},"      \u002F\u002F 1.4 渲染对应的数据\n",[128,63544,63545],{"class":130,"line":36818},[128,63546,63547],{"class":138},"      img.src = data[i].url\n",[128,63549,63550],{"class":130,"line":36827},[128,63551,63552],{"class":138},"      p.innerHTML = data[i].title\n",[128,63554,63555],{"class":130,"line":36836},[128,63556,63557],{"class":138},"      footer.style.backgroundColor = data[i].color\n",[128,63559,63560],{"class":130,"line":36845},[128,63561,63562],{"class":138},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[128,63564,63565],{"class":130,"line":36854},[128,63566,63567],{"class":138},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[128,63569,63570],{"class":130,"line":36859},[128,63571,63572],{"class":138},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[128,63574,63575],{"class":130,"line":36865},[128,63576,5773],{"class":138},[128,63578,63579],{"class":130,"line":36873},[128,63580,160],{"emptyLinePlaceholder":159},[128,63582,63583],{"class":130,"line":36878},[128,63584,63585],{"class":138},"    \u002F\u002F 3. 自动播放模块\n",[128,63587,63588],{"class":130,"line":36884},[128,63589,63590],{"class":138},"    let timerId = setInterval(function () {\n",[128,63592,63593],{"class":130,"line":36895},[128,63594,63595],{"class":138},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[128,63597,63598],{"class":130,"line":36901},[128,63599,63600],{"class":138},"      next.click()\n",[128,63602,63603],{"class":130,"line":36921},[128,63604,63605],{"class":138},"    }, 1000)\n",[128,63607,63608],{"class":130,"line":36927},[128,63609,160],{"emptyLinePlaceholder":159},[128,63611,63612],{"class":130,"line":36933},[128,63613,63614],{"class":138},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[128,63616,63617],{"class":130,"line":36939},[128,63618,63619],{"class":138},"    const slider = document.querySelector('.slider')\n",[128,63621,63622],{"class":130,"line":36956},[128,63623,63624],{"class":138},"    \u002F\u002F 注册事件\n",[128,63626,63627],{"class":130,"line":36962},[128,63628,63629],{"class":138},"    slider.addEventListener('mouseenter', function () {\n",[128,63631,63632],{"class":130,"line":36968},[128,63633,63634],{"class":138},"      \u002F\u002F 停止定时器\n",[128,63636,63637],{"class":130,"line":36974},[128,63638,63639],{"class":138},"      clearInterval(timerId)\n",[128,63641,63642],{"class":130,"line":36980},[128,63643,917],{"class":138},[128,63645,63646],{"class":130,"line":36986},[128,63647,160],{"emptyLinePlaceholder":159},[128,63649,63650],{"class":130,"line":37013},[128,63651,63652],{"class":138},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[128,63654,63655],{"class":130,"line":37037},[128,63656,63624],{"class":138},[128,63658,63659],{"class":130,"line":37043},[128,63660,63661],{"class":138},"    slider.addEventListener('mouseleave', function () {\n",[128,63663,63664],{"class":130,"line":37049},[128,63665,63634],{"class":138},[128,63667,63668],{"class":130,"line":37055},[128,63669,63670],{"class":138},"      if (timerId) clearInterval(timerId)\n",[128,63672,63673],{"class":130,"line":37066},[128,63674,63675],{"class":138},"      \u002F\u002F 开启定时器\n",[128,63677,63678],{"class":130,"line":37077},[128,63679,63680],{"class":138},"      timerId = setInterval(function () {\n",[128,63682,63683],{"class":130,"line":37083},[128,63684,63685],{"class":138},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[128,63687,63688],{"class":130,"line":37100},[128,63689,63690],{"class":138},"        next.click()\n",[128,63692,63693],{"class":130,"line":37123},[128,63694,63695],{"class":138},"      }, 1000)\n",[128,63697,63698],{"class":130,"line":37146},[128,63699,917],{"class":138},[128,63701,63702,63704,63706],{"class":130,"line":37152},[128,63703,55799],{"class":138},[128,63705,55196],{"class":54685},[128,63707,54692],{"class":138},[128,63709,63710,63712,63714],{"class":130,"line":37157},[128,63711,55168],{"class":138},[128,63713,55183],{"class":54685},[128,63715,54692],{"class":138},[128,63717,63718],{"class":130,"line":37166},[128,63719,160],{"emptyLinePlaceholder":159},[128,63721,63722,63724,63726],{"class":130,"line":37176},[128,63723,55168],{"class":138},[128,63725,54020],{"class":54685},[128,63727,54692],{"class":138},[25485,63729,63731],{"id":63730},"_3252-焦点事件","3.2.5.2 焦点事件",[19,63733,63734],{},"小米搜索框案例：",[106,63736,63738],{"className":54018,"code":63737,"language":54020,"meta":112,"style":112},"\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",[114,63739,63740,63750,63764,63768,63776,63790,63810,63830,63842,63850,63856,63866,63876,63888,63892,63896,63903,63907,63918,63922,63926,63933,63944,63957,63971,63975,63979,63987,63999,64011,64025,64038,64051,64069,64080,64084,64088,64097,64114,64118,64122,64129,64139,64149,64160,64173,64185,64201,64212,64224,64228,64232,64240,64251,64268,64280,64292,64303,64307,64311,64322,64333,64337,64345,64349,64357,64361,64369,64384,64407,64422,64453,64480,64507,64534,64561,64588,64615,64624,64632,64640,64645,64665,64685,64690,64695,64713,64718,64728,64733,64747,64752,64757,64774,64783,64795,64799,64807,64815,64819],{"__ignoreMap":112},[128,63741,63742,63744,63746,63748],{"class":130,"line":131},[128,63743,54682],{"class":138},[128,63745,54686],{"class":54685},[128,63747,54689],{"class":199},[128,63749,54692],{"class":138},[128,63751,63752,63754,63756,63758,63760,63762],{"class":130,"line":142},[128,63753,4657],{"class":138},[128,63755,54020],{"class":54685},[128,63757,54701],{"class":199},[128,63759,270],{"class":138},[128,63761,54706],{"class":176},[128,63763,54692],{"class":138},[128,63765,63766],{"class":130,"line":156},[128,63767,160],{"emptyLinePlaceholder":159},[128,63769,63770,63772,63774],{"class":130,"line":163},[128,63771,4657],{"class":138},[128,63773,54719],{"class":54685},[128,63775,54692],{"class":138},[128,63777,63778,63780,63782,63784,63786,63788],{"class":130,"line":183},[128,63779,54726],{"class":138},[128,63781,54729],{"class":54685},[128,63783,54732],{"class":199},[128,63785,270],{"class":138},[128,63787,54737],{"class":176},[128,63789,54692],{"class":138},[128,63791,63792,63794,63796,63798,63800,63802,63804,63806,63808],{"class":130,"line":188},[128,63793,54726],{"class":138},[128,63795,54729],{"class":54685},[128,63797,54748],{"class":199},[128,63799,270],{"class":138},[128,63801,54753],{"class":176},[128,63803,54756],{"class":199},[128,63805,270],{"class":138},[128,63807,54761],{"class":176},[128,63809,54692],{"class":138},[128,63811,63812,63814,63816,63818,63820,63822,63824,63826,63828],{"class":130,"line":193},[128,63813,54726],{"class":138},[128,63815,54729],{"class":54685},[128,63817,18442],{"class":199},[128,63819,270],{"class":138},[128,63821,54776],{"class":176},[128,63823,54756],{"class":199},[128,63825,270],{"class":138},[128,63827,54783],{"class":176},[128,63829,54692],{"class":138},[128,63831,63832,63834,63836,63838,63840],{"class":130,"line":206},[128,63833,54726],{"class":138},[128,63835,2752],{"class":54685},[128,63837,54794],{"class":138},[128,63839,2752],{"class":54685},[128,63841,54692],{"class":138},[128,63843,63844,63846,63848],{"class":130,"line":221},[128,63845,54726],{"class":138},[128,63847,3659],{"class":54685},[128,63849,54692],{"class":138},[128,63851,63852,63854],{"class":130,"line":230},[128,63853,54811],{"class":54685},[128,63855,1959],{"class":138},[128,63857,63858,63860,63862,63864],{"class":130,"line":235},[128,63859,54818],{"class":166},[128,63861,1967],{"class":138},[128,63863,2452],{"class":166},[128,63865,4905],{"class":138},[128,63867,63868,63870,63872,63874],{"class":130,"line":244},[128,63869,54829],{"class":166},[128,63871,1967],{"class":138},[128,63873,2452],{"class":166},[128,63875,4905],{"class":138},[128,63877,63878,63881,63883,63886],{"class":130,"line":287},[128,63879,63880],{"class":166},"            box-sizing",[128,63882,1967],{"class":138},[128,63884,63885],{"class":166},"border-box",[128,63887,4905],{"class":138},[128,63889,63890],{"class":130,"line":301},[128,63891,2014],{"class":138},[128,63893,63894],{"class":130,"line":310},[128,63895,160],{"emptyLinePlaceholder":159},[128,63897,63898,63901],{"class":130,"line":323},[128,63899,63900],{"class":54685},"        ul",[128,63902,1959],{"class":138},[128,63904,63905],{"class":130,"line":330},[128,63906,160],{"emptyLinePlaceholder":159},[128,63908,63909,63912,63914,63916],{"class":130,"line":335},[128,63910,63911],{"class":166},"            list-style",[128,63913,1967],{"class":138},[128,63915,58118],{"class":166},[128,63917,4905],{"class":138},[128,63919,63920],{"class":130,"line":340},[128,63921,2014],{"class":138},[128,63923,63924],{"class":130,"line":351},[128,63925,160],{"emptyLinePlaceholder":159},[128,63927,63928,63931],{"class":130,"line":384},[128,63929,63930],{"class":199},"        .mi",[128,63932,1959],{"class":138},[128,63934,63935,63938,63940,63942],{"class":130,"line":414},[128,63936,63937],{"class":166},"            position",[128,63939,1967],{"class":138},[128,63941,58145],{"class":166},[128,63943,4905],{"class":138},[128,63945,63946,63948,63950,63953,63955],{"class":130,"line":419},[128,63947,54867],{"class":166},[128,63949,1967],{"class":138},[128,63951,63952],{"class":166},"223",[128,63954,54875],{"class":134},[128,63956,4905],{"class":138},[128,63958,63959,63961,63963,63965,63967,63969],{"class":130,"line":424},[128,63960,54818],{"class":166},[128,63962,1967],{"class":138},[128,63964,4061],{"class":166},[128,63966,54875],{"class":134},[128,63968,54939],{"class":166},[128,63970,4905],{"class":138},[128,63972,63973],{"class":130,"line":434},[128,63974,2014],{"class":138},[128,63976,63977],{"class":130,"line":447},[128,63978,160],{"emptyLinePlaceholder":159},[128,63980,63981,63983,63985],{"class":130,"line":459},[128,63982,63930],{"class":199},[128,63984,772],{"class":54685},[128,63986,1959],{"class":138},[128,63988,63989,63991,63993,63995,63997],{"class":130,"line":471},[128,63990,54867],{"class":166},[128,63992,1967],{"class":138},[128,63994,63952],{"class":166},[128,63996,54875],{"class":134},[128,63998,4905],{"class":138},[128,64000,64001,64003,64005,64007,64009],{"class":130,"line":483},[128,64002,54882],{"class":166},[128,64004,1967],{"class":138},[128,64006,4356],{"class":166},[128,64008,54875],{"class":134},[128,64010,4905],{"class":138},[128,64012,64013,64015,64017,64019,64021,64023],{"class":130,"line":495},[128,64014,54829],{"class":166},[128,64016,1967],{"class":138},[128,64018,2452],{"class":166},[128,64020,5625],{"class":166},[128,64022,54875],{"class":134},[128,64024,4905],{"class":138},[128,64026,64027,64030,64032,64034,64036],{"class":130,"line":507},[128,64028,64029],{"class":166},"            font-size",[128,64031,1967],{"class":138},[128,64033,4298],{"class":166},[128,64035,54875],{"class":134},[128,64037,4905],{"class":138},[128,64039,64040,64043,64045,64047,64049],{"class":130,"line":519},[128,64041,64042],{"class":166},"            line-height",[128,64044,1967],{"class":138},[128,64046,4356],{"class":166},[128,64048,54875],{"class":134},[128,64050,4905],{"class":138},[128,64052,64053,64056,64058,64060,64062,64064,64067],{"class":130,"line":524},[128,64054,64055],{"class":166},"            border",[128,64057,1967],{"class":138},[128,64059,2592],{"class":166},[128,64061,54875],{"class":134},[128,64063,54904],{"class":166},[128,64065,64066],{"class":166}," #e0e0e0",[128,64068,4905],{"class":138},[128,64070,64071,64074,64076,64078],{"class":130,"line":529},[128,64072,64073],{"class":166},"            outline",[128,64075,1967],{"class":138},[128,64077,58118],{"class":166},[128,64079,4905],{"class":138},[128,64081,64082],{"class":130,"line":540},[128,64083,2014],{"class":138},[128,64085,64086],{"class":130,"line":555},[128,64087,160],{"emptyLinePlaceholder":159},[128,64089,64090,64092,64095],{"class":130,"line":576},[128,64091,63930],{"class":199},[128,64093,64094],{"class":199}," .search",[128,64096,1959],{"class":138},[128,64098,64099,64101,64103,64105,64107,64109,64112],{"class":130,"line":584},[128,64100,64055],{"class":166},[128,64102,1967],{"class":138},[128,64104,2592],{"class":166},[128,64106,54875],{"class":134},[128,64108,54904],{"class":166},[128,64110,64111],{"class":166}," #ff6700",[128,64113,4905],{"class":138},[128,64115,64116],{"class":130,"line":593},[128,64117,2014],{"class":138},[128,64119,64120],{"class":130,"line":598},[128,64121,160],{"emptyLinePlaceholder":159},[128,64123,64124,64127],{"class":130,"line":603},[128,64125,64126],{"class":199},"        .result-list",[128,64128,1959],{"class":138},[128,64130,64131,64133,64135,64137],{"class":130,"line":614},[128,64132,54855],{"class":166},[128,64134,1967],{"class":138},[128,64136,58118],{"class":166},[128,64138,4905],{"class":138},[128,64140,64141,64143,64145,64147],{"class":130,"line":625},[128,64142,63937],{"class":166},[128,64144,1967],{"class":138},[128,64146,58212],{"class":166},[128,64148,4905],{"class":138},[128,64150,64151,64154,64156,64158],{"class":130,"line":633},[128,64152,64153],{"class":166},"            left",[128,64155,1967],{"class":138},[128,64157,2452],{"class":166},[128,64159,4905],{"class":138},[128,64161,64162,64165,64167,64169,64171],{"class":130,"line":649},[128,64163,64164],{"class":166},"            top",[128,64166,1967],{"class":138},[128,64168,4356],{"class":166},[128,64170,54875],{"class":134},[128,64172,4905],{"class":138},[128,64174,64175,64177,64179,64181,64183],{"class":130,"line":660},[128,64176,54867],{"class":166},[128,64178,1967],{"class":138},[128,64180,63952],{"class":166},[128,64182,54875],{"class":134},[128,64184,4905],{"class":138},[128,64186,64187,64189,64191,64193,64195,64197,64199],{"class":130,"line":673},[128,64188,64055],{"class":166},[128,64190,1967],{"class":138},[128,64192,2592],{"class":166},[128,64194,54875],{"class":134},[128,64196,54904],{"class":166},[128,64198,64111],{"class":166},[128,64200,4905],{"class":138},[128,64202,64203,64206,64208,64210],{"class":130,"line":678},[128,64204,64205],{"class":166},"            border-top",[128,64207,1967],{"class":138},[128,64209,2452],{"class":166},[128,64211,4905],{"class":138},[128,64213,64214,64217,64219,64222],{"class":130,"line":683},[128,64215,64216],{"class":166},"            background",[128,64218,1967],{"class":138},[128,64220,64221],{"class":166},"#fff",[128,64223,4905],{"class":138},[128,64225,64226],{"class":130,"line":693},[128,64227,2014],{"class":138},[128,64229,64230],{"class":130,"line":702},[128,64231,160],{"emptyLinePlaceholder":159},[128,64233,64234,64236,64238],{"class":130,"line":709},[128,64235,64126],{"class":199},[128,64237,5010],{"class":54685},[128,64239,1959],{"class":138},[128,64241,64242,64244,64246,64249],{"class":130,"line":723},[128,64243,54855],{"class":166},[128,64245,1967],{"class":138},[128,64247,64248],{"class":166},"block",[128,64250,4905],{"class":138},[128,64252,64253,64255,64257,64259,64261,64264,64266],{"class":130,"line":732},[128,64254,54829],{"class":166},[128,64256,1967],{"class":138},[128,64258,4094],{"class":166},[128,64260,54875],{"class":134},[128,64262,64263],{"class":166}," 15",[128,64265,54875],{"class":134},[128,64267,4905],{"class":138},[128,64269,64270,64272,64274,64276,64278],{"class":130,"line":744},[128,64271,64029],{"class":166},[128,64273,1967],{"class":138},[128,64275,4247],{"class":166},[128,64277,54875],{"class":134},[128,64279,4905],{"class":138},[128,64281,64282,64285,64287,64290],{"class":130,"line":749},[128,64283,64284],{"class":166},"            color",[128,64286,1967],{"class":138},[128,64288,64289],{"class":166},"#424242",[128,64291,4905],{"class":138},[128,64293,64294,64297,64299,64301],{"class":130,"line":754},[128,64295,64296],{"class":166},"            text-decoration",[128,64298,1967],{"class":138},[128,64300,58118],{"class":166},[128,64302,4905],{"class":138},[128,64304,64305],{"class":130,"line":764},[128,64306,2014],{"class":138},[128,64308,64309],{"class":130,"line":782},[128,64310,160],{"emptyLinePlaceholder":159},[128,64312,64313,64315,64317,64320],{"class":130,"line":787},[128,64314,64126],{"class":199},[128,64316,5010],{"class":54685},[128,64318,64319],{"class":199},":hover",[128,64321,1959],{"class":138},[128,64323,64324,64326,64328,64331],{"class":130,"line":795},[128,64325,55023],{"class":166},[128,64327,1967],{"class":138},[128,64329,64330],{"class":166},"#eee",[128,64332,4905],{"class":138},[128,64334,64335],{"class":130,"line":807},[128,64336,2014],{"class":138},[128,64338,64339,64341,64343],{"class":130,"line":813},[128,64340,55159],{"class":138},[128,64342,3659],{"class":54685},[128,64344,54692],{"class":138},[128,64346,64347],{"class":130,"line":818},[128,64348,160],{"emptyLinePlaceholder":159},[128,64350,64351,64353,64355],{"class":130,"line":835},[128,64352,55168],{"class":138},[128,64354,54719],{"class":54685},[128,64356,54692],{"class":138},[128,64358,64359],{"class":130,"line":851},[128,64360,160],{"emptyLinePlaceholder":159},[128,64362,64363,64365,64367],{"class":130,"line":867},[128,64364,4657],{"class":138},[128,64366,55183],{"class":54685},[128,64368,54692],{"class":138},[128,64370,64371,64373,64375,64377,64379,64382],{"class":130,"line":872},[128,64372,54726],{"class":138},[128,64374,54994],{"class":54685},[128,64376,56868],{"class":199},[128,64378,270],{"class":138},[128,64380,64381],{"class":176},"\"mi\"",[128,64383,54692],{"class":138},[128,64385,64386,64388,64390,64392,64394,64397,64400,64402,64405],{"class":130,"line":878},[128,64387,58683],{"class":138},[128,64389,643],{"class":54685},[128,64391,57205],{"class":199},[128,64393,270],{"class":138},[128,64395,64396],{"class":176},"\"search\"",[128,64398,64399],{"class":199}," placeholder",[128,64401,270],{"class":138},[128,64403,64404],{"class":176},"\"小米笔记本\"",[128,64406,54692],{"class":138},[128,64408,64409,64411,64413,64415,64417,64420],{"class":130,"line":887},[128,64410,58683],{"class":138},[128,64412,4752],{"class":54685},[128,64414,56868],{"class":199},[128,64416,270],{"class":138},[128,64418,64419],{"class":176},"\"result-list\"",[128,64421,54692],{"class":138},[128,64423,64424,64427,64429,64432,64434,64437,64439,64442,64445,64447,64449,64451],{"class":130,"line":896},[128,64425,64426],{"class":138},"            \u003C",[128,64428,29],{"class":54685},[128,64430,64431],{"class":138},">\u003C",[128,64433,3989],{"class":54685},[128,64435,64436],{"class":199}," href",[128,64438,270],{"class":138},[128,64440,64441],{"class":176},"\"#\"",[128,64443,64444],{"class":138},">全部商品\u003C\u002F",[128,64446,3989],{"class":54685},[128,64448,58695],{"class":138},[128,64450,29],{"class":54685},[128,64452,54692],{"class":138},[128,64454,64455,64457,64459,64461,64463,64465,64467,64469,64472,64474,64476,64478],{"class":130,"line":905},[128,64456,64426],{"class":138},[128,64458,29],{"class":54685},[128,64460,64431],{"class":138},[128,64462,3989],{"class":54685},[128,64464,64436],{"class":199},[128,64466,270],{"class":138},[128,64468,64441],{"class":176},[128,64470,64471],{"class":138},">小米11\u003C\u002F",[128,64473,3989],{"class":54685},[128,64475,58695],{"class":138},[128,64477,29],{"class":54685},[128,64479,54692],{"class":138},[128,64481,64482,64484,64486,64488,64490,64492,64494,64496,64499,64501,64503,64505],{"class":130,"line":914},[128,64483,64426],{"class":138},[128,64485,29],{"class":54685},[128,64487,64431],{"class":138},[128,64489,3989],{"class":54685},[128,64491,64436],{"class":199},[128,64493,270],{"class":138},[128,64495,64441],{"class":176},[128,64497,64498],{"class":138},">小米10S\u003C\u002F",[128,64500,3989],{"class":54685},[128,64502,58695],{"class":138},[128,64504,29],{"class":54685},[128,64506,54692],{"class":138},[128,64508,64509,64511,64513,64515,64517,64519,64521,64523,64526,64528,64530,64532],{"class":130,"line":920},[128,64510,64426],{"class":138},[128,64512,29],{"class":54685},[128,64514,64431],{"class":138},[128,64516,3989],{"class":54685},[128,64518,64436],{"class":199},[128,64520,270],{"class":138},[128,64522,64441],{"class":176},[128,64524,64525],{"class":138},">小米笔记本\u003C\u002F",[128,64527,3989],{"class":54685},[128,64529,58695],{"class":138},[128,64531,29],{"class":54685},[128,64533,54692],{"class":138},[128,64535,64536,64538,64540,64542,64544,64546,64548,64550,64553,64555,64557,64559],{"class":130,"line":926},[128,64537,64426],{"class":138},[128,64539,29],{"class":54685},[128,64541,64431],{"class":138},[128,64543,3989],{"class":54685},[128,64545,64436],{"class":199},[128,64547,270],{"class":138},[128,64549,64441],{"class":176},[128,64551,64552],{"class":138},">小米手机\u003C\u002F",[128,64554,3989],{"class":54685},[128,64556,58695],{"class":138},[128,64558,29],{"class":54685},[128,64560,54692],{"class":138},[128,64562,64563,64565,64567,64569,64571,64573,64575,64577,64580,64582,64584,64586],{"class":130,"line":938},[128,64564,64426],{"class":138},[128,64566,29],{"class":54685},[128,64568,64431],{"class":138},[128,64570,3989],{"class":54685},[128,64572,64436],{"class":199},[128,64574,270],{"class":138},[128,64576,64441],{"class":176},[128,64578,64579],{"class":138},">黑鲨4\u003C\u002F",[128,64581,3989],{"class":54685},[128,64583,58695],{"class":138},[128,64585,29],{"class":54685},[128,64587,54692],{"class":138},[128,64589,64590,64592,64594,64596,64598,64600,64602,64604,64607,64609,64611,64613],{"class":130,"line":943},[128,64591,64426],{"class":138},[128,64593,29],{"class":54685},[128,64595,64431],{"class":138},[128,64597,3989],{"class":54685},[128,64599,64436],{"class":199},[128,64601,270],{"class":138},[128,64603,64441],{"class":176},[128,64605,64606],{"class":138},">空调\u003C\u002F",[128,64608,3989],{"class":54685},[128,64610,58695],{"class":138},[128,64612,29],{"class":54685},[128,64614,54692],{"class":138},[128,64616,64617,64620,64622],{"class":130,"line":948},[128,64618,64619],{"class":138},"        \u003C\u002F",[128,64621,4752],{"class":54685},[128,64623,54692],{"class":138},[128,64625,64626,64628,64630],{"class":130,"line":958},[128,64627,55159],{"class":138},[128,64629,54994],{"class":54685},[128,64631,54692],{"class":138},[128,64633,64634,64636,64638],{"class":130,"line":974},[128,64635,54726],{"class":138},[128,64637,55196],{"class":54685},[128,64639,54692],{"class":138},[128,64641,64642],{"class":130,"line":985},[128,64643,64644],{"class":3814},"        \u002F\u002F 1. 获取元素\n",[128,64646,64647,64650,64652,64654,64656,64658,64660,64663],{"class":130,"line":990},[128,64648,64649],{"class":134},"        const",[128,64651,772],{"class":166},[128,64653,170],{"class":134},[128,64655,57777],{"class":138},[128,64657,57780],{"class":199},[128,64659,253],{"class":138},[128,64661,64662],{"class":176},"'[type=search]'",[128,64664,180],{"class":138},[128,64666,64667,64669,64672,64674,64676,64678,64680,64683],{"class":130,"line":1005},[128,64668,64649],{"class":134},[128,64670,64671],{"class":166}," ul",[128,64673,170],{"class":134},[128,64675,57777],{"class":138},[128,64677,57780],{"class":199},[128,64679,253],{"class":138},[128,64681,64682],{"class":176},"'.result-list'",[128,64684,180],{"class":138},[128,64686,64687],{"class":130,"line":1017},[128,64688,64689],{"class":3814},"        \u002F\u002F console.log(input)\n",[128,64691,64692],{"class":130,"line":1022},[128,64693,64694],{"class":3814},"        \u002F\u002F 2. 监听事件 获得焦点\n",[128,64696,64697,64700,64702,64704,64707,64709,64711],{"class":130,"line":1027},[128,64698,64699],{"class":138},"        input.",[128,64701,61193],{"class":199},[128,64703,253],{"class":138},[128,64705,64706],{"class":176},"'focus'",[128,64708,258],{"class":138},[128,64710,57830],{"class":134},[128,64712,57833],{"class":138},[128,64714,64715],{"class":130,"line":1033},[128,64716,64717],{"class":3814},"            \u002F\u002F ul显示\n",[128,64719,64720,64723,64725],{"class":130,"line":1038},[128,64721,64722],{"class":138},"            ul.style.display ",[128,64724,270],{"class":134},[128,64726,64727],{"class":176}," 'block'\n",[128,64729,64730],{"class":130,"line":1050},[128,64731,64732],{"class":3814},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[128,64734,64735,64738,64740,64742,64745],{"class":130,"line":1055},[128,64736,64737],{"class":138},"            input.classList.",[128,64739,8892],{"class":199},[128,64741,253],{"class":138},[128,64743,64744],{"class":176},"'search'",[128,64746,180],{"class":138},[128,64748,64749],{"class":130,"line":1060},[128,64750,64751],{"class":138},"        })\n",[128,64753,64754],{"class":130,"line":1070},[128,64755,64756],{"class":3814},"        \u002F\u002F 3. 监听事件 失去焦点\n",[128,64758,64759,64761,64763,64765,64768,64770,64772],{"class":130,"line":1086},[128,64760,64699],{"class":138},[128,64762,61193],{"class":199},[128,64764,253],{"class":138},[128,64766,64767],{"class":176},"'blur'",[128,64769,258],{"class":138},[128,64771,57830],{"class":134},[128,64773,57833],{"class":138},[128,64775,64776,64778,64780],{"class":130,"line":1095},[128,64777,64722],{"class":138},[128,64779,270],{"class":134},[128,64781,64782],{"class":176}," 'none'\n",[128,64784,64785,64787,64789,64791,64793],{"class":130,"line":1100},[128,64786,64737],{"class":138},[128,64788,60386],{"class":199},[128,64790,253],{"class":138},[128,64792,64744],{"class":176},[128,64794,180],{"class":138},[128,64796,64797],{"class":130,"line":1113},[128,64798,64751],{"class":138},[128,64800,64801,64803,64805],{"class":130,"line":1124},[128,64802,55159],{"class":138},[128,64804,55196],{"class":54685},[128,64806,54692],{"class":138},[128,64808,64809,64811,64813],{"class":130,"line":1129},[128,64810,55168],{"class":138},[128,64812,55183],{"class":54685},[128,64814,54692],{"class":138},[128,64816,64817],{"class":130,"line":1134},[128,64818,160],{"emptyLinePlaceholder":159},[128,64820,64821,64823,64825],{"class":130,"line":1150},[128,64822,55168],{"class":138},[128,64824,54020],{"class":54685},[128,64826,54692],{"class":138},[25485,64828,64830],{"id":64829},"_3253-键盘事件","3.2.5.3 键盘事件",[19,64832,64833],{},"评论字数统计案例",[19,64835,64836],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,64838,64839],{},"牢记focus伪类选择器",[54729,64841],{"charSet":64842},"UTF-8",[54729,64844],{"name":64845,"content":64846},"viewport","width=device-width, initial-scale=1.0",[2752,64848,64849],{},"Document",[3659,64851,64852],{},"\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",[643,64854],{"type":111},[4752,64856,64857,64860],{},[29,64858,64859],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[29,64861,64862],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[106,64864,64866],{"className":54018,"code":64865,"language":54020,"meta":112,"style":112},"\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",[114,64867,64868,64878,64892,64896,64904,64918,64938,64958,64971,64979,64986,64999,65013,65023,65033,65037,65041,65048,65060,65072,65084,65096,65125,65138,65142,65146,65155,65166,65178,65189,65200,65212,65223,65235,65251,65263,65267,65271,65282,65293,65303,65315,65319,65323,65331,65342,65352,65363,65375,65388,65400,65412,65416,65420,65429,65441,65452,65465,65476,65490,65494,65498,65505,65517,65529,65539,65543,65547,65556,65568,65578,65582,65586,65597,65607,65626,65639,65643,65647,65657,65667,65671,65675,65686,65697,65709,65721,65725,65729,65740,65751,65765,65769,65773,65784,65794,65806,65810,65818,65826,65830,65838,65853,65872,65912,65925,65933,65947,65967,65975,65990,66013,66031,66046,66065,66085,66105,66113,66121,66129,66137,66157,66177,66182,66199,66208,66212,66217,66233,66241,66245,66250,66267,66272,66297,66301,66305,66310,66315,66323,66331,66335],{"__ignoreMap":112},[128,64869,64870,64872,64874,64876],{"class":130,"line":131},[128,64871,54682],{"class":138},[128,64873,54686],{"class":54685},[128,64875,54689],{"class":199},[128,64877,54692],{"class":138},[128,64879,64880,64882,64884,64886,64888,64890],{"class":130,"line":142},[128,64881,4657],{"class":138},[128,64883,54020],{"class":54685},[128,64885,54701],{"class":199},[128,64887,270],{"class":138},[128,64889,54706],{"class":176},[128,64891,54692],{"class":138},[128,64893,64894],{"class":130,"line":156},[128,64895,160],{"emptyLinePlaceholder":159},[128,64897,64898,64900,64902],{"class":130,"line":163},[128,64899,4657],{"class":138},[128,64901,54719],{"class":54685},[128,64903,54692],{"class":138},[128,64905,64906,64908,64910,64912,64914,64916],{"class":130,"line":183},[128,64907,55526],{"class":138},[128,64909,54729],{"class":54685},[128,64911,54732],{"class":199},[128,64913,270],{"class":138},[128,64915,54737],{"class":176},[128,64917,54692],{"class":138},[128,64919,64920,64922,64924,64926,64928,64930,64932,64934,64936],{"class":130,"line":188},[128,64921,55526],{"class":138},[128,64923,54729],{"class":54685},[128,64925,54748],{"class":199},[128,64927,270],{"class":138},[128,64929,54753],{"class":176},[128,64931,54756],{"class":199},[128,64933,270],{"class":138},[128,64935,54761],{"class":176},[128,64937,54692],{"class":138},[128,64939,64940,64942,64944,64946,64948,64950,64952,64954,64956],{"class":130,"line":193},[128,64941,55526],{"class":138},[128,64943,54729],{"class":54685},[128,64945,18442],{"class":199},[128,64947,270],{"class":138},[128,64949,54776],{"class":176},[128,64951,54756],{"class":199},[128,64953,270],{"class":138},[128,64955,54783],{"class":176},[128,64957,54692],{"class":138},[128,64959,64960,64962,64964,64967,64969],{"class":130,"line":206},[128,64961,55526],{"class":138},[128,64963,2752],{"class":54685},[128,64965,64966],{"class":138},">评论回车发布\u003C\u002F",[128,64968,2752],{"class":54685},[128,64970,54692],{"class":138},[128,64972,64973,64975,64977],{"class":130,"line":221},[128,64974,55526],{"class":138},[128,64976,3659],{"class":54685},[128,64978,54692],{"class":138},[128,64980,64981,64984],{"class":130,"line":230},[128,64982,64983],{"class":199},"    .wrapper",[128,64985,1959],{"class":138},[128,64987,64988,64991,64993,64995,64997],{"class":130,"line":235},[128,64989,64990],{"class":166},"      min-width",[128,64992,1967],{"class":138},[128,64994,7554],{"class":166},[128,64996,54875],{"class":134},[128,64998,4905],{"class":138},[128,65000,65001,65004,65006,65009,65011],{"class":130,"line":244},[128,65002,65003],{"class":166},"      max-width",[128,65005,1967],{"class":138},[128,65007,65008],{"class":166},"800",[128,65010,54875],{"class":134},[128,65012,4905],{"class":138},[128,65014,65015,65017,65019,65021],{"class":130,"line":287},[128,65016,58390],{"class":166},[128,65018,1967],{"class":138},[128,65020,54860],{"class":166},[128,65022,4905],{"class":138},[128,65024,65025,65027,65029,65031],{"class":130,"line":301},[128,65026,58401],{"class":166},[128,65028,1967],{"class":138},[128,65030,54963],{"class":166},[128,65032,4905],{"class":138},[128,65034,65035],{"class":130,"line":310},[128,65036,5773],{"class":138},[128,65038,65039],{"class":130,"line":323},[128,65040,160],{"emptyLinePlaceholder":159},[128,65042,65043,65046],{"class":130,"line":330},[128,65044,65045],{"class":199},"    .avatar",[128,65047,1959],{"class":138},[128,65049,65050,65052,65054,65056,65058],{"class":130,"line":335},[128,65051,58152],{"class":166},[128,65053,1967],{"class":138},[128,65055,4356],{"class":166},[128,65057,54875],{"class":134},[128,65059,4905],{"class":138},[128,65061,65062,65064,65066,65068,65070],{"class":130,"line":340},[128,65063,58166],{"class":166},[128,65065,1967],{"class":138},[128,65067,4356],{"class":166},[128,65069,54875],{"class":134},[128,65071,4905],{"class":138},[128,65073,65074,65076,65078,65080,65082],{"class":130,"line":351},[128,65075,58515],{"class":166},[128,65077,1967],{"class":138},[128,65079,4405],{"class":166},[128,65081,4078],{"class":134},[128,65083,4905],{"class":138},[128,65085,65086,65089,65091,65094],{"class":130,"line":384},[128,65087,65088],{"class":166},"      overflow",[128,65090,1967],{"class":138},[128,65092,65093],{"class":166},"hidden",[128,65095,4905],{"class":138},[128,65097,65098,65101,65103,65106,65108,65111,65113,65116,65118,65120,65123],{"class":130,"line":414},[128,65099,65100],{"class":166},"      background",[128,65102,1967],{"class":138},[128,65104,65105],{"class":166},"url",[128,65107,253],{"class":138},[128,65109,65110],{"class":266},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[128,65112,276],{"class":138},[128,65114,65115],{"class":166},"no-repeat",[128,65117,20631],{"class":166},[128,65119,28465],{"class":138},[128,65121,65122],{"class":166},"cover",[128,65124,4905],{"class":138},[128,65126,65127,65130,65132,65134,65136],{"class":130,"line":419},[128,65128,65129],{"class":166},"      margin-right",[128,65131,1967],{"class":138},[128,65133,4449],{"class":166},[128,65135,54875],{"class":134},[128,65137,4905],{"class":138},[128,65139,65140],{"class":130,"line":424},[128,65141,5773],{"class":138},[128,65143,65144],{"class":130,"line":434},[128,65145,160],{"emptyLinePlaceholder":159},[128,65147,65148,65150,65153],{"class":130,"line":447},[128,65149,64983],{"class":199},[128,65151,65152],{"class":54685}," textarea",[128,65154,1959],{"class":138},[128,65156,65157,65160,65162,65164],{"class":130,"line":459},[128,65158,65159],{"class":166},"      outline",[128,65161,1967],{"class":138},[128,65163,58118],{"class":166},[128,65165,4905],{"class":138},[128,65167,65168,65171,65173,65176],{"class":130,"line":471},[128,65169,65170],{"class":166},"      border-color",[128,65172,1967],{"class":138},[128,65174,65175],{"class":166},"transparent",[128,65177,4905],{"class":138},[128,65179,65180,65183,65185,65187],{"class":130,"line":483},[128,65181,65182],{"class":166},"      resize",[128,65184,1967],{"class":138},[128,65186,58118],{"class":166},[128,65188,4905],{"class":138},[128,65190,65191,65193,65195,65198],{"class":130,"line":495},[128,65192,65100],{"class":166},[128,65194,1967],{"class":138},[128,65196,65197],{"class":166},"#f5f5f5",[128,65199,4905],{"class":138},[128,65201,65202,65204,65206,65208,65210],{"class":130,"line":507},[128,65203,58515],{"class":166},[128,65205,1967],{"class":138},[128,65207,4043],{"class":166},[128,65209,54875],{"class":134},[128,65211,4905],{"class":138},[128,65213,65214,65217,65219,65221],{"class":130,"line":519},[128,65215,65216],{"class":166},"      flex",[128,65218,1967],{"class":138},[128,65220,2592],{"class":166},[128,65222,4905],{"class":138},[128,65224,65225,65227,65229,65231,65233],{"class":130,"line":524},[128,65226,58076],{"class":166},[128,65228,1967],{"class":138},[128,65230,4196],{"class":166},[128,65232,54875],{"class":134},[128,65234,4905],{"class":138},[128,65236,65237,65240,65242,65244,65247,65249],{"class":130,"line":529},[128,65238,65239],{"class":166},"      transition",[128,65241,1967],{"class":138},[128,65243,31606],{"class":166},[128,65245,65246],{"class":166}," 0.5",[128,65248,4444],{"class":134},[128,65250,4905],{"class":138},[128,65252,65253,65255,65257,65259,65261],{"class":130,"line":540},[128,65254,58166],{"class":166},[128,65256,1967],{"class":138},[128,65258,4696],{"class":166},[128,65260,54875],{"class":134},[128,65262,4905],{"class":138},[128,65264,65265],{"class":130,"line":555},[128,65266,5773],{"class":138},[128,65268,65269],{"class":130,"line":576},[128,65270,160],{"emptyLinePlaceholder":159},[128,65272,65273,65275,65277,65280],{"class":130,"line":584},[128,65274,64983],{"class":199},[128,65276,65152],{"class":54685},[128,65278,65279],{"class":199},":focus",[128,65281,1959],{"class":138},[128,65283,65284,65286,65288,65291],{"class":130,"line":593},[128,65285,65170],{"class":166},[128,65287,1967],{"class":138},[128,65289,65290],{"class":166},"#e4e4e4",[128,65292,4905],{"class":138},[128,65294,65295,65297,65299,65301],{"class":130,"line":598},[128,65296,65100],{"class":166},[128,65298,1967],{"class":138},[128,65300,64221],{"class":166},[128,65302,4905],{"class":138},[128,65304,65305,65307,65309,65311,65313],{"class":130,"line":603},[128,65306,58166],{"class":166},[128,65308,1967],{"class":138},[128,65310,4405],{"class":166},[128,65312,54875],{"class":134},[128,65314,4905],{"class":138},[128,65316,65317],{"class":130,"line":614},[128,65318,5773],{"class":138},[128,65320,65321],{"class":130,"line":625},[128,65322,160],{"emptyLinePlaceholder":159},[128,65324,65325,65327,65329],{"class":130,"line":633},[128,65326,64983],{"class":199},[128,65328,60847],{"class":54685},[128,65330,1959],{"class":138},[128,65332,65333,65335,65337,65340],{"class":130,"line":649},[128,65334,65100],{"class":166},[128,65336,1967],{"class":138},[128,65338,65339],{"class":166},"#00aeec",[128,65341,4905],{"class":138},[128,65343,65344,65346,65348,65350],{"class":130,"line":660},[128,65345,60796],{"class":166},[128,65347,1967],{"class":138},[128,65349,64221],{"class":166},[128,65351,4905],{"class":138},[128,65353,65354,65357,65359,65361],{"class":130,"line":673},[128,65355,65356],{"class":166},"      border",[128,65358,1967],{"class":138},[128,65360,58118],{"class":166},[128,65362,4905],{"class":138},[128,65364,65365,65367,65369,65371,65373],{"class":130,"line":678},[128,65366,58515],{"class":166},[128,65368,1967],{"class":138},[128,65370,4043],{"class":166},[128,65372,54875],{"class":134},[128,65374,4905],{"class":138},[128,65376,65377,65380,65382,65384,65386],{"class":130,"line":683},[128,65378,65379],{"class":166},"      margin-left",[128,65381,1967],{"class":138},[128,65383,4196],{"class":166},[128,65385,54875],{"class":134},[128,65387,4905],{"class":138},[128,65389,65390,65392,65394,65396,65398],{"class":130,"line":693},[128,65391,58152],{"class":166},[128,65393,1967],{"class":138},[128,65395,4106],{"class":166},[128,65397,54875],{"class":134},[128,65399,4905],{"class":138},[128,65401,65402,65405,65407,65410],{"class":130,"line":702},[128,65403,65404],{"class":166},"      cursor",[128,65406,1967],{"class":138},[128,65408,65409],{"class":166},"pointer",[128,65411,4905],{"class":138},[128,65413,65414],{"class":130,"line":709},[128,65415,5773],{"class":138},[128,65417,65418],{"class":130,"line":723},[128,65419,160],{"emptyLinePlaceholder":159},[128,65421,65422,65424,65427],{"class":130,"line":732},[128,65423,64983],{"class":199},[128,65425,65426],{"class":199}," .total",[128,65428,1959],{"class":138},[128,65430,65431,65433,65435,65437,65439],{"class":130,"line":744},[128,65432,65129],{"class":166},[128,65434,1967],{"class":138},[128,65436,4361],{"class":166},[128,65438,54875],{"class":134},[128,65440,4905],{"class":138},[128,65442,65443,65445,65447,65450],{"class":130,"line":749},[128,65444,60796],{"class":166},[128,65446,1967],{"class":138},[128,65448,65449],{"class":166},"#999",[128,65451,4905],{"class":138},[128,65453,65454,65457,65459,65461,65463],{"class":130,"line":754},[128,65455,65456],{"class":166},"      margin-top",[128,65458,1967],{"class":138},[128,65460,4069],{"class":166},[128,65462,54875],{"class":134},[128,65464,4905],{"class":138},[128,65466,65467,65470,65472,65474],{"class":130,"line":764},[128,65468,65469],{"class":166},"      opacity",[128,65471,1967],{"class":138},[128,65473,2452],{"class":166},[128,65475,4905],{"class":138},[128,65477,65478,65480,65482,65484,65486,65488],{"class":130,"line":782},[128,65479,65239],{"class":166},[128,65481,1967],{"class":138},[128,65483,31606],{"class":166},[128,65485,65246],{"class":166},[128,65487,4444],{"class":134},[128,65489,4905],{"class":138},[128,65491,65492],{"class":130,"line":787},[128,65493,5773],{"class":138},[128,65495,65496],{"class":130,"line":795},[128,65497,160],{"emptyLinePlaceholder":159},[128,65499,65500,65503],{"class":130,"line":807},[128,65501,65502],{"class":199},"    .list",[128,65504,1959],{"class":138},[128,65506,65507,65509,65511,65513,65515],{"class":130,"line":813},[128,65508,64990],{"class":166},[128,65510,1967],{"class":138},[128,65512,7554],{"class":166},[128,65514,54875],{"class":134},[128,65516,4905],{"class":138},[128,65518,65519,65521,65523,65525,65527],{"class":130,"line":818},[128,65520,65003],{"class":166},[128,65522,1967],{"class":138},[128,65524,65008],{"class":166},[128,65526,54875],{"class":134},[128,65528,4905],{"class":138},[128,65530,65531,65533,65535,65537],{"class":130,"line":835},[128,65532,58390],{"class":166},[128,65534,1967],{"class":138},[128,65536,54860],{"class":166},[128,65538,4905],{"class":138},[128,65540,65541],{"class":130,"line":851},[128,65542,5773],{"class":138},[128,65544,65545],{"class":130,"line":867},[128,65546,160],{"emptyLinePlaceholder":159},[128,65548,65549,65551,65554],{"class":130,"line":872},[128,65550,65502],{"class":199},[128,65552,65553],{"class":199}," .item",[128,65555,1959],{"class":138},[128,65557,65558,65560,65562,65564,65566],{"class":130,"line":878},[128,65559,58152],{"class":166},[128,65561,1967],{"class":138},[128,65563,4061],{"class":166},[128,65565,4078],{"class":134},[128,65567,4905],{"class":138},[128,65569,65570,65572,65574,65576],{"class":130,"line":887},[128,65571,58390],{"class":166},[128,65573,1967],{"class":138},[128,65575,54860],{"class":166},[128,65577,4905],{"class":138},[128,65579,65580],{"class":130,"line":896},[128,65581,5773],{"class":138},[128,65583,65584],{"class":130,"line":905},[128,65585,160],{"emptyLinePlaceholder":159},[128,65587,65588,65590,65592,65595],{"class":130,"line":914},[128,65589,65502],{"class":199},[128,65591,65553],{"class":199},[128,65593,65594],{"class":199}," .info",[128,65596,1959],{"class":138},[128,65598,65599,65601,65603,65605],{"class":130,"line":920},[128,65600,65216],{"class":166},[128,65602,1967],{"class":138},[128,65604,2592],{"class":166},[128,65606,4905],{"class":138},[128,65608,65609,65612,65614,65616,65618,65621,65624],{"class":130,"line":926},[128,65610,65611],{"class":166},"      border-bottom",[128,65613,1967],{"class":138},[128,65615,2592],{"class":166},[128,65617,54875],{"class":134},[128,65619,65620],{"class":166}," dashed",[128,65622,65623],{"class":166}," #e4e4e4",[128,65625,4905],{"class":138},[128,65627,65628,65631,65633,65635,65637],{"class":130,"line":938},[128,65629,65630],{"class":166},"      padding-bottom",[128,65632,1967],{"class":138},[128,65634,4196],{"class":166},[128,65636,54875],{"class":134},[128,65638,4905],{"class":138},[128,65640,65641],{"class":130,"line":943},[128,65642,5773],{"class":138},[128,65644,65645],{"class":130,"line":948},[128,65646,160],{"emptyLinePlaceholder":159},[128,65648,65649,65651,65653,65655],{"class":130,"line":958},[128,65650,65502],{"class":199},[128,65652,65553],{"class":199},[128,65654,10382],{"class":54685},[128,65656,1959],{"class":138},[128,65658,65659,65661,65663,65665],{"class":130,"line":974},[128,65660,58087],{"class":166},[128,65662,1967],{"class":138},[128,65664,2452],{"class":166},[128,65666,4905],{"class":138},[128,65668,65669],{"class":130,"line":985},[128,65670,5773],{"class":138},[128,65672,65673],{"class":130,"line":990},[128,65674,160],{"emptyLinePlaceholder":159},[128,65676,65677,65679,65681,65684],{"class":130,"line":1005},[128,65678,65502],{"class":199},[128,65680,65553],{"class":199},[128,65682,65683],{"class":199}," .name",[128,65685,1959],{"class":138},[128,65687,65688,65690,65692,65695],{"class":130,"line":1017},[128,65689,60796],{"class":166},[128,65691,1967],{"class":138},[128,65693,65694],{"class":166},"#FB7299",[128,65696,4905],{"class":138},[128,65698,65699,65701,65703,65705,65707],{"class":130,"line":1022},[128,65700,58303],{"class":166},[128,65702,1967],{"class":138},[128,65704,4298],{"class":166},[128,65706,54875],{"class":134},[128,65708,4905],{"class":138},[128,65710,65711,65714,65716,65719],{"class":130,"line":1027},[128,65712,65713],{"class":166},"      font-weight",[128,65715,1967],{"class":138},[128,65717,65718],{"class":166},"bold",[128,65720,4905],{"class":138},[128,65722,65723],{"class":130,"line":1033},[128,65724,5773],{"class":138},[128,65726,65727],{"class":130,"line":1038},[128,65728,160],{"emptyLinePlaceholder":159},[128,65730,65731,65733,65735,65738],{"class":130,"line":1050},[128,65732,65502],{"class":199},[128,65734,65553],{"class":199},[128,65736,65737],{"class":199}," .text",[128,65739,1959],{"class":138},[128,65741,65742,65744,65746,65749],{"class":130,"line":1055},[128,65743,60796],{"class":166},[128,65745,1967],{"class":138},[128,65747,65748],{"class":166},"#333",[128,65750,4905],{"class":138},[128,65752,65753,65755,65757,65759,65761,65763],{"class":130,"line":1060},[128,65754,58076],{"class":166},[128,65756,1967],{"class":138},[128,65758,4196],{"class":166},[128,65760,54875],{"class":134},[128,65762,7659],{"class":166},[128,65764,4905],{"class":138},[128,65766,65767],{"class":130,"line":1070},[128,65768,5773],{"class":138},[128,65770,65771],{"class":130,"line":1086},[128,65772,160],{"emptyLinePlaceholder":159},[128,65774,65775,65777,65779,65782],{"class":130,"line":1095},[128,65776,65502],{"class":199},[128,65778,65553],{"class":199},[128,65780,65781],{"class":199}," .time",[128,65783,1959],{"class":138},[128,65785,65786,65788,65790,65792],{"class":130,"line":1100},[128,65787,60796],{"class":166},[128,65789,1967],{"class":138},[128,65791,65449],{"class":166},[128,65793,4905],{"class":138},[128,65795,65796,65798,65800,65802,65804],{"class":130,"line":1113},[128,65797,58303],{"class":166},[128,65799,1967],{"class":138},[128,65801,4247],{"class":166},[128,65803,54875],{"class":134},[128,65805,4905],{"class":138},[128,65807,65808],{"class":130,"line":1124},[128,65809,5773],{"class":138},[128,65811,65812,65814,65816],{"class":130,"line":1129},[128,65813,55799],{"class":138},[128,65815,3659],{"class":54685},[128,65817,54692],{"class":138},[128,65819,65820,65822,65824],{"class":130,"line":1134},[128,65821,55168],{"class":138},[128,65823,54719],{"class":54685},[128,65825,54692],{"class":138},[128,65827,65828],{"class":130,"line":1150},[128,65829,160],{"emptyLinePlaceholder":159},[128,65831,65832,65834,65836],{"class":130,"line":1164},[128,65833,4657],{"class":138},[128,65835,55183],{"class":54685},[128,65837,54692],{"class":138},[128,65839,65840,65842,65844,65846,65848,65851],{"class":130,"line":1178},[128,65841,55526],{"class":138},[128,65843,54994],{"class":54685},[128,65845,56868],{"class":199},[128,65847,270],{"class":138},[128,65849,65850],{"class":176},"\"wrapper\"",[128,65852,54692],{"class":138},[128,65854,65855,65857,65859,65861,65863,65866,65868,65870],{"class":130,"line":1183},[128,65856,54726],{"class":138},[128,65858,4191],{"class":54685},[128,65860,56868],{"class":199},[128,65862,270],{"class":138},[128,65864,65865],{"class":176},"\"avatar\"",[128,65867,58695],{"class":138},[128,65869,4191],{"class":54685},[128,65871,54692],{"class":138},[128,65873,65874,65876,65878,65880,65882,65885,65887,65889,65892,65894,65896,65898,65901,65903,65906,65908,65910],{"class":130,"line":1199},[128,65875,54726],{"class":138},[128,65877,57669],{"class":54685},[128,65879,18481],{"class":199},[128,65881,270],{"class":138},[128,65883,65884],{"class":176},"\"tx\"",[128,65886,64399],{"class":199},[128,65888,270],{"class":138},[128,65890,65891],{"class":176},"\"发一条友善的评论\"",[128,65893,57692],{"class":199},[128,65895,270],{"class":138},[128,65897,7269],{"class":176},[128,65899,65900],{"class":199}," maxlength",[128,65902,270],{"class":138},[128,65904,65905],{"class":176},"\"200\"",[128,65907,58695],{"class":138},[128,65909,57669],{"class":54685},[128,65911,54692],{"class":138},[128,65913,65914,65916,65918,65921,65923],{"class":130,"line":1214},[128,65915,54726],{"class":138},[128,65917,57268],{"class":54685},[128,65919,65920],{"class":138},">发布\u003C\u002F",[128,65922,57268],{"class":54685},[128,65924,54692],{"class":138},[128,65926,65927,65929,65931],{"class":130,"line":1229},[128,65928,55799],{"class":138},[128,65930,54994],{"class":54685},[128,65932,54692],{"class":138},[128,65934,65935,65937,65939,65941,65943,65945],{"class":130,"line":1234},[128,65936,55526],{"class":138},[128,65938,54994],{"class":54685},[128,65940,56868],{"class":199},[128,65942,270],{"class":138},[128,65944,65850],{"class":176},[128,65946,54692],{"class":138},[128,65948,65949,65951,65953,65955,65957,65960,65963,65965],{"class":130,"line":1239},[128,65950,54726],{"class":138},[128,65952,128],{"class":54685},[128,65954,56868],{"class":199},[128,65956,270],{"class":138},[128,65958,65959],{"class":176},"\"total\"",[128,65961,65962],{"class":138},">0\u002F200字\u003C\u002F",[128,65964,128],{"class":54685},[128,65966,54692],{"class":138},[128,65968,65969,65971,65973],{"class":130,"line":1251},[128,65970,55799],{"class":138},[128,65972,54994],{"class":54685},[128,65974,54692],{"class":138},[128,65976,65977,65979,65981,65983,65985,65988],{"class":130,"line":1256},[128,65978,55526],{"class":138},[128,65980,54994],{"class":54685},[128,65982,56868],{"class":199},[128,65984,270],{"class":138},[128,65986,65987],{"class":176},"\"list\"",[128,65989,54692],{"class":138},[128,65991,65992,65994,65996,65998,66000,66003,66006,66008,66011],{"class":130,"line":1261},[128,65993,54726],{"class":138},[128,65995,54994],{"class":54685},[128,65997,56868],{"class":199},[128,65999,270],{"class":138},[128,66001,66002],{"class":176},"\"item\"",[128,66004,66005],{"class":199}," style",[128,66007,270],{"class":138},[128,66009,66010],{"class":176},"\"display: none;\"",[128,66012,54692],{"class":138},[128,66014,66015,66017,66019,66021,66023,66025,66027,66029],{"class":130,"line":1271},[128,66016,58615],{"class":138},[128,66018,4191],{"class":54685},[128,66020,56868],{"class":199},[128,66022,270],{"class":138},[128,66024,65865],{"class":176},[128,66026,58695],{"class":138},[128,66028,4191],{"class":54685},[128,66030,54692],{"class":138},[128,66032,66033,66035,66037,66039,66041,66044],{"class":130,"line":1287},[128,66034,58615],{"class":138},[128,66036,54994],{"class":54685},[128,66038,56868],{"class":199},[128,66040,270],{"class":138},[128,66042,66043],{"class":176},"\"info\"",[128,66045,54692],{"class":138},[128,66047,66048,66050,66052,66054,66056,66058,66061,66063],{"class":130,"line":1296},[128,66049,58683],{"class":138},[128,66051,19],{"class":54685},[128,66053,56868],{"class":199},[128,66055,270],{"class":138},[128,66057,1189],{"class":176},[128,66059,66060],{"class":138},">清风徐来\u003C\u002F",[128,66062,19],{"class":54685},[128,66064,54692],{"class":138},[128,66066,66067,66069,66071,66073,66075,66078,66081,66083],{"class":130,"line":1301},[128,66068,58683],{"class":138},[128,66070,19],{"class":54685},[128,66072,56868],{"class":199},[128,66074,270],{"class":138},[128,66076,66077],{"class":176},"\"text\"",[128,66079,66080],{"class":138},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[128,66082,19],{"class":54685},[128,66084,54692],{"class":138},[128,66086,66087,66089,66091,66093,66095,66098,66101,66103],{"class":130,"line":1314},[128,66088,58683],{"class":138},[128,66090,19],{"class":54685},[128,66092,56868],{"class":199},[128,66094,270],{"class":138},[128,66096,66097],{"class":176},"\"time\"",[128,66099,66100],{"class":138},">2022-10-10 20:29:21\u003C\u002F",[128,66102,19],{"class":54685},[128,66104,54692],{"class":138},[128,66106,66107,66109,66111],{"class":130,"line":1325},[128,66108,58788],{"class":138},[128,66110,54994],{"class":54685},[128,66112,54692],{"class":138},[128,66114,66115,66117,66119],{"class":130,"line":1330},[128,66116,55159],{"class":138},[128,66118,54994],{"class":54685},[128,66120,54692],{"class":138},[128,66122,66123,66125,66127],{"class":130,"line":1335},[128,66124,55799],{"class":138},[128,66126,54994],{"class":54685},[128,66128,54692],{"class":138},[128,66130,66131,66133,66135],{"class":130,"line":1341},[128,66132,55526],{"class":138},[128,66134,55196],{"class":54685},[128,66136,54692],{"class":138},[128,66138,66139,66141,66144,66146,66148,66150,66152,66155],{"class":130,"line":1346},[128,66140,14748],{"class":134},[128,66142,66143],{"class":166}," tx",[128,66145,170],{"class":134},[128,66147,57777],{"class":138},[128,66149,57780],{"class":199},[128,66151,253],{"class":138},[128,66153,66154],{"class":176},"'#tx'",[128,66156,180],{"class":138},[128,66158,66159,66161,66164,66166,66168,66170,66172,66175],{"class":130,"line":1351},[128,66160,14748],{"class":134},[128,66162,66163],{"class":166}," total",[128,66165,170],{"class":134},[128,66167,57777],{"class":138},[128,66169,57780],{"class":199},[128,66171,253],{"class":138},[128,66173,66174],{"class":176},"'.total'",[128,66176,180],{"class":138},[128,66178,66179],{"class":130,"line":1362},[128,66180,66181],{"class":3814},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[128,66183,66184,66187,66189,66191,66193,66195,66197],{"class":130,"line":1370},[128,66185,66186],{"class":138},"    tx.",[128,66188,61193],{"class":199},[128,66190,253],{"class":138},[128,66192,64706],{"class":176},[128,66194,258],{"class":138},[128,66196,57830],{"class":134},[128,66198,57833],{"class":138},[128,66200,66201,66204,66206],{"class":130,"line":1397},[128,66202,66203],{"class":138},"      total.style.opacity ",[128,66205,270],{"class":134},[128,66207,59079],{"class":166},[128,66209,66210],{"class":130,"line":1417},[128,66211,917],{"class":138},[128,66213,66214],{"class":130,"line":1437},[128,66215,66216],{"class":3814},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[128,66218,66219,66221,66223,66225,66227,66229,66231],{"class":130,"line":1458},[128,66220,66186],{"class":138},[128,66222,61193],{"class":199},[128,66224,253],{"class":138},[128,66226,64767],{"class":176},[128,66228,258],{"class":138},[128,66230,57830],{"class":134},[128,66232,57833],{"class":138},[128,66234,66235,66237,66239],{"class":130,"line":1464},[128,66236,66203],{"class":138},[128,66238,270],{"class":134},[128,66240,50718],{"class":166},[128,66242,66243],{"class":130,"line":1469},[128,66244,917],{"class":138},[128,66246,66247],{"class":130,"line":1474},[128,66248,66249],{"class":3814},"    \u002F\u002F 3. 检测用户输入\n",[128,66251,66252,66254,66256,66258,66261,66263,66265],{"class":130,"line":1484},[128,66253,66186],{"class":138},[128,66255,61193],{"class":199},[128,66257,253],{"class":138},[128,66259,66260],{"class":176},"'input'",[128,66262,258],{"class":138},[128,66264,57830],{"class":134},[128,66266,57833],{"class":138},[128,66268,66269],{"class":130,"line":1493},[128,66270,66271],{"class":3814},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[128,66273,66274,66277,66279,66282,66285,66287,66290,66292,66294],{"class":130,"line":1505},[128,66275,66276],{"class":138},"      total.innerHTML ",[128,66278,270],{"class":134},[128,66280,66281],{"class":176}," `${",[128,66283,66284],{"class":138},"tx",[128,66286,4307],{"class":176},[128,66288,66289],{"class":138},"value",[128,66291,4307],{"class":176},[128,66293,55350],{"class":166},[128,66295,66296],{"class":176},"}\u002F200字`\n",[128,66298,66299],{"class":130,"line":1510},[128,66300,917],{"class":138},[128,66302,66303],{"class":130,"line":1515},[128,66304,160],{"emptyLinePlaceholder":159},[128,66306,66307],{"class":130,"line":1543},[128,66308,66309],{"class":3814},"    \u002F\u002F const str = 'andy'\n",[128,66311,66312],{"class":130,"line":1554},[128,66313,66314],{"class":3814},"    \u002F\u002F console.log(str.length)\n",[128,66316,66317,66319,66321],{"class":130,"line":1560},[128,66318,55799],{"class":138},[128,66320,55196],{"class":54685},[128,66322,54692],{"class":138},[128,66324,66325,66327,66329],{"class":130,"line":1565},[128,66326,55168],{"class":138},[128,66328,55183],{"class":54685},[128,66330,54692],{"class":138},[128,66332,66333],{"class":130,"line":1570},[128,66334,160],{"emptyLinePlaceholder":159},[128,66336,66337,66339,66341],{"class":130,"line":1580},[128,66338,55168],{"class":138},[128,66340,54020],{"class":54685},[128,66342,54692],{"class":138},[25485,66344,66346],{"id":66345},"_3254-change事件","3.2.5.4 change事件",[19,66348,66349],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,66351,66352],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,66354,66355],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[106,66357,66359],{"className":54018,"code":66358,"language":54020,"meta":112,"style":112},"\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",[114,66360,66361,66371,66385,66389,66397,66411,66431,66443,66451,66455,66463,66477,66485,66503,66521,66533,66537,66545,66553,66557],{"__ignoreMap":112},[128,66362,66363,66365,66367,66369],{"class":130,"line":131},[128,66364,54682],{"class":138},[128,66366,54686],{"class":54685},[128,66368,54689],{"class":199},[128,66370,54692],{"class":138},[128,66372,66373,66375,66377,66379,66381,66383],{"class":130,"line":142},[128,66374,4657],{"class":138},[128,66376,54020],{"class":54685},[128,66378,54701],{"class":199},[128,66380,270],{"class":138},[128,66382,54706],{"class":176},[128,66384,54692],{"class":138},[128,66386,66387],{"class":130,"line":156},[128,66388,160],{"emptyLinePlaceholder":159},[128,66390,66391,66393,66395],{"class":130,"line":163},[128,66392,4657],{"class":138},[128,66394,54719],{"class":54685},[128,66396,54692],{"class":138},[128,66398,66399,66401,66403,66405,66407,66409],{"class":130,"line":183},[128,66400,55526],{"class":138},[128,66402,54729],{"class":54685},[128,66404,54732],{"class":199},[128,66406,270],{"class":138},[128,66408,54737],{"class":176},[128,66410,54692],{"class":138},[128,66412,66413,66415,66417,66419,66421,66423,66425,66427,66429],{"class":130,"line":188},[128,66414,55526],{"class":138},[128,66416,54729],{"class":54685},[128,66418,18442],{"class":199},[128,66420,270],{"class":138},[128,66422,54776],{"class":176},[128,66424,54756],{"class":199},[128,66426,270],{"class":138},[128,66428,54783],{"class":176},[128,66430,54692],{"class":138},[128,66432,66433,66435,66437,66439,66441],{"class":130,"line":193},[128,66434,55526],{"class":138},[128,66436,2752],{"class":54685},[128,66438,54794],{"class":138},[128,66440,2752],{"class":54685},[128,66442,54692],{"class":138},[128,66444,66445,66447,66449],{"class":130,"line":206},[128,66446,55168],{"class":138},[128,66448,54719],{"class":54685},[128,66450,54692],{"class":138},[128,66452,66453],{"class":130,"line":221},[128,66454,160],{"emptyLinePlaceholder":159},[128,66456,66457,66459,66461],{"class":130,"line":230},[128,66458,4657],{"class":138},[128,66460,55183],{"class":54685},[128,66462,54692],{"class":138},[128,66464,66465,66467,66469,66471,66473,66475],{"class":130,"line":235},[128,66466,55526],{"class":138},[128,66468,643],{"class":54685},[128,66470,57205],{"class":199},[128,66472,270],{"class":138},[128,66474,66077],{"class":176},[128,66476,54692],{"class":138},[128,66478,66479,66481,66483],{"class":130,"line":244},[128,66480,55526],{"class":138},[128,66482,55196],{"class":54685},[128,66484,54692],{"class":138},[128,66486,66487,66489,66491,66493,66495,66497,66499,66501],{"class":130,"line":287},[128,66488,14748],{"class":134},[128,66490,772],{"class":166},[128,66492,170],{"class":134},[128,66494,57777],{"class":138},[128,66496,57780],{"class":199},[128,66498,253],{"class":138},[128,66500,66260],{"class":176},[128,66502,180],{"class":138},[128,66504,66505,66508,66510,66512,66515,66517,66519],{"class":130,"line":301},[128,66506,66507],{"class":138},"    input.",[128,66509,61193],{"class":199},[128,66511,253],{"class":138},[128,66513,66514],{"class":176},"'change'",[128,66516,258],{"class":138},[128,66518,57830],{"class":134},[128,66520,57833],{"class":138},[128,66522,66523,66525,66527,66529,66531],{"class":130,"line":310},[128,66524,61624],{"class":138},[128,66526,61627],{"class":199},[128,66528,253],{"class":138},[128,66530,4342],{"class":166},[128,66532,180],{"class":138},[128,66534,66535],{"class":130,"line":323},[128,66536,917],{"class":138},[128,66538,66539,66541,66543],{"class":130,"line":330},[128,66540,55799],{"class":138},[128,66542,55196],{"class":54685},[128,66544,54692],{"class":138},[128,66546,66547,66549,66551],{"class":130,"line":335},[128,66548,55168],{"class":138},[128,66550,55183],{"class":54685},[128,66552,54692],{"class":138},[128,66554,66555],{"class":130,"line":340},[128,66556,160],{"emptyLinePlaceholder":159},[128,66558,66559,66561,66563],{"class":130,"line":351},[128,66560,55168],{"class":138},[128,66562,54020],{"class":54685},[128,66564,54692],{"class":138},[19,66566,66567],{},"总结：内容发生改变才回去触发",[72,66569,66571],{"id":66570},"_326-事件对象","3.2.6 事件对象",[25485,66573,66575],{"id":66574},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,66577,66578],{},[5074,66579],{"alt":112,"src":66580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,66582,66583],{},[5074,66584],{"alt":112,"src":66585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,66587,66588],{},"点击一次，就输出了事件对象，它是个对象",[19,66590,66591],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,66593,66594],{},[5074,66595],{"alt":112,"src":66596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[25485,66598,66600],{"id":66599},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,66602,66603],{},[5074,66604],{"alt":112,"src":66605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,66607,66608],{},"实现按特殊字符才是实现打印输出效果：",[106,66610,66612],{"className":56449,"code":66611,"language":56451,"meta":112,"style":112},"\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",[114,66613,66614,66622,66627,66641,66649,66654,66659,66664,66669,66674,66679,66684,66689,66694,66698,66702,66710],{"__ignoreMap":112},[128,66615,66616,66618,66620],{"class":130,"line":131},[128,66617,4657],{"class":138},[128,66619,55183],{"class":54685},[128,66621,54692],{"class":138},[128,66623,66624],{"class":130,"line":142},[128,66625,66626],{"class":3814},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[128,66628,66629,66631,66633,66635,66637,66639],{"class":130,"line":156},[128,66630,55526],{"class":138},[128,66632,643],{"class":54685},[128,66634,57205],{"class":199},[128,66636,270],{"class":138},[128,66638,66077],{"class":176},[128,66640,54692],{"class":138},[128,66642,66643,66645,66647],{"class":130,"line":163},[128,66644,55526],{"class":138},[128,66646,55196],{"class":54685},[128,66648,54692],{"class":138},[128,66650,66651],{"class":130,"line":183},[128,66652,66653],{"class":138},"    \u002F\u002F const btn = document.querySelector('button')\n",[128,66655,66656],{"class":130,"line":188},[128,66657,66658],{"class":138},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[128,66660,66661],{"class":130,"line":193},[128,66662,66663],{"class":138},"    \u002F\u002F   console.log(e);\n",[128,66665,66666],{"class":130,"line":206},[128,66667,66668],{"class":138},"    \u002F\u002F })\n",[128,66670,66671],{"class":130,"line":221},[128,66672,66673],{"class":138},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[128,66675,66676],{"class":130,"line":230},[128,66677,66678],{"class":138},"    const input = document.querySelector('input')\n",[128,66680,66681],{"class":130,"line":235},[128,66682,66683],{"class":138},"    input.addEventListener('keyup', function (e) {\n",[128,66685,66686],{"class":130,"line":244},[128,66687,66688],{"class":138},"      if (e.key === 'Enter') {\n",[128,66690,66691],{"class":130,"line":287},[128,66692,66693],{"class":138},"        console.log('我按下了回车键')\n",[128,66695,66696],{"class":130,"line":301},[128,66697,55780],{"class":138},[128,66699,66700],{"class":130,"line":310},[128,66701,917],{"class":138},[128,66703,66704,66706,66708],{"class":130,"line":323},[128,66705,55799],{"class":138},[128,66707,55196],{"class":54685},[128,66709,54692],{"class":138},[128,66711,66712,66714,66716],{"class":130,"line":330},[128,66713,55168],{"class":138},[128,66715,55183],{"class":54685},[128,66717,54692],{"class":138},[25485,66719,66721],{"id":66720},"_3263-trim方法","3.2.6.3 trim方法",[19,66723,66724],{},[5074,66725],{"alt":112,"src":66726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,66728,66729],{},[5074,66730],{"alt":112,"src":66731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,66733,66734],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,66736,66737],{},"str.trim()",[72,66739,66741],{"id":66740},"_327-环境对象","3.2.7 环境对象",[19,66743,66744],{},[5074,66745],{"alt":112,"src":66746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,66748,66749],{},[5074,66750],{"alt":112,"src":66751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,66753,66754],{},[5074,66755],{"alt":112,"src":66756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,66758,66759],{},"实际函数调用是window.fn()",[19,66761,66762],{},"普通函数里面this指向的是window",[4752,66764,66765,66768,66771],{},[29,66766,66767],{},"在普通函数下，this指向的是window",[29,66769,66770],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[29,66772,66773],{},"箭头函数没有this",[19,66775,66776],{},"粗略记法就是：谁调用，this就指向谁",[19,66778,66779],{},[5074,66780],{"alt":112,"src":66781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,66783,66784],{},[5074,66785],{"alt":112,"src":66786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,66788,66789],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,66791,66792],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[106,66794,66796],{"className":56449,"code":66795,"language":56451,"meta":112,"style":112},"\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",[114,66797,66798,66806,66818,66826,66831,66836,66841,66846,66850,66858],{"__ignoreMap":112},[128,66799,66800,66802,66804],{"class":130,"line":131},[128,66801,4657],{"class":138},[128,66803,55183],{"class":54685},[128,66805,54692],{"class":138},[128,66807,66808,66810,66812,66814,66816],{"class":130,"line":142},[128,66809,55526],{"class":138},[128,66811,57268],{"class":54685},[128,66813,57274],{"class":138},[128,66815,57268],{"class":54685},[128,66817,54692],{"class":138},[128,66819,66820,66822,66824],{"class":130,"line":156},[128,66821,55526],{"class":138},[128,66823,55196],{"class":54685},[128,66825,54692],{"class":138},[128,66827,66828],{"class":130,"line":163},[128,66829,66830],{"class":138},"    const button = document.querySelector('button')\n",[128,66832,66833],{"class":130,"line":183},[128,66834,66835],{"class":138},"    button.addEventListener('click', function () {\n",[128,66837,66838],{"class":130,"line":188},[128,66839,66840],{"class":138},"      \u002F\u002F console.log(this);\n",[128,66842,66843],{"class":130,"line":193},[128,66844,66845],{"class":138},"      this.style.color = 'pink'\n",[128,66847,66848],{"class":130,"line":206},[128,66849,917],{"class":138},[128,66851,66852,66854,66856],{"class":130,"line":221},[128,66853,55799],{"class":138},[128,66855,55196],{"class":54685},[128,66857,54692],{"class":138},[128,66859,66860,66862,66864],{"class":130,"line":230},[128,66861,55168],{"class":138},[128,66863,55183],{"class":54685},[128,66865,54692],{"class":138},[72,66867,66869],{"id":66868},"_328-回调函数","3.2.8 回调函数",[19,66871,66872],{},[5074,66873],{"alt":112,"src":66874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,66876,66877],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,66879,14859],{},[4752,66881,66882,66885,66888],{},[29,66883,66884],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[29,66886,66887],{},"回调函数本质还是函数，只不过把它当成参数使用",[29,66889,66890],{},"使用匿名函数做为回调函数比较常见",[72,66892,66894],{"id":66893},"_329-tab栏切换","3.2.9 tab栏切换",[19,66896,66897],{},[5074,66898],{"alt":112,"src":66899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[106,66901,66903],{"className":54018,"code":66902,"language":54020,"meta":112,"style":112},"\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",[114,66904,66905,66915,66929,66933,66941,66955,66975,66995,67008,67016,67022,67032,67042,67046,67050,67057,67070,67083,67095,67111,67115,67119,67126,67138,67150,67162,67172,67182,67186,67190,67199,67211,67222,67234,67238,67242,67250,67260,67270,67280,67284,67288,67298,67312,67324,67328,67332,67344,67355,67372,67382,67386,67390,67405,67416,67426,67430,67434,67441,67456,67460,67464,67472,67482,67486,67490,67499,67509,67513,67521,67529,67533,67541,67556,67571,67584,67592,67626,67653,67680,67707,67734,67742,67750,67765,67802,67837,67872,67907,67942,67950,67958,67966,67971,67976,67996,68001,68030,68035,68040,68058,68063,68068,68073,68095,68100,68116,68120,68125,68130,68151,68156,68185,68189,68194,68198,68206,68214,68218],{"__ignoreMap":112},[128,66906,66907,66909,66911,66913],{"class":130,"line":131},[128,66908,54682],{"class":138},[128,66910,54686],{"class":54685},[128,66912,54689],{"class":199},[128,66914,54692],{"class":138},[128,66916,66917,66919,66921,66923,66925,66927],{"class":130,"line":142},[128,66918,4657],{"class":138},[128,66920,54020],{"class":54685},[128,66922,54701],{"class":199},[128,66924,270],{"class":138},[128,66926,54706],{"class":176},[128,66928,54692],{"class":138},[128,66930,66931],{"class":130,"line":156},[128,66932,160],{"emptyLinePlaceholder":159},[128,66934,66935,66937,66939],{"class":130,"line":163},[128,66936,4657],{"class":138},[128,66938,54719],{"class":54685},[128,66940,54692],{"class":138},[128,66942,66943,66945,66947,66949,66951,66953],{"class":130,"line":183},[128,66944,55526],{"class":138},[128,66946,54729],{"class":54685},[128,66948,54732],{"class":199},[128,66950,270],{"class":138},[128,66952,54737],{"class":176},[128,66954,62507],{"class":138},[128,66956,66957,66959,66961,66963,66965,66967,66969,66971,66973],{"class":130,"line":188},[128,66958,55526],{"class":138},[128,66960,54729],{"class":54685},[128,66962,54748],{"class":199},[128,66964,270],{"class":138},[128,66966,54753],{"class":176},[128,66968,54756],{"class":199},[128,66970,270],{"class":138},[128,66972,54761],{"class":176},[128,66974,62507],{"class":138},[128,66976,66977,66979,66981,66983,66985,66987,66989,66991,66993],{"class":130,"line":193},[128,66978,55526],{"class":138},[128,66980,54729],{"class":54685},[128,66982,18442],{"class":199},[128,66984,270],{"class":138},[128,66986,54776],{"class":176},[128,66988,54756],{"class":199},[128,66990,270],{"class":138},[128,66992,54783],{"class":176},[128,66994,62507],{"class":138},[128,66996,66997,66999,67001,67004,67006],{"class":130,"line":206},[128,66998,55526],{"class":138},[128,67000,2752],{"class":54685},[128,67002,67003],{"class":138},">tab栏切换\u003C\u002F",[128,67005,2752],{"class":54685},[128,67007,54692],{"class":138},[128,67009,67010,67012,67014],{"class":130,"line":221},[128,67011,55526],{"class":138},[128,67013,3659],{"class":54685},[128,67015,54692],{"class":138},[128,67017,67018,67020],{"class":130,"line":230},[128,67019,9960],{"class":54685},[128,67021,1959],{"class":138},[128,67023,67024,67026,67028,67030],{"class":130,"line":235},[128,67025,58087],{"class":166},[128,67027,1967],{"class":138},[128,67029,2452],{"class":166},[128,67031,4905],{"class":138},[128,67033,67034,67036,67038,67040],{"class":130,"line":244},[128,67035,58076],{"class":166},[128,67037,1967],{"class":138},[128,67039,2452],{"class":166},[128,67041,4905],{"class":138},[128,67043,67044],{"class":130,"line":287},[128,67045,5773],{"class":138},[128,67047,67048],{"class":130,"line":301},[128,67049,160],{"emptyLinePlaceholder":159},[128,67051,67052,67055],{"class":130,"line":310},[128,67053,67054],{"class":199},"    .tab",[128,67056,1959],{"class":138},[128,67058,67059,67061,67063,67066,67068],{"class":130,"line":323},[128,67060,58152],{"class":166},[128,67062,1967],{"class":138},[128,67064,67065],{"class":166},"590",[128,67067,54875],{"class":134},[128,67069,4905],{"class":138},[128,67071,67072,67074,67076,67079,67081],{"class":130,"line":330},[128,67073,58166],{"class":166},[128,67075,1967],{"class":138},[128,67077,67078],{"class":166},"340",[128,67080,54875],{"class":134},[128,67082,4905],{"class":138},[128,67084,67085,67087,67089,67091,67093],{"class":130,"line":335},[128,67086,58087],{"class":166},[128,67088,1967],{"class":138},[128,67090,4449],{"class":166},[128,67092,54875],{"class":134},[128,67094,4905],{"class":138},[128,67096,67097,67099,67101,67103,67105,67107,67109],{"class":130,"line":340},[128,67098,65356],{"class":166},[128,67100,1967],{"class":138},[128,67102,2592],{"class":166},[128,67104,54875],{"class":134},[128,67106,54904],{"class":166},[128,67108,65623],{"class":166},[128,67110,4905],{"class":138},[128,67112,67113],{"class":130,"line":351},[128,67114,5773],{"class":138},[128,67116,67117],{"class":130,"line":384},[128,67118,160],{"emptyLinePlaceholder":159},[128,67120,67121,67124],{"class":130,"line":414},[128,67122,67123],{"class":199},"    .tab-nav",[128,67125,1959],{"class":138},[128,67127,67128,67130,67132,67134,67136],{"class":130,"line":419},[128,67129,58152],{"class":166},[128,67131,1967],{"class":138},[128,67133,4061],{"class":166},[128,67135,4078],{"class":134},[128,67137,4905],{"class":138},[128,67139,67140,67142,67144,67146,67148],{"class":130,"line":424},[128,67141,58166],{"class":166},[128,67143,1967],{"class":138},[128,67145,4654],{"class":166},[128,67147,54875],{"class":134},[128,67149,4905],{"class":138},[128,67151,67152,67154,67156,67158,67160],{"class":130,"line":434},[128,67153,60739],{"class":166},[128,67155,1967],{"class":138},[128,67157,4654],{"class":166},[128,67159,54875],{"class":134},[128,67161,4905],{"class":138},[128,67163,67164,67166,67168,67170],{"class":130,"line":447},[128,67165,58390],{"class":166},[128,67167,1967],{"class":138},[128,67169,54860],{"class":166},[128,67171,4905],{"class":138},[128,67173,67174,67176,67178,67180],{"class":130,"line":459},[128,67175,58401],{"class":166},[128,67177,1967],{"class":138},[128,67179,55051],{"class":166},[128,67181,4905],{"class":138},[128,67183,67184],{"class":130,"line":471},[128,67185,5773],{"class":138},[128,67187,67188],{"class":130,"line":483},[128,67189,160],{"emptyLinePlaceholder":159},[128,67191,67192,67194,67197],{"class":130,"line":495},[128,67193,67123],{"class":199},[128,67195,67196],{"class":54685}," h3",[128,67198,1959],{"class":138},[128,67200,67201,67203,67205,67207,67209],{"class":130,"line":507},[128,67202,58303],{"class":166},[128,67204,1967],{"class":138},[128,67206,4549],{"class":166},[128,67208,54875],{"class":134},[128,67210,4905],{"class":138},[128,67212,67213,67215,67217,67220],{"class":130,"line":519},[128,67214,65713],{"class":166},[128,67216,1967],{"class":138},[128,67218,67219],{"class":166},"normal",[128,67221,4905],{"class":138},[128,67223,67224,67226,67228,67230,67232],{"class":130,"line":524},[128,67225,65379],{"class":166},[128,67227,1967],{"class":138},[128,67229,4449],{"class":166},[128,67231,54875],{"class":134},[128,67233,4905],{"class":138},[128,67235,67236],{"class":130,"line":529},[128,67237,5773],{"class":138},[128,67239,67240],{"class":130,"line":540},[128,67241,160],{"emptyLinePlaceholder":159},[128,67243,67244,67246,67248],{"class":130,"line":555},[128,67245,67123],{"class":199},[128,67247,64671],{"class":54685},[128,67249,1959],{"class":138},[128,67251,67252,67254,67256,67258],{"class":130,"line":576},[128,67253,58113],{"class":166},[128,67255,1967],{"class":138},[128,67257,58118],{"class":166},[128,67259,4905],{"class":138},[128,67261,67262,67264,67266,67268],{"class":130,"line":584},[128,67263,58390],{"class":166},[128,67265,1967],{"class":138},[128,67267,54860],{"class":166},[128,67269,4905],{"class":138},[128,67271,67272,67274,67276,67278],{"class":130,"line":593},[128,67273,58401],{"class":166},[128,67275,1967],{"class":138},[128,67277,54963],{"class":166},[128,67279,4905],{"class":138},[128,67281,67282],{"class":130,"line":598},[128,67283,5773],{"class":138},[128,67285,67286],{"class":130,"line":603},[128,67287,160],{"emptyLinePlaceholder":159},[128,67289,67290,67292,67294,67296],{"class":130,"line":614},[128,67291,67123],{"class":199},[128,67293,64671],{"class":54685},[128,67295,58456],{"class":54685},[128,67297,1959],{"class":138},[128,67299,67300,67302,67304,67306,67308,67310],{"class":130,"line":625},[128,67301,58087],{"class":166},[128,67303,1967],{"class":138},[128,67305,2452],{"class":166},[128,67307,12496],{"class":166},[128,67309,54875],{"class":134},[128,67311,4905],{"class":138},[128,67313,67314,67316,67318,67320,67322],{"class":130,"line":633},[128,67315,58303],{"class":166},[128,67317,1967],{"class":138},[128,67319,4298],{"class":166},[128,67321,54875],{"class":134},[128,67323,4905],{"class":138},[128,67325,67326],{"class":130,"line":649},[128,67327,5773],{"class":138},[128,67329,67330],{"class":130,"line":660},[128,67331,160],{"emptyLinePlaceholder":159},[128,67333,67334,67336,67338,67340,67342],{"class":130,"line":673},[128,67335,67123],{"class":199},[128,67337,64671],{"class":54685},[128,67339,58456],{"class":54685},[128,67341,5010],{"class":54685},[128,67343,1959],{"class":138},[128,67345,67346,67349,67351,67353],{"class":130,"line":678},[128,67347,67348],{"class":166},"      text-decoration",[128,67350,1967],{"class":138},[128,67352,58118],{"class":166},[128,67354,4905],{"class":138},[128,67356,67357,67359,67361,67363,67365,67367,67370],{"class":130,"line":683},[128,67358,65611],{"class":166},[128,67360,1967],{"class":138},[128,67362,409],{"class":166},[128,67364,54875],{"class":134},[128,67366,54904],{"class":166},[128,67368,67369],{"class":166}," transparent",[128,67371,4905],{"class":138},[128,67373,67374,67376,67378,67380],{"class":130,"line":693},[128,67375,60796],{"class":166},[128,67377,1967],{"class":138},[128,67379,65748],{"class":166},[128,67381,4905],{"class":138},[128,67383,67384],{"class":130,"line":702},[128,67385,5773],{"class":138},[128,67387,67388],{"class":130,"line":709},[128,67389,160],{"emptyLinePlaceholder":159},[128,67391,67392,67394,67396,67398,67400,67403],{"class":130,"line":723},[128,67393,67123],{"class":199},[128,67395,64671],{"class":54685},[128,67397,58456],{"class":54685},[128,67399,5010],{"class":54685},[128,67401,67402],{"class":199},".active",[128,67404,1959],{"class":138},[128,67406,67407,67409,67411,67414],{"class":130,"line":732},[128,67408,65170],{"class":166},[128,67410,1967],{"class":138},[128,67412,67413],{"class":166},"#e1251b",[128,67415,4905],{"class":138},[128,67417,67418,67420,67422,67424],{"class":130,"line":744},[128,67419,60796],{"class":166},[128,67421,1967],{"class":138},[128,67423,67413],{"class":166},[128,67425,4905],{"class":138},[128,67427,67428],{"class":130,"line":749},[128,67429,5773],{"class":138},[128,67431,67432],{"class":130,"line":754},[128,67433,160],{"emptyLinePlaceholder":159},[128,67435,67436,67439],{"class":130,"line":764},[128,67437,67438],{"class":199},"    .tab-content",[128,67440,1959],{"class":138},[128,67442,67443,67445,67447,67449,67452,67454],{"class":130,"line":782},[128,67444,58076],{"class":166},[128,67446,1967],{"class":138},[128,67448,2452],{"class":166},[128,67450,67451],{"class":166}," 16",[128,67453,54875],{"class":134},[128,67455,4905],{"class":138},[128,67457,67458],{"class":130,"line":787},[128,67459,5773],{"class":138},[128,67461,67462],{"class":130,"line":795},[128,67463,160],{"emptyLinePlaceholder":159},[128,67465,67466,67468,67470],{"class":130,"line":807},[128,67467,67438],{"class":199},[128,67469,65553],{"class":199},[128,67471,1959],{"class":138},[128,67473,67474,67476,67478,67480],{"class":130,"line":813},[128,67475,58390],{"class":166},[128,67477,1967],{"class":138},[128,67479,58118],{"class":166},[128,67481,4905],{"class":138},[128,67483,67484],{"class":130,"line":818},[128,67485,5773],{"class":138},[128,67487,67488],{"class":130,"line":835},[128,67489,160],{"emptyLinePlaceholder":159},[128,67491,67492,67494,67497],{"class":130,"line":851},[128,67493,67438],{"class":199},[128,67495,67496],{"class":199}," .item.active",[128,67498,1959],{"class":138},[128,67500,67501,67503,67505,67507],{"class":130,"line":867},[128,67502,58390],{"class":166},[128,67504,1967],{"class":138},[128,67506,64248],{"class":166},[128,67508,4905],{"class":138},[128,67510,67511],{"class":130,"line":872},[128,67512,5773],{"class":138},[128,67514,67515,67517,67519],{"class":130,"line":878},[128,67516,55799],{"class":138},[128,67518,3659],{"class":54685},[128,67520,54692],{"class":138},[128,67522,67523,67525,67527],{"class":130,"line":887},[128,67524,55168],{"class":138},[128,67526,54719],{"class":54685},[128,67528,54692],{"class":138},[128,67530,67531],{"class":130,"line":896},[128,67532,160],{"emptyLinePlaceholder":159},[128,67534,67535,67537,67539],{"class":130,"line":905},[128,67536,4657],{"class":138},[128,67538,55183],{"class":54685},[128,67540,54692],{"class":138},[128,67542,67543,67545,67547,67549,67551,67554],{"class":130,"line":914},[128,67544,55526],{"class":138},[128,67546,54994],{"class":54685},[128,67548,56868],{"class":199},[128,67550,270],{"class":138},[128,67552,67553],{"class":176},"\"tab\"",[128,67555,54692],{"class":138},[128,67557,67558,67560,67562,67564,67566,67569],{"class":130,"line":920},[128,67559,54726],{"class":138},[128,67561,54994],{"class":54685},[128,67563,56868],{"class":199},[128,67565,270],{"class":138},[128,67567,67568],{"class":176},"\"tab-nav\"",[128,67570,54692],{"class":138},[128,67572,67573,67575,67577,67580,67582],{"class":130,"line":926},[128,67574,58615],{"class":138},[128,67576,72],{"class":54685},[128,67578,67579],{"class":138},">每日特价\u003C\u002F",[128,67581,72],{"class":54685},[128,67583,54692],{"class":138},[128,67585,67586,67588,67590],{"class":130,"line":938},[128,67587,58615],{"class":138},[128,67589,4752],{"class":54685},[128,67591,54692],{"class":138},[128,67593,67594,67596,67598,67600,67602,67604,67606,67608,67610,67612,67615,67618,67620,67622,67624],{"class":130,"line":943},[128,67595,58683],{"class":138},[128,67597,29],{"class":54685},[128,67599,64431],{"class":138},[128,67601,3989],{"class":54685},[128,67603,56868],{"class":199},[128,67605,270],{"class":138},[128,67607,63086],{"class":176},[128,67609,64436],{"class":199},[128,67611,270],{"class":138},[128,67613,67614],{"class":176},"\"javascript:;\"",[128,67616,67617],{"class":138},">精选\u003C\u002F",[128,67619,3989],{"class":54685},[128,67621,58695],{"class":138},[128,67623,29],{"class":54685},[128,67625,54692],{"class":138},[128,67627,67628,67630,67632,67634,67636,67638,67640,67642,67645,67647,67649,67651],{"class":130,"line":948},[128,67629,58683],{"class":138},[128,67631,29],{"class":54685},[128,67633,64431],{"class":138},[128,67635,3989],{"class":54685},[128,67637,64436],{"class":199},[128,67639,270],{"class":138},[128,67641,67614],{"class":176},[128,67643,67644],{"class":138},">美食\u003C\u002F",[128,67646,3989],{"class":54685},[128,67648,58695],{"class":138},[128,67650,29],{"class":54685},[128,67652,54692],{"class":138},[128,67654,67655,67657,67659,67661,67663,67665,67667,67669,67672,67674,67676,67678],{"class":130,"line":958},[128,67656,58683],{"class":138},[128,67658,29],{"class":54685},[128,67660,64431],{"class":138},[128,67662,3989],{"class":54685},[128,67664,64436],{"class":199},[128,67666,270],{"class":138},[128,67668,67614],{"class":176},[128,67670,67671],{"class":138},">百货\u003C\u002F",[128,67673,3989],{"class":54685},[128,67675,58695],{"class":138},[128,67677,29],{"class":54685},[128,67679,54692],{"class":138},[128,67681,67682,67684,67686,67688,67690,67692,67694,67696,67699,67701,67703,67705],{"class":130,"line":974},[128,67683,58683],{"class":138},[128,67685,29],{"class":54685},[128,67687,64431],{"class":138},[128,67689,3989],{"class":54685},[128,67691,64436],{"class":199},[128,67693,270],{"class":138},[128,67695,67614],{"class":176},[128,67697,67698],{"class":138},">个护\u003C\u002F",[128,67700,3989],{"class":54685},[128,67702,58695],{"class":138},[128,67704,29],{"class":54685},[128,67706,54692],{"class":138},[128,67708,67709,67711,67713,67715,67717,67719,67721,67723,67726,67728,67730,67732],{"class":130,"line":985},[128,67710,58683],{"class":138},[128,67712,29],{"class":54685},[128,67714,64431],{"class":138},[128,67716,3989],{"class":54685},[128,67718,64436],{"class":199},[128,67720,270],{"class":138},[128,67722,67614],{"class":176},[128,67724,67725],{"class":138},">预告\u003C\u002F",[128,67727,3989],{"class":54685},[128,67729,58695],{"class":138},[128,67731,29],{"class":54685},[128,67733,54692],{"class":138},[128,67735,67736,67738,67740],{"class":130,"line":990},[128,67737,58788],{"class":138},[128,67739,4752],{"class":54685},[128,67741,54692],{"class":138},[128,67743,67744,67746,67748],{"class":130,"line":1005},[128,67745,55159],{"class":138},[128,67747,54994],{"class":54685},[128,67749,54692],{"class":138},[128,67751,67752,67754,67756,67758,67760,67763],{"class":130,"line":1017},[128,67753,54726],{"class":138},[128,67755,54994],{"class":54685},[128,67757,56868],{"class":199},[128,67759,270],{"class":138},[128,67761,67762],{"class":176},"\"tab-content\"",[128,67764,54692],{"class":138},[128,67766,67767,67769,67771,67773,67775,67778,67780,67782,67784,67786,67789,67791,67793,67795,67798,67800],{"class":130,"line":1022},[128,67768,58615],{"class":138},[128,67770,54994],{"class":54685},[128,67772,56868],{"class":199},[128,67774,270],{"class":138},[128,67776,67777],{"class":176},"\"item active\"",[128,67779,64431],{"class":138},[128,67781,5074],{"class":54685},[128,67783,58620],{"class":199},[128,67785,270],{"class":138},[128,67787,67788],{"class":176},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[128,67790,58628],{"class":199},[128,67792,270],{"class":138},[128,67794,11209],{"class":176},[128,67796,67797],{"class":138}," \u002F>\u003C\u002F",[128,67799,54994],{"class":54685},[128,67801,54692],{"class":138},[128,67803,67804,67806,67808,67810,67812,67814,67816,67818,67820,67822,67825,67827,67829,67831,67833,67835],{"class":130,"line":1027},[128,67805,58615],{"class":138},[128,67807,54994],{"class":54685},[128,67809,56868],{"class":199},[128,67811,270],{"class":138},[128,67813,66002],{"class":176},[128,67815,64431],{"class":138},[128,67817,5074],{"class":54685},[128,67819,58620],{"class":199},[128,67821,270],{"class":138},[128,67823,67824],{"class":176},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[128,67826,58628],{"class":199},[128,67828,270],{"class":138},[128,67830,11209],{"class":176},[128,67832,67797],{"class":138},[128,67834,54994],{"class":54685},[128,67836,54692],{"class":138},[128,67838,67839,67841,67843,67845,67847,67849,67851,67853,67855,67857,67860,67862,67864,67866,67868,67870],{"class":130,"line":1033},[128,67840,58615],{"class":138},[128,67842,54994],{"class":54685},[128,67844,56868],{"class":199},[128,67846,270],{"class":138},[128,67848,66002],{"class":176},[128,67850,64431],{"class":138},[128,67852,5074],{"class":54685},[128,67854,58620],{"class":199},[128,67856,270],{"class":138},[128,67858,67859],{"class":176},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[128,67861,58628],{"class":199},[128,67863,270],{"class":138},[128,67865,11209],{"class":176},[128,67867,67797],{"class":138},[128,67869,54994],{"class":54685},[128,67871,54692],{"class":138},[128,67873,67874,67876,67878,67880,67882,67884,67886,67888,67890,67892,67895,67897,67899,67901,67903,67905],{"class":130,"line":1038},[128,67875,58615],{"class":138},[128,67877,54994],{"class":54685},[128,67879,56868],{"class":199},[128,67881,270],{"class":138},[128,67883,66002],{"class":176},[128,67885,64431],{"class":138},[128,67887,5074],{"class":54685},[128,67889,58620],{"class":199},[128,67891,270],{"class":138},[128,67893,67894],{"class":176},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[128,67896,58628],{"class":199},[128,67898,270],{"class":138},[128,67900,11209],{"class":176},[128,67902,67797],{"class":138},[128,67904,54994],{"class":54685},[128,67906,54692],{"class":138},[128,67908,67909,67911,67913,67915,67917,67919,67921,67923,67925,67927,67930,67932,67934,67936,67938,67940],{"class":130,"line":1050},[128,67910,58615],{"class":138},[128,67912,54994],{"class":54685},[128,67914,56868],{"class":199},[128,67916,270],{"class":138},[128,67918,66002],{"class":176},[128,67920,64431],{"class":138},[128,67922,5074],{"class":54685},[128,67924,58620],{"class":199},[128,67926,270],{"class":138},[128,67928,67929],{"class":176},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[128,67931,58628],{"class":199},[128,67933,270],{"class":138},[128,67935,11209],{"class":176},[128,67937,67797],{"class":138},[128,67939,54994],{"class":54685},[128,67941,54692],{"class":138},[128,67943,67944,67946,67948],{"class":130,"line":1055},[128,67945,55159],{"class":138},[128,67947,54994],{"class":54685},[128,67949,54692],{"class":138},[128,67951,67952,67954,67956],{"class":130,"line":1060},[128,67953,55799],{"class":138},[128,67955,54994],{"class":54685},[128,67957,54692],{"class":138},[128,67959,67960,67962,67964],{"class":130,"line":1070},[128,67961,55526],{"class":138},[128,67963,55196],{"class":54685},[128,67965,54692],{"class":138},[128,67967,67968],{"class":130,"line":1086},[128,67969,67970],{"class":3814},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[128,67972,67973],{"class":130,"line":1095},[128,67974,67975],{"class":3814},"    \u002F\u002F 1.1 获取 a 元素 \n",[128,67977,67978,67980,67983,67985,67987,67989,67991,67994],{"class":130,"line":1100},[128,67979,14748],{"class":134},[128,67981,67982],{"class":166}," as",[128,67984,170],{"class":134},[128,67986,57777],{"class":138},[128,67988,59061],{"class":199},[128,67990,253],{"class":138},[128,67992,67993],{"class":176},"'.tab-nav a'",[128,67995,180],{"class":138},[128,67997,67998],{"class":130,"line":1113},[128,67999,68000],{"class":3814},"    \u002F\u002F console.log(as) \n",[128,68002,68003,68005,68007,68009,68011,68013,68015,68017,68019,68022,68024,68026,68028],{"class":130,"line":1124},[128,68004,543],{"class":134},[128,68006,5260],{"class":138},[128,68008,55229],{"class":134},[128,68010,12984],{"class":138},[128,68012,270],{"class":134},[128,68014,7659],{"class":166},[128,68016,12991],{"class":138},[128,68018,4657],{"class":134},[128,68020,68021],{"class":138}," as.",[128,68023,55350],{"class":166},[128,68025,6783],{"class":138},[128,68027,5877],{"class":134},[128,68029,15968],{"class":138},[128,68031,68032],{"class":130,"line":1129},[128,68033,68034],{"class":3814},"      \u002F\u002F console.log(as[i])\n",[128,68036,68037],{"class":130,"line":1134},[128,68038,68039],{"class":3814},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[128,68041,68042,68045,68047,68049,68052,68054,68056],{"class":130,"line":1150},[128,68043,68044],{"class":138},"      as[i].",[128,68046,61193],{"class":199},[128,68048,253],{"class":138},[128,68050,68051],{"class":176},"'mouseenter'",[128,68053,258],{"class":138},[128,68055,57830],{"class":134},[128,68057,57833],{"class":138},[128,68059,68060],{"class":130,"line":1164},[128,68061,68062],{"class":3814},"        \u002F\u002F console.log('鼠标经过')\n",[128,68064,68065],{"class":130,"line":1178},[128,68066,68067],{"class":3814},"        \u002F\u002F 排他思想  \n",[128,68069,68070],{"class":130,"line":1183},[128,68071,68072],{"class":3814},"        \u002F\u002F 干掉别人 移除类active\n",[128,68074,68075,68077,68079,68081,68084,68086,68088,68090,68093],{"class":130,"line":1199},[128,68076,55307],{"class":138},[128,68078,57780],{"class":199},[128,68080,253],{"class":138},[128,68082,68083],{"class":176},"'.tab-nav .active'",[128,68085,60383],{"class":138},[128,68087,60386],{"class":199},[128,68089,253],{"class":138},[128,68091,68092],{"class":176},"'active'",[128,68094,180],{"class":138},[128,68096,68097],{"class":130,"line":1214},[128,68098,68099],{"class":3814},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[128,68101,68102,68105,68108,68110,68112,68114],{"class":130,"line":1229},[128,68103,68104],{"class":166},"        this",[128,68106,68107],{"class":138},".classList.",[128,68109,8892],{"class":199},[128,68111,253],{"class":138},[128,68113,68092],{"class":176},[128,68115,180],{"class":138},[128,68117,68118],{"class":130,"line":1234},[128,68119,160],{"emptyLinePlaceholder":159},[128,68121,68122],{"class":130,"line":1239},[128,68123,68124],{"class":3814},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[128,68126,68127],{"class":130,"line":1251},[128,68128,68129],{"class":3814},"        \u002F\u002F 干掉别人\n",[128,68131,68132,68134,68136,68138,68141,68143,68145,68147,68149],{"class":130,"line":1256},[128,68133,55307],{"class":138},[128,68135,57780],{"class":199},[128,68137,253],{"class":138},[128,68139,68140],{"class":176},"'.tab-content .active'",[128,68142,60383],{"class":138},[128,68144,60386],{"class":199},[128,68146,253],{"class":138},[128,68148,68092],{"class":176},[128,68150,180],{"class":138},[128,68152,68153],{"class":130,"line":1261},[128,68154,68155],{"class":3814},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[128,68157,68158,68160,68162,68164,68167,68169,68171,68173,68175,68177,68179,68181,68183],{"class":130,"line":1271},[128,68159,55307],{"class":138},[128,68161,57780],{"class":199},[128,68163,253],{"class":138},[128,68165,68166],{"class":176},"`.tab-content .item:nth-child(${",[128,68168,4191],{"class":138},[128,68170,48951],{"class":134},[128,68172,28605],{"class":166},[128,68174,60412],{"class":176},[128,68176,60383],{"class":138},[128,68178,8892],{"class":199},[128,68180,253],{"class":138},[128,68182,68092],{"class":176},[128,68184,180],{"class":138},[128,68186,68187],{"class":130,"line":1287},[128,68188,160],{"emptyLinePlaceholder":159},[128,68190,68191],{"class":130,"line":1296},[128,68192,68193],{"class":138},"      })\n",[128,68195,68196],{"class":130,"line":1301},[128,68197,5773],{"class":138},[128,68199,68200,68202,68204],{"class":130,"line":1314},[128,68201,55799],{"class":138},[128,68203,55196],{"class":54685},[128,68205,54692],{"class":138},[128,68207,68208,68210,68212],{"class":130,"line":1325},[128,68209,55168],{"class":138},[128,68211,55183],{"class":54685},[128,68213,54692],{"class":138},[128,68215,68216],{"class":130,"line":1330},[128,68217,160],{"emptyLinePlaceholder":159},[128,68219,68220,68222,68224],{"class":130,"line":1335},[128,68221,55168],{"class":138},[128,68223,54020],{"class":54685},[128,68225,54692],{"class":138},[19,68227,68228],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,68230,68231],{},"在监听事件中，this指向的就是他的调用者",[19,68233,68234],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,68236,57102],{},[19,68238,68239],{},"(function () {",[19,68241,68242],{},"const list = document.querySelector('.xtx-elevator-list')",[19,68244,68245],{},"list.addEventListener('click', function (e) {",[19,68247,68248],{},"if (e.target.tagName === 'A') {",[19,68250,68251],{},"\u002F\u002F 排他思想",[19,68253,68254],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,68256,68257],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,68259,68260],{},"\u002F\u002F console.log(old);",[19,68262,68263],{},"\u002F\u002F 判断",[19,68265,68266],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,68268,68269],{},"if (old) old.classList.remove('active')",[19,68271,68272],{},"e.target.classList.add('active')",[19,68274,1453],{},[19,68276,55846],{},[19,68278,68279],{},"})();",[72,68281,68283],{"id":68282},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[106,68285,68287],{"className":54018,"code":68286,"language":54020,"meta":112,"style":112},"\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",[114,68288,68289,68299,68303,68311,68315,68329,68343,68355,68363,68369,68379,68389,68393,68397,68404,68416,68427,68444,68457,68471,68481,68485,68489,68496,68507,68525,68535,68547,68551,68555,68562,68579,68590,68602,68606,68610,68617,68629,68633,68641,68649,68653,68661,68669,68677,68692,68736,68744,68757,68770,68783,68791,68799,68807,68835,68843,68855,68868,68881,68889,68897,68905,68931,68939,68952,68964,68977,68985,68993,69001,69027,69035,69048,69060,69073,69081,69089,69097,69102,69122,69127,69147,69152,69169,69174,69182,69187,69216,69229,69233,69237,69242,69246,69274,69279,69296,69301,69306,69311,69316,69342,69346,69350,69358,69366,69370],{"__ignoreMap":112},[128,68290,68291,68293,68295,68297],{"class":130,"line":131},[128,68292,54682],{"class":138},[128,68294,54686],{"class":54685},[128,68296,54689],{"class":199},[128,68298,54692],{"class":138},[128,68300,68301],{"class":130,"line":142},[128,68302,160],{"emptyLinePlaceholder":159},[128,68304,68305,68307,68309],{"class":130,"line":156},[128,68306,4657],{"class":138},[128,68308,54020],{"class":54685},[128,68310,54692],{"class":138},[128,68312,68313],{"class":130,"line":163},[128,68314,160],{"emptyLinePlaceholder":159},[128,68316,68317,68319,68321,68323,68325,68327],{"class":130,"line":183},[128,68318,4657],{"class":138},[128,68320,54719],{"class":54685},[128,68322,54701],{"class":199},[128,68324,270],{"class":138},[128,68326,54706],{"class":176},[128,68328,54692],{"class":138},[128,68330,68331,68333,68335,68337,68339,68341],{"class":130,"line":188},[128,68332,55526],{"class":138},[128,68334,54729],{"class":54685},[128,68336,54732],{"class":199},[128,68338,270],{"class":138},[128,68340,54737],{"class":176},[128,68342,54692],{"class":138},[128,68344,68345,68347,68349,68351,68353],{"class":130,"line":193},[128,68346,55526],{"class":138},[128,68348,2752],{"class":54685},[128,68350,58695],{"class":138},[128,68352,2752],{"class":54685},[128,68354,54692],{"class":138},[128,68356,68357,68359,68361],{"class":130,"line":206},[128,68358,55526],{"class":138},[128,68360,3659],{"class":54685},[128,68362,54692],{"class":138},[128,68364,68365,68367],{"class":130,"line":221},[128,68366,9960],{"class":54685},[128,68368,1959],{"class":138},[128,68370,68371,68373,68375,68377],{"class":130,"line":230},[128,68372,58087],{"class":166},[128,68374,1967],{"class":138},[128,68376,2452],{"class":166},[128,68378,4905],{"class":138},[128,68380,68381,68383,68385,68387],{"class":130,"line":235},[128,68382,58076],{"class":166},[128,68384,1967],{"class":138},[128,68386,2452],{"class":166},[128,68388,4905],{"class":138},[128,68390,68391],{"class":130,"line":244},[128,68392,5773],{"class":138},[128,68394,68395],{"class":130,"line":287},[128,68396,160],{"emptyLinePlaceholder":159},[128,68398,68399,68402],{"class":130,"line":301},[128,68400,68401],{"class":54685},"    table",[128,68403,1959],{"class":138},[128,68405,68406,68409,68411,68414],{"class":130,"line":310},[128,68407,68408],{"class":166},"      border-collapse",[128,68410,1967],{"class":138},[128,68412,68413],{"class":166},"collapse",[128,68415,4905],{"class":138},[128,68417,68418,68421,68423,68425],{"class":130,"line":323},[128,68419,68420],{"class":166},"      border-spacing",[128,68422,1967],{"class":138},[128,68424,2452],{"class":166},[128,68426,4905],{"class":138},[128,68428,68429,68431,68433,68435,68437,68439,68442],{"class":130,"line":330},[128,68430,65356],{"class":166},[128,68432,1967],{"class":138},[128,68434,2592],{"class":166},[128,68436,54875],{"class":134},[128,68438,54904],{"class":166},[128,68440,68441],{"class":166}," #c0c0c0",[128,68443,4905],{"class":138},[128,68445,68446,68448,68450,68453,68455],{"class":130,"line":335},[128,68447,58152],{"class":166},[128,68449,1967],{"class":138},[128,68451,68452],{"class":166},"500",[128,68454,54875],{"class":134},[128,68456,4905],{"class":138},[128,68458,68459,68461,68463,68465,68467,68469],{"class":130,"line":340},[128,68460,58087],{"class":166},[128,68462,1967],{"class":138},[128,68464,4061],{"class":166},[128,68466,54875],{"class":134},[128,68468,54939],{"class":166},[128,68470,4905],{"class":138},[128,68472,68473,68475,68477,68479],{"class":130,"line":351},[128,68474,60666],{"class":166},[128,68476,1967],{"class":138},[128,68478,54975],{"class":166},[128,68480,4905],{"class":138},[128,68482,68483],{"class":130,"line":384},[128,68484,5773],{"class":138},[128,68486,68487],{"class":130,"line":414},[128,68488,160],{"emptyLinePlaceholder":159},[128,68490,68491,68494],{"class":130,"line":419},[128,68492,68493],{"class":54685},"    th",[128,68495,1959],{"class":138},[128,68497,68498,68500,68502,68505],{"class":130,"line":424},[128,68499,58265],{"class":166},[128,68501,1967],{"class":138},[128,68503,68504],{"class":166},"#09c",[128,68506,4905],{"class":138},[128,68508,68509,68512,68514,68516,68518,68520,68523],{"class":130,"line":434},[128,68510,68511],{"class":166},"      font",[128,68513,1967],{"class":138},[128,68515,65718],{"class":166},[128,68517,67451],{"class":166},[128,68519,54875],{"class":134},[128,68521,68522],{"class":176}," \"微软雅黑\"",[128,68524,4905],{"class":138},[128,68526,68527,68529,68531,68533],{"class":130,"line":447},[128,68528,60796],{"class":166},[128,68530,1967],{"class":138},[128,68532,64221],{"class":166},[128,68534,4905],{"class":138},[128,68536,68537,68539,68541,68543,68545],{"class":130,"line":459},[128,68538,58166],{"class":166},[128,68540,1967],{"class":138},[128,68542,4549],{"class":166},[128,68544,54875],{"class":134},[128,68546,4905],{"class":138},[128,68548,68549],{"class":130,"line":471},[128,68550,5773],{"class":138},[128,68552,68553],{"class":130,"line":483},[128,68554,160],{"emptyLinePlaceholder":159},[128,68556,68557,68560],{"class":130,"line":495},[128,68558,68559],{"class":54685},"    td",[128,68561,1959],{"class":138},[128,68563,68564,68566,68568,68570,68572,68574,68577],{"class":130,"line":507},[128,68565,65356],{"class":166},[128,68567,1967],{"class":138},[128,68569,2592],{"class":166},[128,68571,54875],{"class":134},[128,68573,54904],{"class":166},[128,68575,68576],{"class":166}," #d0d0d0",[128,68578,4905],{"class":138},[128,68580,68581,68583,68585,68588],{"class":130,"line":519},[128,68582,60796],{"class":166},[128,68584,1967],{"class":138},[128,68586,68587],{"class":166},"#404060",[128,68589,4905],{"class":138},[128,68591,68592,68594,68596,68598,68600],{"class":130,"line":524},[128,68593,58076],{"class":166},[128,68595,1967],{"class":138},[128,68597,4196],{"class":166},[128,68599,54875],{"class":134},[128,68601,4905],{"class":138},[128,68603,68604],{"class":130,"line":529},[128,68605,5773],{"class":138},[128,68607,68608],{"class":130,"line":540},[128,68609,160],{"emptyLinePlaceholder":159},[128,68611,68612,68615],{"class":130,"line":555},[128,68613,68614],{"class":199},"    .allCheck",[128,68616,1959],{"class":138},[128,68618,68619,68621,68623,68625,68627],{"class":130,"line":576},[128,68620,58152],{"class":166},[128,68622,1967],{"class":138},[128,68624,4361],{"class":166},[128,68626,54875],{"class":134},[128,68628,4905],{"class":138},[128,68630,68631],{"class":130,"line":584},[128,68632,5773],{"class":138},[128,68634,68635,68637,68639],{"class":130,"line":593},[128,68636,55799],{"class":138},[128,68638,3659],{"class":54685},[128,68640,54692],{"class":138},[128,68642,68643,68645,68647],{"class":130,"line":598},[128,68644,55168],{"class":138},[128,68646,54719],{"class":54685},[128,68648,54692],{"class":138},[128,68650,68651],{"class":130,"line":603},[128,68652,160],{"emptyLinePlaceholder":159},[128,68654,68655,68657,68659],{"class":130,"line":614},[128,68656,4657],{"class":138},[128,68658,55183],{"class":54685},[128,68660,54692],{"class":138},[128,68662,68663,68665,68667],{"class":130,"line":625},[128,68664,55526],{"class":138},[128,68666,3891],{"class":54685},[128,68668,54692],{"class":138},[128,68670,68671,68673,68675],{"class":130,"line":633},[128,68672,54726],{"class":138},[128,68674,3897],{"class":54685},[128,68676,54692],{"class":138},[128,68678,68679,68681,68683,68685,68687,68690],{"class":130,"line":649},[128,68680,58615],{"class":138},[128,68682,3900],{"class":54685},[128,68684,56868],{"class":199},[128,68686,270],{"class":138},[128,68688,68689],{"class":176},"\"allCheck\"",[128,68691,54692],{"class":138},[128,68693,68694,68696,68698,68700,68702,68704,68706,68708,68710,68712,68714,68717,68720,68722,68724,68726,68729,68732,68734],{"class":130,"line":660},[128,68695,58683],{"class":138},[128,68697,643],{"class":54685},[128,68699,57205],{"class":199},[128,68701,270],{"class":138},[128,68703,57210],{"class":176},[128,68705,18442],{"class":199},[128,68707,270],{"class":138},[128,68709,11209],{"class":176},[128,68711,18481],{"class":199},[128,68713,270],{"class":138},[128,68715,68716],{"class":176},"\"checkAll\"",[128,68718,68719],{"class":138},"> \u003C",[128,68721,128],{"class":54685},[128,68723,56868],{"class":199},[128,68725,270],{"class":138},[128,68727,68728],{"class":176},"\"all\"",[128,68730,68731],{"class":138},">全选\u003C\u002F",[128,68733,128],{"class":54685},[128,68735,54692],{"class":138},[128,68737,68738,68740,68742],{"class":130,"line":673},[128,68739,58788],{"class":138},[128,68741,3900],{"class":54685},[128,68743,54692],{"class":138},[128,68745,68746,68748,68750,68753,68755],{"class":130,"line":678},[128,68747,58615],{"class":138},[128,68749,3900],{"class":54685},[128,68751,68752],{"class":138},">商品\u003C\u002F",[128,68754,3900],{"class":54685},[128,68756,54692],{"class":138},[128,68758,68759,68761,68763,68766,68768],{"class":130,"line":683},[128,68760,58615],{"class":138},[128,68762,3900],{"class":54685},[128,68764,68765],{"class":138},">商家\u003C\u002F",[128,68767,3900],{"class":54685},[128,68769,54692],{"class":138},[128,68771,68772,68774,68776,68779,68781],{"class":130,"line":693},[128,68773,58615],{"class":138},[128,68775,3900],{"class":54685},[128,68777,68778],{"class":138},">价格\u003C\u002F",[128,68780,3900],{"class":54685},[128,68782,54692],{"class":138},[128,68784,68785,68787,68789],{"class":130,"line":702},[128,68786,55159],{"class":138},[128,68788,3897],{"class":54685},[128,68790,54692],{"class":138},[128,68792,68793,68795,68797],{"class":130,"line":709},[128,68794,54726],{"class":138},[128,68796,3897],{"class":54685},[128,68798,54692],{"class":138},[128,68800,68801,68803,68805],{"class":130,"line":723},[128,68802,58615],{"class":138},[128,68804,3943],{"class":54685},[128,68806,54692],{"class":138},[128,68808,68809,68811,68813,68815,68817,68819,68821,68823,68826,68828,68830,68833],{"class":130,"line":732},[128,68810,58683],{"class":138},[128,68812,643],{"class":54685},[128,68814,57205],{"class":199},[128,68816,270],{"class":138},[128,68818,57210],{"class":176},[128,68820,18442],{"class":199},[128,68822,270],{"class":138},[128,68824,68825],{"class":176},"\"check\"",[128,68827,56868],{"class":199},[128,68829,270],{"class":138},[128,68831,68832],{"class":176},"\"ck\"",[128,68834,54692],{"class":138},[128,68836,68837,68839,68841],{"class":130,"line":744},[128,68838,58788],{"class":138},[128,68840,3943],{"class":54685},[128,68842,54692],{"class":138},[128,68844,68845,68847,68849,68851,68853],{"class":130,"line":749},[128,68846,58615],{"class":138},[128,68848,3943],{"class":54685},[128,68850,64552],{"class":138},[128,68852,3943],{"class":54685},[128,68854,54692],{"class":138},[128,68856,68857,68859,68861,68864,68866],{"class":130,"line":754},[128,68858,58615],{"class":138},[128,68860,3943],{"class":54685},[128,68862,68863],{"class":138},">小米\u003C\u002F",[128,68865,3943],{"class":54685},[128,68867,54692],{"class":138},[128,68869,68870,68872,68874,68877,68879],{"class":130,"line":764},[128,68871,58615],{"class":138},[128,68873,3943],{"class":54685},[128,68875,68876],{"class":138},">￥1999\u003C\u002F",[128,68878,3943],{"class":54685},[128,68880,54692],{"class":138},[128,68882,68883,68885,68887],{"class":130,"line":782},[128,68884,55159],{"class":138},[128,68886,3897],{"class":54685},[128,68888,54692],{"class":138},[128,68890,68891,68893,68895],{"class":130,"line":787},[128,68892,54726],{"class":138},[128,68894,3897],{"class":54685},[128,68896,54692],{"class":138},[128,68898,68899,68901,68903],{"class":130,"line":795},[128,68900,58615],{"class":138},[128,68902,3943],{"class":54685},[128,68904,54692],{"class":138},[128,68906,68907,68909,68911,68913,68915,68917,68919,68921,68923,68925,68927,68929],{"class":130,"line":807},[128,68908,58683],{"class":138},[128,68910,643],{"class":54685},[128,68912,57205],{"class":199},[128,68914,270],{"class":138},[128,68916,57210],{"class":176},[128,68918,18442],{"class":199},[128,68920,270],{"class":138},[128,68922,68825],{"class":176},[128,68924,56868],{"class":199},[128,68926,270],{"class":138},[128,68928,68832],{"class":176},[128,68930,54692],{"class":138},[128,68932,68933,68935,68937],{"class":130,"line":813},[128,68934,58788],{"class":138},[128,68936,3943],{"class":54685},[128,68938,54692],{"class":138},[128,68940,68941,68943,68945,68948,68950],{"class":130,"line":818},[128,68942,58615],{"class":138},[128,68944,3943],{"class":54685},[128,68946,68947],{"class":138},">小米净水器\u003C\u002F",[128,68949,3943],{"class":54685},[128,68951,54692],{"class":138},[128,68953,68954,68956,68958,68960,68962],{"class":130,"line":835},[128,68955,58615],{"class":138},[128,68957,3943],{"class":54685},[128,68959,68863],{"class":138},[128,68961,3943],{"class":54685},[128,68963,54692],{"class":138},[128,68965,68966,68968,68970,68973,68975],{"class":130,"line":851},[128,68967,58615],{"class":138},[128,68969,3943],{"class":54685},[128,68971,68972],{"class":138},">￥4999\u003C\u002F",[128,68974,3943],{"class":54685},[128,68976,54692],{"class":138},[128,68978,68979,68981,68983],{"class":130,"line":867},[128,68980,55159],{"class":138},[128,68982,3897],{"class":54685},[128,68984,54692],{"class":138},[128,68986,68987,68989,68991],{"class":130,"line":872},[128,68988,54726],{"class":138},[128,68990,3897],{"class":54685},[128,68992,54692],{"class":138},[128,68994,68995,68997,68999],{"class":130,"line":878},[128,68996,58615],{"class":138},[128,68998,3943],{"class":54685},[128,69000,54692],{"class":138},[128,69002,69003,69005,69007,69009,69011,69013,69015,69017,69019,69021,69023,69025],{"class":130,"line":887},[128,69004,58683],{"class":138},[128,69006,643],{"class":54685},[128,69008,57205],{"class":199},[128,69010,270],{"class":138},[128,69012,57210],{"class":176},[128,69014,18442],{"class":199},[128,69016,270],{"class":138},[128,69018,68825],{"class":176},[128,69020,56868],{"class":199},[128,69022,270],{"class":138},[128,69024,68832],{"class":176},[128,69026,54692],{"class":138},[128,69028,69029,69031,69033],{"class":130,"line":896},[128,69030,58788],{"class":138},[128,69032,3943],{"class":54685},[128,69034,54692],{"class":138},[128,69036,69037,69039,69041,69044,69046],{"class":130,"line":905},[128,69038,58615],{"class":138},[128,69040,3943],{"class":54685},[128,69042,69043],{"class":138},">小米电视\u003C\u002F",[128,69045,3943],{"class":54685},[128,69047,54692],{"class":138},[128,69049,69050,69052,69054,69056,69058],{"class":130,"line":914},[128,69051,58615],{"class":138},[128,69053,3943],{"class":54685},[128,69055,68863],{"class":138},[128,69057,3943],{"class":54685},[128,69059,54692],{"class":138},[128,69061,69062,69064,69066,69069,69071],{"class":130,"line":920},[128,69063,58615],{"class":138},[128,69065,3943],{"class":54685},[128,69067,69068],{"class":138},">￥5999\u003C\u002F",[128,69070,3943],{"class":54685},[128,69072,54692],{"class":138},[128,69074,69075,69077,69079],{"class":130,"line":926},[128,69076,55159],{"class":138},[128,69078,3897],{"class":54685},[128,69080,54692],{"class":138},[128,69082,69083,69085,69087],{"class":130,"line":938},[128,69084,55799],{"class":138},[128,69086,3891],{"class":54685},[128,69088,54692],{"class":138},[128,69090,69091,69093,69095],{"class":130,"line":943},[128,69092,55526],{"class":138},[128,69094,55196],{"class":54685},[128,69096,54692],{"class":138},[128,69098,69099],{"class":130,"line":948},[128,69100,69101],{"class":3814},"    \u002F\u002F 1. 获取大复选框\n",[128,69103,69104,69106,69109,69111,69113,69115,69117,69120],{"class":130,"line":958},[128,69105,14748],{"class":134},[128,69107,69108],{"class":166}," checkAll",[128,69110,170],{"class":134},[128,69112,57777],{"class":138},[128,69114,57780],{"class":199},[128,69116,253],{"class":138},[128,69118,69119],{"class":176},"'#checkAll'",[128,69121,180],{"class":138},[128,69123,69124],{"class":130,"line":974},[128,69125,69126],{"class":3814},"    \u002F\u002F 2. 获取所有的小复选框\n",[128,69128,69129,69131,69134,69136,69138,69140,69142,69145],{"class":130,"line":985},[128,69130,14748],{"class":134},[128,69132,69133],{"class":166}," cks",[128,69135,170],{"class":134},[128,69137,57777],{"class":138},[128,69139,59061],{"class":199},[128,69141,253],{"class":138},[128,69143,69144],{"class":176},"'.ck'",[128,69146,180],{"class":138},[128,69148,69149],{"class":130,"line":990},[128,69150,69151],{"class":3814},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[128,69153,69154,69157,69159,69161,69163,69165,69167],{"class":130,"line":1005},[128,69155,69156],{"class":138},"    checkAll.",[128,69158,61193],{"class":199},[128,69160,253],{"class":138},[128,69162,61198],{"class":176},[128,69164,258],{"class":138},[128,69166,57830],{"class":134},[128,69168,57833],{"class":138},[128,69170,69171],{"class":130,"line":1017},[128,69172,69173],{"class":3814},"      \u002F\u002F 得到当前大复选框的选中状态\n",[128,69175,69176,69179],{"class":130,"line":1022},[128,69177,69178],{"class":3814},"      \u002F\u002F console.log(checkAll.checked)",[128,69180,69181],{"class":3814},"  \u002F\u002F 得到 是 true 或者是 false\n",[128,69183,69184],{"class":130,"line":1027},[128,69185,69186],{"class":3814},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[128,69188,69189,69191,69193,69195,69197,69199,69201,69203,69205,69208,69210,69212,69214],{"class":130,"line":1033},[128,69190,55666],{"class":134},[128,69192,5260],{"class":138},[128,69194,55229],{"class":134},[128,69196,12984],{"class":138},[128,69198,270],{"class":134},[128,69200,7659],{"class":166},[128,69202,12991],{"class":138},[128,69204,4657],{"class":134},[128,69206,69207],{"class":138}," cks.",[128,69209,55350],{"class":166},[128,69211,6783],{"class":138},[128,69213,5877],{"class":134},[128,69215,15968],{"class":138},[128,69217,69218,69221,69223,69226],{"class":130,"line":1038},[128,69219,69220],{"class":138},"        cks[i].checked ",[128,69222,270],{"class":134},[128,69224,69225],{"class":166}," this",[128,69227,69228],{"class":138},".checked\n",[128,69230,69231],{"class":130,"line":1050},[128,69232,55780],{"class":138},[128,69234,69235],{"class":130,"line":1055},[128,69236,917],{"class":138},[128,69238,69239],{"class":130,"line":1060},[128,69240,69241],{"class":3814},"    \u002F\u002F 5. 小复选框控制大复选框\n",[128,69243,69244],{"class":130,"line":1070},[128,69245,160],{"emptyLinePlaceholder":159},[128,69247,69248,69250,69252,69254,69256,69258,69260,69262,69264,69266,69268,69270,69272],{"class":130,"line":1086},[128,69249,543],{"class":134},[128,69251,5260],{"class":138},[128,69253,55229],{"class":134},[128,69255,12984],{"class":138},[128,69257,270],{"class":134},[128,69259,7659],{"class":166},[128,69261,12991],{"class":138},[128,69263,4657],{"class":134},[128,69265,69207],{"class":138},[128,69267,55350],{"class":166},[128,69269,6783],{"class":138},[128,69271,5877],{"class":134},[128,69273,15968],{"class":138},[128,69275,69276],{"class":130,"line":1095},[128,69277,69278],{"class":3814},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[128,69280,69281,69284,69286,69288,69290,69292,69294],{"class":130,"line":1100},[128,69282,69283],{"class":138},"      cks[i].",[128,69285,61193],{"class":199},[128,69287,253],{"class":138},[128,69289,61198],{"class":176},[128,69291,258],{"class":138},[128,69293,57830],{"class":134},[128,69295,57833],{"class":138},[128,69297,69298],{"class":130,"line":1113},[128,69299,69300],{"class":3814},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[128,69302,69303],{"class":130,"line":1124},[128,69304,69305],{"class":3814},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[128,69307,69308],{"class":130,"line":1129},[128,69309,69310],{"class":3814},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[128,69312,69313],{"class":130,"line":1134},[128,69314,69315],{"class":3814},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[128,69317,69318,69321,69323,69325,69327,69329,69332,69334,69336,69338,69340],{"class":130,"line":1150},[128,69319,69320],{"class":138},"        checkAll.checked ",[128,69322,270],{"class":134},[128,69324,57777],{"class":138},[128,69326,59061],{"class":199},[128,69328,253],{"class":138},[128,69330,69331],{"class":176},"'.ck:checked'",[128,69333,34300],{"class":138},[128,69335,55350],{"class":166},[128,69337,61286],{"class":134},[128,69339,69207],{"class":138},[128,69341,59211],{"class":166},[128,69343,69344],{"class":130,"line":1164},[128,69345,68193],{"class":138},[128,69347,69348],{"class":130,"line":1178},[128,69349,5773],{"class":138},[128,69351,69352,69354,69356],{"class":130,"line":1183},[128,69353,55799],{"class":138},[128,69355,55196],{"class":54685},[128,69357,54692],{"class":138},[128,69359,69360,69362,69364],{"class":130,"line":1199},[128,69361,55168],{"class":138},[128,69363,55183],{"class":54685},[128,69365,54692],{"class":138},[128,69367,69368],{"class":130,"line":1214},[128,69369,160],{"emptyLinePlaceholder":159},[128,69371,69372,69374,69376],{"class":130,"line":1229},[128,69373,55168],{"class":138},[128,69375,54020],{"class":54685},[128,69377,54692],{"class":138},[19,69379,69380],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,69382,69383],{},"用好之间比较得到的布尔值！！！",[19,69385,69386,69387,69390,69391,5260,69394,4333,69396,69399],{},"在 JS 里访问的时候，",[114,69388,69389],{},"checkbox.checked"," 是一个 ",[3903,69392,69393],{},"布尔值",[114,69395,4974],{},[114,69397,69398],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,69401,69402,69403,69406,69407],{},"HTML 的 ",[114,69404,69405],{},"checked=\"checked\""," 只是 ",[3903,69408,69409,69410,69413],{},"初始值；JS 的 ",[114,69411,69412],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,69415,69416],{},"：checked是一个伪类选择器",[19,69418,69419],{},[5074,69420],{"alt":112,"src":69421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,69423,69424,69427],{},[69425,69426],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,69429,69430],{},[5074,69431],{"alt":112,"src":69432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,69434,69436],{"id":69435},"_33-dom事件进阶","3.3 DOM事件进阶",[72,69438,69440],{"id":69439},"_331-事件流","3.3.1 事件流",[19,69442,69443],{},[5074,69444],{"alt":112,"src":69445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[25485,69447,69449],{"id":69448},"_3311-事件捕获","3.3.1.1 事件捕获",[19,69451,69452],{},[5074,69453],{"alt":112,"src":69454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[106,69456,69458],{"className":54018,"code":69457,"language":54020,"meta":112,"style":112},"\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",[114,69459,69460,69470,69484,69488,69496,69510,69530,69542,69550,69557,69569,69581,69591,69595,69599,69606,69618,69630,69640,69644,69652,69660,69664,69672,69687,69706,69714,69722,69742,69762,69778,69789,69797,69814,69825,69833,69850,69861,69869,69877,69885,69889],{"__ignoreMap":112},[128,69461,69462,69464,69466,69468],{"class":130,"line":131},[128,69463,54682],{"class":138},[128,69465,54686],{"class":54685},[128,69467,54689],{"class":199},[128,69469,54692],{"class":138},[128,69471,69472,69474,69476,69478,69480,69482],{"class":130,"line":142},[128,69473,4657],{"class":138},[128,69475,54020],{"class":54685},[128,69477,54701],{"class":199},[128,69479,270],{"class":138},[128,69481,54706],{"class":176},[128,69483,54692],{"class":138},[128,69485,69486],{"class":130,"line":156},[128,69487,160],{"emptyLinePlaceholder":159},[128,69489,69490,69492,69494],{"class":130,"line":163},[128,69491,4657],{"class":138},[128,69493,54719],{"class":54685},[128,69495,54692],{"class":138},[128,69497,69498,69500,69502,69504,69506,69508],{"class":130,"line":183},[128,69499,55526],{"class":138},[128,69501,54729],{"class":54685},[128,69503,54732],{"class":199},[128,69505,270],{"class":138},[128,69507,54737],{"class":176},[128,69509,54692],{"class":138},[128,69511,69512,69514,69516,69518,69520,69522,69524,69526,69528],{"class":130,"line":188},[128,69513,55526],{"class":138},[128,69515,54729],{"class":54685},[128,69517,18442],{"class":199},[128,69519,270],{"class":138},[128,69521,54776],{"class":176},[128,69523,54756],{"class":199},[128,69525,270],{"class":138},[128,69527,54783],{"class":176},[128,69529,54692],{"class":138},[128,69531,69532,69534,69536,69538,69540],{"class":130,"line":193},[128,69533,55526],{"class":138},[128,69535,2752],{"class":54685},[128,69537,54794],{"class":138},[128,69539,2752],{"class":54685},[128,69541,54692],{"class":138},[128,69543,69544,69546,69548],{"class":130,"line":206},[128,69545,55526],{"class":138},[128,69547,3659],{"class":54685},[128,69549,54692],{"class":138},[128,69551,69552,69555],{"class":130,"line":221},[128,69553,69554],{"class":199},"    .father",[128,69556,1959],{"class":138},[128,69558,69559,69561,69563,69565,69567],{"class":130,"line":230},[128,69560,58152],{"class":166},[128,69562,1967],{"class":138},[128,69564,68452],{"class":166},[128,69566,54875],{"class":134},[128,69568,4905],{"class":138},[128,69570,69571,69573,69575,69577,69579],{"class":130,"line":235},[128,69572,58166],{"class":166},[128,69574,1967],{"class":138},[128,69576,68452],{"class":166},[128,69578,54875],{"class":134},[128,69580,4905],{"class":138},[128,69582,69583,69585,69587,69589],{"class":130,"line":244},[128,69584,58265],{"class":166},[128,69586,1967],{"class":138},[128,69588,55028],{"class":166},[128,69590,4905],{"class":138},[128,69592,69593],{"class":130,"line":287},[128,69594,5773],{"class":138},[128,69596,69597],{"class":130,"line":301},[128,69598,160],{"emptyLinePlaceholder":159},[128,69600,69601,69604],{"class":130,"line":310},[128,69602,69603],{"class":199},"    .son",[128,69605,1959],{"class":138},[128,69607,69608,69610,69612,69614,69616],{"class":130,"line":323},[128,69609,58152],{"class":166},[128,69611,1967],{"class":138},[128,69613,3143],{"class":166},[128,69615,54875],{"class":134},[128,69617,4905],{"class":138},[128,69619,69620,69622,69624,69626,69628],{"class":130,"line":330},[128,69621,58166],{"class":166},[128,69623,1967],{"class":138},[128,69625,3143],{"class":166},[128,69627,54875],{"class":134},[128,69629,4905],{"class":138},[128,69631,69632,69634,69636,69638],{"class":130,"line":335},[128,69633,58265],{"class":166},[128,69635,1967],{"class":138},[128,69637,58270],{"class":166},[128,69639,4905],{"class":138},[128,69641,69642],{"class":130,"line":340},[128,69643,5773],{"class":138},[128,69645,69646,69648,69650],{"class":130,"line":351},[128,69647,55799],{"class":138},[128,69649,3659],{"class":54685},[128,69651,54692],{"class":138},[128,69653,69654,69656,69658],{"class":130,"line":384},[128,69655,55168],{"class":138},[128,69657,54719],{"class":54685},[128,69659,54692],{"class":138},[128,69661,69662],{"class":130,"line":414},[128,69663,160],{"emptyLinePlaceholder":159},[128,69665,69666,69668,69670],{"class":130,"line":419},[128,69667,4657],{"class":138},[128,69669,55183],{"class":54685},[128,69671,54692],{"class":138},[128,69673,69674,69676,69678,69680,69682,69685],{"class":130,"line":424},[128,69675,55526],{"class":138},[128,69677,54994],{"class":54685},[128,69679,56868],{"class":199},[128,69681,270],{"class":138},[128,69683,69684],{"class":176},"\"father\"",[128,69686,54692],{"class":138},[128,69688,69689,69691,69693,69695,69697,69700,69702,69704],{"class":130,"line":434},[128,69690,54726],{"class":138},[128,69692,54994],{"class":54685},[128,69694,56868],{"class":199},[128,69696,270],{"class":138},[128,69698,69699],{"class":176},"\"son\"",[128,69701,58695],{"class":138},[128,69703,54994],{"class":54685},[128,69705,54692],{"class":138},[128,69707,69708,69710,69712],{"class":130,"line":447},[128,69709,55799],{"class":138},[128,69711,54994],{"class":54685},[128,69713,54692],{"class":138},[128,69715,69716,69718,69720],{"class":130,"line":459},[128,69717,55526],{"class":138},[128,69719,55196],{"class":54685},[128,69721,54692],{"class":138},[128,69723,69724,69726,69729,69731,69733,69735,69737,69740],{"class":130,"line":471},[128,69725,14748],{"class":134},[128,69727,69728],{"class":166}," fa",[128,69730,170],{"class":134},[128,69732,57777],{"class":138},[128,69734,57780],{"class":199},[128,69736,253],{"class":138},[128,69738,69739],{"class":176},"'.father'",[128,69741,180],{"class":138},[128,69743,69744,69746,69749,69751,69753,69755,69757,69760],{"class":130,"line":483},[128,69745,14748],{"class":134},[128,69747,69748],{"class":166}," son",[128,69750,170],{"class":134},[128,69752,57777],{"class":138},[128,69754,57780],{"class":199},[128,69756,253],{"class":138},[128,69758,69759],{"class":176},"'.son'",[128,69761,180],{"class":138},[128,69763,69764,69766,69768,69770,69772,69774,69776],{"class":130,"line":495},[128,69765,55789],{"class":138},[128,69767,61193],{"class":199},[128,69769,253],{"class":138},[128,69771,61198],{"class":176},[128,69773,258],{"class":138},[128,69775,57830],{"class":134},[128,69777,57833],{"class":138},[128,69779,69780,69782,69784,69787],{"class":130,"line":507},[128,69781,62305],{"class":199},[128,69783,253],{"class":138},[128,69785,69786],{"class":176},"'woshiu1'",[128,69788,180],{"class":138},[128,69790,69791,69793,69795],{"class":130,"line":519},[128,69792,57916],{"class":138},[128,69794,4974],{"class":166},[128,69796,180],{"class":138},[128,69798,69799,69802,69804,69806,69808,69810,69812],{"class":130,"line":524},[128,69800,69801],{"class":138},"    fa.",[128,69803,61193],{"class":199},[128,69805,253],{"class":138},[128,69807,61198],{"class":176},[128,69809,258],{"class":138},[128,69811,57830],{"class":134},[128,69813,57833],{"class":138},[128,69815,69816,69818,69820,69823],{"class":130,"line":529},[128,69817,62305],{"class":199},[128,69819,253],{"class":138},[128,69821,69822],{"class":176},"'1'",[128,69824,180],{"class":138},[128,69826,69827,69829,69831],{"class":130,"line":540},[128,69828,57916],{"class":138},[128,69830,4974],{"class":166},[128,69832,180],{"class":138},[128,69834,69835,69838,69840,69842,69844,69846,69848],{"class":130,"line":555},[128,69836,69837],{"class":138},"    son.",[128,69839,61193],{"class":199},[128,69841,253],{"class":138},[128,69843,61198],{"class":176},[128,69845,258],{"class":138},[128,69847,57830],{"class":134},[128,69849,57833],{"class":138},[128,69851,69852,69854,69856,69859],{"class":130,"line":576},[128,69853,62305],{"class":199},[128,69855,253],{"class":138},[128,69857,69858],{"class":176},"'2'",[128,69860,180],{"class":138},[128,69862,69863,69865,69867],{"class":130,"line":584},[128,69864,57916],{"class":138},[128,69866,4974],{"class":166},[128,69868,180],{"class":138},[128,69870,69871,69873,69875],{"class":130,"line":593},[128,69872,55799],{"class":138},[128,69874,55196],{"class":54685},[128,69876,54692],{"class":138},[128,69878,69879,69881,69883],{"class":130,"line":598},[128,69880,55168],{"class":138},[128,69882,55183],{"class":54685},[128,69884,54692],{"class":138},[128,69886,69887],{"class":130,"line":603},[128,69888,160],{"emptyLinePlaceholder":159},[128,69890,69891,69893,69895],{"class":130,"line":614},[128,69892,55168],{"class":138},[128,69894,54020],{"class":54685},[128,69896,54692],{"class":138},[19,69898,69899],{},[5074,69900],{"alt":112,"src":69901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,69903,69904],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[25485,69906,69908],{"id":69907},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,69910,69911],{},[5074,69912],{"alt":112,"src":69913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,69915,69916],{},"反着来",[19,69918,69919],{},"注意是同名事件，比如都是‘click’",[25485,69921,69923],{"id":69922},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,69925,69926],{},[5074,69927],{"alt":112,"src":69928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[25485,69930,69932],{"id":69931},"_3314-解绑事件","3.3.1.4 解绑事件",[19,69934,69935],{},[5074,69936],{"alt":112,"src":69937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,69939,69940],{},[5074,69941],{"alt":112,"src":69942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[25485,69944,69946],{"id":69945},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[26,69948,69949],{},[29,69950,69951],{},"事件类型的区别",[19,69953,69954],{},[5074,69955],{"alt":112,"src":69956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,69958,69959],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[26,69961,69962],{"start":142},[29,69963,69964],{},"注册事件的区别",[19,69966,69967],{},[5074,69968],{"alt":112,"src":69969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[25485,69971,69973],{"id":69972},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,69975,69976],{},[5074,69977],{"alt":112,"src":69978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,69980,69981],{},[5074,69982],{"alt":112,"src":69983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[106,69985,69987],{"className":56449,"code":69986,"language":56451,"meta":112,"style":112},"\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",[114,69988,69989,69997,70014,70037,70045,70050,70055,70060,70064,70072,70080],{"__ignoreMap":112},[128,69990,69991,69993,69995],{"class":130,"line":131},[128,69992,4657],{"class":138},[128,69994,55183],{"class":54685},[128,69996,54692],{"class":138},[128,69998,69999,70001,70004,70007,70009,70012],{"class":130,"line":142},[128,70000,55526],{"class":138},[128,70002,70003],{"class":54685},"form",[128,70005,70006],{"class":199}," action",[128,70008,270],{"class":138},[128,70010,70011],{"class":176},"\"http:\u002F\u002Fwww.itcast.cn\"",[128,70013,54692],{"class":138},[128,70015,70016,70018,70020,70022,70024,70027,70030,70032,70035],{"class":130,"line":156},[128,70017,54726],{"class":138},[128,70019,643],{"class":54685},[128,70021,57205],{"class":199},[128,70023,270],{"class":138},[128,70025,70026],{"class":176},"\"submit\"",[128,70028,70029],{"class":199}," value",[128,70031,270],{"class":138},[128,70033,70034],{"class":176},"\"免费注册\"",[128,70036,54692],{"class":138},[128,70038,70039,70041,70043],{"class":130,"line":163},[128,70040,54726],{"class":138},[128,70042,55196],{"class":54685},[128,70044,54692],{"class":138},[128,70046,70047],{"class":130,"line":183},[128,70048,70049],{"class":138},"      const form = document.querySelector('form')\n",[128,70051,70052],{"class":130,"line":188},[128,70053,70054],{"class":138},"      form.addEventListener('submit', function (e) {\n",[128,70056,70057],{"class":130,"line":193},[128,70058,70059],{"class":138},"        e.preventDefault()\n",[128,70061,70062],{"class":130,"line":206},[128,70063,68193],{"class":138},[128,70065,70066,70068,70070],{"class":130,"line":221},[128,70067,55159],{"class":138},[128,70069,55196],{"class":54685},[128,70071,54692],{"class":138},[128,70073,70074,70076,70078],{"class":130,"line":230},[128,70075,55799],{"class":138},[128,70077,70003],{"class":54685},[128,70079,54692],{"class":138},[128,70081,70082,70084,70086],{"class":130,"line":235},[128,70083,55168],{"class":138},[128,70085,55183],{"class":54685},[128,70087,54692],{"class":138},[19,70089,70090],{},"点击不在跳转！！！",[72,70092,70094],{"id":70093},"_332-事件委托","3.3.2 事件委托",[19,70096,70097],{},[5074,70098],{"alt":112,"src":70099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[106,70101,70103],{"className":54018,"code":70102,"language":54020,"meta":112,"style":112},"\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",[114,70104,70105,70115,70129,70133,70141,70155,70175,70187,70195,70199,70207,70215,70227,70239,70251,70263,70275,70288,70296,70304,70309,70328,70349,70354,70359,70364,70369,70378,70382,70392,70396,70401,70406,70420,70430,70434,70438,70446,70454,70458],{"__ignoreMap":112},[128,70106,70107,70109,70111,70113],{"class":130,"line":131},[128,70108,54682],{"class":138},[128,70110,54686],{"class":54685},[128,70112,54689],{"class":199},[128,70114,54692],{"class":138},[128,70116,70117,70119,70121,70123,70125,70127],{"class":130,"line":142},[128,70118,4657],{"class":138},[128,70120,54020],{"class":54685},[128,70122,54701],{"class":199},[128,70124,270],{"class":138},[128,70126,54706],{"class":176},[128,70128,54692],{"class":138},[128,70130,70131],{"class":130,"line":156},[128,70132,160],{"emptyLinePlaceholder":159},[128,70134,70135,70137,70139],{"class":130,"line":163},[128,70136,4657],{"class":138},[128,70138,54719],{"class":54685},[128,70140,54692],{"class":138},[128,70142,70143,70145,70147,70149,70151,70153],{"class":130,"line":183},[128,70144,55526],{"class":138},[128,70146,54729],{"class":54685},[128,70148,54732],{"class":199},[128,70150,270],{"class":138},[128,70152,54737],{"class":176},[128,70154,54692],{"class":138},[128,70156,70157,70159,70161,70163,70165,70167,70169,70171,70173],{"class":130,"line":188},[128,70158,55526],{"class":138},[128,70160,54729],{"class":54685},[128,70162,18442],{"class":199},[128,70164,270],{"class":138},[128,70166,54776],{"class":176},[128,70168,54756],{"class":199},[128,70170,270],{"class":138},[128,70172,54783],{"class":176},[128,70174,54692],{"class":138},[128,70176,70177,70179,70181,70183,70185],{"class":130,"line":193},[128,70178,55526],{"class":138},[128,70180,2752],{"class":54685},[128,70182,54794],{"class":138},[128,70184,2752],{"class":54685},[128,70186,54692],{"class":138},[128,70188,70189,70191,70193],{"class":130,"line":206},[128,70190,55168],{"class":138},[128,70192,54719],{"class":54685},[128,70194,54692],{"class":138},[128,70196,70197],{"class":130,"line":221},[128,70198,160],{"emptyLinePlaceholder":159},[128,70200,70201,70203,70205],{"class":130,"line":230},[128,70202,4657],{"class":138},[128,70204,55183],{"class":54685},[128,70206,54692],{"class":138},[128,70208,70209,70211,70213],{"class":130,"line":235},[128,70210,55526],{"class":138},[128,70212,4752],{"class":54685},[128,70214,54692],{"class":138},[128,70216,70217,70219,70221,70223,70225],{"class":130,"line":244},[128,70218,54726],{"class":138},[128,70220,29],{"class":54685},[128,70222,57347],{"class":138},[128,70224,29],{"class":54685},[128,70226,54692],{"class":138},[128,70228,70229,70231,70233,70235,70237],{"class":130,"line":287},[128,70230,54726],{"class":138},[128,70232,29],{"class":54685},[128,70234,57366],{"class":138},[128,70236,29],{"class":54685},[128,70238,54692],{"class":138},[128,70240,70241,70243,70245,70247,70249],{"class":130,"line":301},[128,70242,54726],{"class":138},[128,70244,29],{"class":54685},[128,70246,57385],{"class":138},[128,70248,29],{"class":54685},[128,70250,54692],{"class":138},[128,70252,70253,70255,70257,70259,70261],{"class":130,"line":310},[128,70254,54726],{"class":138},[128,70256,29],{"class":54685},[128,70258,57404],{"class":138},[128,70260,29],{"class":54685},[128,70262,54692],{"class":138},[128,70264,70265,70267,70269,70271,70273],{"class":130,"line":323},[128,70266,54726],{"class":138},[128,70268,29],{"class":54685},[128,70270,57423],{"class":138},[128,70272,29],{"class":54685},[128,70274,54692],{"class":138},[128,70276,70277,70279,70281,70284,70286],{"class":130,"line":330},[128,70278,54726],{"class":138},[128,70280,19],{"class":54685},[128,70282,70283],{"class":138},">我不需要变色\u003C\u002F",[128,70285,19],{"class":54685},[128,70287,54692],{"class":138},[128,70289,70290,70292,70294],{"class":130,"line":335},[128,70291,55799],{"class":138},[128,70293,4752],{"class":54685},[128,70295,54692],{"class":138},[128,70297,70298,70300,70302],{"class":130,"line":340},[128,70299,55526],{"class":138},[128,70301,55196],{"class":54685},[128,70303,54692],{"class":138},[128,70305,70306],{"class":130,"line":351},[128,70307,70308],{"class":3814},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[128,70310,70311,70313,70315,70317,70319,70321,70323,70326],{"class":130,"line":384},[128,70312,14748],{"class":134},[128,70314,64671],{"class":166},[128,70316,170],{"class":134},[128,70318,57777],{"class":138},[128,70320,57780],{"class":199},[128,70322,253],{"class":138},[128,70324,70325],{"class":176},"'ul'",[128,70327,180],{"class":138},[128,70329,70330,70333,70335,70337,70339,70341,70343,70345,70347],{"class":130,"line":414},[128,70331,70332],{"class":138},"    ul.",[128,70334,61193],{"class":199},[128,70336,253],{"class":138},[128,70338,61198],{"class":176},[128,70340,258],{"class":138},[128,70342,57830],{"class":134},[128,70344,5260],{"class":138},[128,70346,3830],{"class":266},[128,70348,15968],{"class":138},[128,70350,70351],{"class":130,"line":419},[128,70352,70353],{"class":3814},"      \u002F\u002F alert(1)\n",[128,70355,70356],{"class":130,"line":424},[128,70357,70358],{"class":3814},"      \u002F\u002F e.target就是我们点击的对象\n",[128,70360,70361],{"class":130,"line":434},[128,70362,70363],{"class":3814},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[128,70365,70366],{"class":130,"line":447},[128,70367,70368],{"class":3814},"      \u002F\u002F e.target.style.color = 'red'\n",[128,70370,70371,70373,70375],{"class":130,"line":459},[128,70372,61624],{"class":138},[128,70374,61627],{"class":199},[128,70376,70377],{"class":138},"(e)\n",[128,70379,70380],{"class":130,"line":471},[128,70381,160],{"emptyLinePlaceholder":159},[128,70383,70384,70386,70389],{"class":130,"line":483},[128,70385,61624],{"class":138},[128,70387,70388],{"class":199},"dir",[128,70390,70391],{"class":138},"(e.target)\n",[128,70393,70394],{"class":130,"line":495},[128,70395,160],{"emptyLinePlaceholder":159},[128,70397,70398],{"class":130,"line":507},[128,70399,70400],{"class":3814},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[128,70402,70403],{"class":130,"line":519},[128,70404,70405],{"class":3814},"      \u002F\u002F 通过tagName来进行判断\n",[128,70407,70408,70410,70413,70415,70418],{"class":130,"line":524},[128,70409,57861],{"class":134},[128,70411,70412],{"class":138}," (e.target.tagName ",[128,70414,57867],{"class":134},[128,70416,70417],{"class":176}," 'LI'",[128,70419,15968],{"class":138},[128,70421,70422,70425,70427],{"class":130,"line":529},[128,70423,70424],{"class":138},"        e.target.style.color ",[128,70426,270],{"class":134},[128,70428,70429],{"class":176}," 'red'\n",[128,70431,70432],{"class":130,"line":540},[128,70433,55780],{"class":138},[128,70435,70436],{"class":130,"line":555},[128,70437,917],{"class":138},[128,70439,70440,70442,70444],{"class":130,"line":576},[128,70441,55799],{"class":138},[128,70443,55196],{"class":54685},[128,70445,54692],{"class":138},[128,70447,70448,70450,70452],{"class":130,"line":584},[128,70449,55168],{"class":138},[128,70451,55183],{"class":54685},[128,70453,54692],{"class":138},[128,70455,70456],{"class":130,"line":593},[128,70457,160],{"emptyLinePlaceholder":159},[128,70459,70460,70462,70464],{"class":130,"line":598},[128,70461,55168],{"class":138},[128,70463,54020],{"class":54685},[128,70465,54692],{"class":138},[19,70467,70468],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,70470,70471],{},"if(e.target.ragName==='P') {}",[19,70473,70474],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,70476,70477],{},"通过事件委托的方式实现tab栏切换改造：",[19,70479,70480],{},"一定要记住自定义属性！！！！！！",[19,70482,70483],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,70485,70486],{},"id是自定义的属性名",[19,70488,70489],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[106,70491,70493],{"className":54018,"code":70492,"language":54020,"meta":112,"style":112},"\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",[114,70494,70495,70505,70519,70523,70531,70545,70565,70585,70597,70605,70611,70621,70631,70635,70639,70645,70657,70669,70681,70697,70701,70705,70711,70723,70735,70747,70757,70767,70771,70775,70783,70795,70805,70817,70821,70825,70833,70843,70853,70863,70867,70871,70881,70895,70907,70911,70915,70927,70937,70953,70963,70967,70971,70985,70995,71005,71009,71013,71019,71033,71037,71041,71049,71059,71063,71067,71076,71086,71090,71098,71106,71110,71118,71132,71146,71158,71166,71205,71237,71269,71301,71333,71341,71349,71363,71397,71431,71465,71499,71533,71541,71549,71557,71562,71567,71586,71591,71611,71619,71624,71637,71658,71671,71675,71680,71685,71698,71718,71746,71750,71754,71758,71766,71774,71778],{"__ignoreMap":112},[128,70496,70497,70499,70501,70503],{"class":130,"line":131},[128,70498,54682],{"class":138},[128,70500,54686],{"class":54685},[128,70502,54689],{"class":199},[128,70504,54692],{"class":138},[128,70506,70507,70509,70511,70513,70515,70517],{"class":130,"line":142},[128,70508,4657],{"class":138},[128,70510,54020],{"class":54685},[128,70512,54701],{"class":199},[128,70514,270],{"class":138},[128,70516,54706],{"class":176},[128,70518,54692],{"class":138},[128,70520,70521],{"class":130,"line":156},[128,70522,160],{"emptyLinePlaceholder":159},[128,70524,70525,70527,70529],{"class":130,"line":163},[128,70526,4657],{"class":138},[128,70528,54719],{"class":54685},[128,70530,54692],{"class":138},[128,70532,70533,70535,70537,70539,70541,70543],{"class":130,"line":183},[128,70534,55526],{"class":138},[128,70536,54729],{"class":54685},[128,70538,54732],{"class":199},[128,70540,270],{"class":138},[128,70542,54737],{"class":176},[128,70544,62507],{"class":138},[128,70546,70547,70549,70551,70553,70555,70557,70559,70561,70563],{"class":130,"line":188},[128,70548,55526],{"class":138},[128,70550,54729],{"class":54685},[128,70552,54748],{"class":199},[128,70554,270],{"class":138},[128,70556,54753],{"class":176},[128,70558,54756],{"class":199},[128,70560,270],{"class":138},[128,70562,54761],{"class":176},[128,70564,62507],{"class":138},[128,70566,70567,70569,70571,70573,70575,70577,70579,70581,70583],{"class":130,"line":193},[128,70568,55526],{"class":138},[128,70570,54729],{"class":54685},[128,70572,18442],{"class":199},[128,70574,270],{"class":138},[128,70576,54776],{"class":176},[128,70578,54756],{"class":199},[128,70580,270],{"class":138},[128,70582,54783],{"class":176},[128,70584,62507],{"class":138},[128,70586,70587,70589,70591,70593,70595],{"class":130,"line":206},[128,70588,55526],{"class":138},[128,70590,2752],{"class":54685},[128,70592,67003],{"class":138},[128,70594,2752],{"class":54685},[128,70596,54692],{"class":138},[128,70598,70599,70601,70603],{"class":130,"line":221},[128,70600,55526],{"class":138},[128,70602,3659],{"class":54685},[128,70604,54692],{"class":138},[128,70606,70607,70609],{"class":130,"line":230},[128,70608,9960],{"class":54685},[128,70610,1959],{"class":138},[128,70612,70613,70615,70617,70619],{"class":130,"line":235},[128,70614,58087],{"class":166},[128,70616,1967],{"class":138},[128,70618,2452],{"class":166},[128,70620,4905],{"class":138},[128,70622,70623,70625,70627,70629],{"class":130,"line":244},[128,70624,58076],{"class":166},[128,70626,1967],{"class":138},[128,70628,2452],{"class":166},[128,70630,4905],{"class":138},[128,70632,70633],{"class":130,"line":287},[128,70634,5773],{"class":138},[128,70636,70637],{"class":130,"line":301},[128,70638,160],{"emptyLinePlaceholder":159},[128,70640,70641,70643],{"class":130,"line":310},[128,70642,67054],{"class":199},[128,70644,1959],{"class":138},[128,70646,70647,70649,70651,70653,70655],{"class":130,"line":323},[128,70648,58152],{"class":166},[128,70650,1967],{"class":138},[128,70652,67065],{"class":166},[128,70654,54875],{"class":134},[128,70656,4905],{"class":138},[128,70658,70659,70661,70663,70665,70667],{"class":130,"line":330},[128,70660,58166],{"class":166},[128,70662,1967],{"class":138},[128,70664,67078],{"class":166},[128,70666,54875],{"class":134},[128,70668,4905],{"class":138},[128,70670,70671,70673,70675,70677,70679],{"class":130,"line":335},[128,70672,58087],{"class":166},[128,70674,1967],{"class":138},[128,70676,4449],{"class":166},[128,70678,54875],{"class":134},[128,70680,4905],{"class":138},[128,70682,70683,70685,70687,70689,70691,70693,70695],{"class":130,"line":340},[128,70684,65356],{"class":166},[128,70686,1967],{"class":138},[128,70688,2592],{"class":166},[128,70690,54875],{"class":134},[128,70692,54904],{"class":166},[128,70694,65623],{"class":166},[128,70696,4905],{"class":138},[128,70698,70699],{"class":130,"line":351},[128,70700,5773],{"class":138},[128,70702,70703],{"class":130,"line":384},[128,70704,160],{"emptyLinePlaceholder":159},[128,70706,70707,70709],{"class":130,"line":414},[128,70708,67123],{"class":199},[128,70710,1959],{"class":138},[128,70712,70713,70715,70717,70719,70721],{"class":130,"line":419},[128,70714,58152],{"class":166},[128,70716,1967],{"class":138},[128,70718,4061],{"class":166},[128,70720,4078],{"class":134},[128,70722,4905],{"class":138},[128,70724,70725,70727,70729,70731,70733],{"class":130,"line":424},[128,70726,58166],{"class":166},[128,70728,1967],{"class":138},[128,70730,4654],{"class":166},[128,70732,54875],{"class":134},[128,70734,4905],{"class":138},[128,70736,70737,70739,70741,70743,70745],{"class":130,"line":434},[128,70738,60739],{"class":166},[128,70740,1967],{"class":138},[128,70742,4654],{"class":166},[128,70744,54875],{"class":134},[128,70746,4905],{"class":138},[128,70748,70749,70751,70753,70755],{"class":130,"line":447},[128,70750,58390],{"class":166},[128,70752,1967],{"class":138},[128,70754,54860],{"class":166},[128,70756,4905],{"class":138},[128,70758,70759,70761,70763,70765],{"class":130,"line":459},[128,70760,58401],{"class":166},[128,70762,1967],{"class":138},[128,70764,55051],{"class":166},[128,70766,4905],{"class":138},[128,70768,70769],{"class":130,"line":471},[128,70770,5773],{"class":138},[128,70772,70773],{"class":130,"line":483},[128,70774,160],{"emptyLinePlaceholder":159},[128,70776,70777,70779,70781],{"class":130,"line":495},[128,70778,67123],{"class":199},[128,70780,67196],{"class":54685},[128,70782,1959],{"class":138},[128,70784,70785,70787,70789,70791,70793],{"class":130,"line":507},[128,70786,58303],{"class":166},[128,70788,1967],{"class":138},[128,70790,4549],{"class":166},[128,70792,54875],{"class":134},[128,70794,4905],{"class":138},[128,70796,70797,70799,70801,70803],{"class":130,"line":519},[128,70798,65713],{"class":166},[128,70800,1967],{"class":138},[128,70802,67219],{"class":166},[128,70804,4905],{"class":138},[128,70806,70807,70809,70811,70813,70815],{"class":130,"line":524},[128,70808,65379],{"class":166},[128,70810,1967],{"class":138},[128,70812,4449],{"class":166},[128,70814,54875],{"class":134},[128,70816,4905],{"class":138},[128,70818,70819],{"class":130,"line":529},[128,70820,5773],{"class":138},[128,70822,70823],{"class":130,"line":540},[128,70824,160],{"emptyLinePlaceholder":159},[128,70826,70827,70829,70831],{"class":130,"line":555},[128,70828,67123],{"class":199},[128,70830,64671],{"class":54685},[128,70832,1959],{"class":138},[128,70834,70835,70837,70839,70841],{"class":130,"line":576},[128,70836,58113],{"class":166},[128,70838,1967],{"class":138},[128,70840,58118],{"class":166},[128,70842,4905],{"class":138},[128,70844,70845,70847,70849,70851],{"class":130,"line":584},[128,70846,58390],{"class":166},[128,70848,1967],{"class":138},[128,70850,54860],{"class":166},[128,70852,4905],{"class":138},[128,70854,70855,70857,70859,70861],{"class":130,"line":593},[128,70856,58401],{"class":166},[128,70858,1967],{"class":138},[128,70860,54963],{"class":166},[128,70862,4905],{"class":138},[128,70864,70865],{"class":130,"line":598},[128,70866,5773],{"class":138},[128,70868,70869],{"class":130,"line":603},[128,70870,160],{"emptyLinePlaceholder":159},[128,70872,70873,70875,70877,70879],{"class":130,"line":614},[128,70874,67123],{"class":199},[128,70876,64671],{"class":54685},[128,70878,58456],{"class":54685},[128,70880,1959],{"class":138},[128,70882,70883,70885,70887,70889,70891,70893],{"class":130,"line":625},[128,70884,58087],{"class":166},[128,70886,1967],{"class":138},[128,70888,2452],{"class":166},[128,70890,12496],{"class":166},[128,70892,54875],{"class":134},[128,70894,4905],{"class":138},[128,70896,70897,70899,70901,70903,70905],{"class":130,"line":633},[128,70898,58303],{"class":166},[128,70900,1967],{"class":138},[128,70902,4298],{"class":166},[128,70904,54875],{"class":134},[128,70906,4905],{"class":138},[128,70908,70909],{"class":130,"line":649},[128,70910,5773],{"class":138},[128,70912,70913],{"class":130,"line":660},[128,70914,160],{"emptyLinePlaceholder":159},[128,70916,70917,70919,70921,70923,70925],{"class":130,"line":673},[128,70918,67123],{"class":199},[128,70920,64671],{"class":54685},[128,70922,58456],{"class":54685},[128,70924,5010],{"class":54685},[128,70926,1959],{"class":138},[128,70928,70929,70931,70933,70935],{"class":130,"line":678},[128,70930,67348],{"class":166},[128,70932,1967],{"class":138},[128,70934,58118],{"class":166},[128,70936,4905],{"class":138},[128,70938,70939,70941,70943,70945,70947,70949,70951],{"class":130,"line":683},[128,70940,65611],{"class":166},[128,70942,1967],{"class":138},[128,70944,409],{"class":166},[128,70946,54875],{"class":134},[128,70948,54904],{"class":166},[128,70950,67369],{"class":166},[128,70952,4905],{"class":138},[128,70954,70955,70957,70959,70961],{"class":130,"line":693},[128,70956,60796],{"class":166},[128,70958,1967],{"class":138},[128,70960,65748],{"class":166},[128,70962,4905],{"class":138},[128,70964,70965],{"class":130,"line":702},[128,70966,5773],{"class":138},[128,70968,70969],{"class":130,"line":709},[128,70970,160],{"emptyLinePlaceholder":159},[128,70972,70973,70975,70977,70979,70981,70983],{"class":130,"line":723},[128,70974,67123],{"class":199},[128,70976,64671],{"class":54685},[128,70978,58456],{"class":54685},[128,70980,5010],{"class":54685},[128,70982,67402],{"class":199},[128,70984,1959],{"class":138},[128,70986,70987,70989,70991,70993],{"class":130,"line":732},[128,70988,65170],{"class":166},[128,70990,1967],{"class":138},[128,70992,67413],{"class":166},[128,70994,4905],{"class":138},[128,70996,70997,70999,71001,71003],{"class":130,"line":744},[128,70998,60796],{"class":166},[128,71000,1967],{"class":138},[128,71002,67413],{"class":166},[128,71004,4905],{"class":138},[128,71006,71007],{"class":130,"line":749},[128,71008,5773],{"class":138},[128,71010,71011],{"class":130,"line":754},[128,71012,160],{"emptyLinePlaceholder":159},[128,71014,71015,71017],{"class":130,"line":764},[128,71016,67438],{"class":199},[128,71018,1959],{"class":138},[128,71020,71021,71023,71025,71027,71029,71031],{"class":130,"line":782},[128,71022,58076],{"class":166},[128,71024,1967],{"class":138},[128,71026,2452],{"class":166},[128,71028,67451],{"class":166},[128,71030,54875],{"class":134},[128,71032,4905],{"class":138},[128,71034,71035],{"class":130,"line":787},[128,71036,5773],{"class":138},[128,71038,71039],{"class":130,"line":795},[128,71040,160],{"emptyLinePlaceholder":159},[128,71042,71043,71045,71047],{"class":130,"line":807},[128,71044,67438],{"class":199},[128,71046,65553],{"class":199},[128,71048,1959],{"class":138},[128,71050,71051,71053,71055,71057],{"class":130,"line":813},[128,71052,58390],{"class":166},[128,71054,1967],{"class":138},[128,71056,58118],{"class":166},[128,71058,4905],{"class":138},[128,71060,71061],{"class":130,"line":818},[128,71062,5773],{"class":138},[128,71064,71065],{"class":130,"line":835},[128,71066,160],{"emptyLinePlaceholder":159},[128,71068,71069,71071,71074],{"class":130,"line":851},[128,71070,67438],{"class":199},[128,71072,71073],{"class":199}," .active",[128,71075,1959],{"class":138},[128,71077,71078,71080,71082,71084],{"class":130,"line":867},[128,71079,58390],{"class":166},[128,71081,1967],{"class":138},[128,71083,64248],{"class":166},[128,71085,4905],{"class":138},[128,71087,71088],{"class":130,"line":872},[128,71089,5773],{"class":138},[128,71091,71092,71094,71096],{"class":130,"line":878},[128,71093,55799],{"class":138},[128,71095,3659],{"class":54685},[128,71097,54692],{"class":138},[128,71099,71100,71102,71104],{"class":130,"line":887},[128,71101,55168],{"class":138},[128,71103,54719],{"class":54685},[128,71105,54692],{"class":138},[128,71107,71108],{"class":130,"line":896},[128,71109,160],{"emptyLinePlaceholder":159},[128,71111,71112,71114,71116],{"class":130,"line":905},[128,71113,4657],{"class":138},[128,71115,55183],{"class":54685},[128,71117,54692],{"class":138},[128,71119,71120,71122,71124,71126,71128,71130],{"class":130,"line":914},[128,71121,55526],{"class":138},[128,71123,54994],{"class":54685},[128,71125,56868],{"class":199},[128,71127,270],{"class":138},[128,71129,67553],{"class":176},[128,71131,54692],{"class":138},[128,71133,71134,71136,71138,71140,71142,71144],{"class":130,"line":920},[128,71135,54726],{"class":138},[128,71137,54994],{"class":54685},[128,71139,56868],{"class":199},[128,71141,270],{"class":138},[128,71143,67568],{"class":176},[128,71145,54692],{"class":138},[128,71147,71148,71150,71152,71154,71156],{"class":130,"line":926},[128,71149,58615],{"class":138},[128,71151,72],{"class":54685},[128,71153,67579],{"class":138},[128,71155,72],{"class":54685},[128,71157,54692],{"class":138},[128,71159,71160,71162,71164],{"class":130,"line":938},[128,71161,58615],{"class":138},[128,71163,4752],{"class":54685},[128,71165,54692],{"class":138},[128,71167,71168,71170,71172,71174,71176,71178,71180,71182,71184,71186,71188,71190,71192,71195,71197,71199,71201,71203],{"class":130,"line":943},[128,71169,58683],{"class":138},[128,71171,29],{"class":54685},[128,71173,64431],{"class":138},[128,71175,3989],{"class":54685},[128,71177,56868],{"class":199},[128,71179,270],{"class":138},[128,71181,63086],{"class":176},[128,71183,64436],{"class":199},[128,71185,270],{"class":138},[128,71187,67614],{"class":176},[128,71189,57332],{"class":199},[128,71191,270],{"class":138},[128,71193,71194],{"class":176},"\"0\"",[128,71196,67617],{"class":138},[128,71198,3989],{"class":54685},[128,71200,58695],{"class":138},[128,71202,29],{"class":54685},[128,71204,54692],{"class":138},[128,71206,71207,71209,71211,71213,71215,71217,71219,71221,71223,71225,71227,71229,71231,71233,71235],{"class":130,"line":948},[128,71208,58683],{"class":138},[128,71210,29],{"class":54685},[128,71212,64431],{"class":138},[128,71214,3989],{"class":54685},[128,71216,64436],{"class":199},[128,71218,270],{"class":138},[128,71220,67614],{"class":176},[128,71222,57332],{"class":199},[128,71224,270],{"class":138},[128,71226,7246],{"class":176},[128,71228,67644],{"class":138},[128,71230,3989],{"class":54685},[128,71232,58695],{"class":138},[128,71234,29],{"class":54685},[128,71236,54692],{"class":138},[128,71238,71239,71241,71243,71245,71247,71249,71251,71253,71255,71257,71259,71261,71263,71265,71267],{"class":130,"line":958},[128,71240,58683],{"class":138},[128,71242,29],{"class":54685},[128,71244,64431],{"class":138},[128,71246,3989],{"class":54685},[128,71248,64436],{"class":199},[128,71250,270],{"class":138},[128,71252,67614],{"class":176},[128,71254,57332],{"class":199},[128,71256,270],{"class":138},[128,71258,7269],{"class":176},[128,71260,67671],{"class":138},[128,71262,3989],{"class":54685},[128,71264,58695],{"class":138},[128,71266,29],{"class":54685},[128,71268,54692],{"class":138},[128,71270,71271,71273,71275,71277,71279,71281,71283,71285,71287,71289,71291,71293,71295,71297,71299],{"class":130,"line":974},[128,71272,58683],{"class":138},[128,71274,29],{"class":54685},[128,71276,64431],{"class":138},[128,71278,3989],{"class":54685},[128,71280,64436],{"class":199},[128,71282,270],{"class":138},[128,71284,67614],{"class":176},[128,71286,57332],{"class":199},[128,71288,270],{"class":138},[128,71290,7282],{"class":176},[128,71292,67698],{"class":138},[128,71294,3989],{"class":54685},[128,71296,58695],{"class":138},[128,71298,29],{"class":54685},[128,71300,54692],{"class":138},[128,71302,71303,71305,71307,71309,71311,71313,71315,71317,71319,71321,71323,71325,71327,71329,71331],{"class":130,"line":985},[128,71304,58683],{"class":138},[128,71306,29],{"class":54685},[128,71308,64431],{"class":138},[128,71310,3989],{"class":54685},[128,71312,64436],{"class":199},[128,71314,270],{"class":138},[128,71316,67614],{"class":176},[128,71318,57332],{"class":199},[128,71320,270],{"class":138},[128,71322,7295],{"class":176},[128,71324,67725],{"class":138},[128,71326,3989],{"class":54685},[128,71328,58695],{"class":138},[128,71330,29],{"class":54685},[128,71332,54692],{"class":138},[128,71334,71335,71337,71339],{"class":130,"line":990},[128,71336,58788],{"class":138},[128,71338,4752],{"class":54685},[128,71340,54692],{"class":138},[128,71342,71343,71345,71347],{"class":130,"line":1005},[128,71344,55159],{"class":138},[128,71346,54994],{"class":54685},[128,71348,54692],{"class":138},[128,71350,71351,71353,71355,71357,71359,71361],{"class":130,"line":1017},[128,71352,54726],{"class":138},[128,71354,54994],{"class":54685},[128,71356,56868],{"class":199},[128,71358,270],{"class":138},[128,71360,67762],{"class":176},[128,71362,54692],{"class":138},[128,71364,71365,71367,71369,71371,71373,71375,71377,71379,71381,71383,71385,71387,71389,71391,71393,71395],{"class":130,"line":1022},[128,71366,58615],{"class":138},[128,71368,54994],{"class":54685},[128,71370,56868],{"class":199},[128,71372,270],{"class":138},[128,71374,67777],{"class":176},[128,71376,64431],{"class":138},[128,71378,5074],{"class":54685},[128,71380,58620],{"class":199},[128,71382,270],{"class":138},[128,71384,67788],{"class":176},[128,71386,58628],{"class":199},[128,71388,270],{"class":138},[128,71390,11209],{"class":176},[128,71392,67797],{"class":138},[128,71394,54994],{"class":54685},[128,71396,54692],{"class":138},[128,71398,71399,71401,71403,71405,71407,71409,71411,71413,71415,71417,71419,71421,71423,71425,71427,71429],{"class":130,"line":1027},[128,71400,58615],{"class":138},[128,71402,54994],{"class":54685},[128,71404,56868],{"class":199},[128,71406,270],{"class":138},[128,71408,66002],{"class":176},[128,71410,64431],{"class":138},[128,71412,5074],{"class":54685},[128,71414,58620],{"class":199},[128,71416,270],{"class":138},[128,71418,67824],{"class":176},[128,71420,58628],{"class":199},[128,71422,270],{"class":138},[128,71424,11209],{"class":176},[128,71426,67797],{"class":138},[128,71428,54994],{"class":54685},[128,71430,54692],{"class":138},[128,71432,71433,71435,71437,71439,71441,71443,71445,71447,71449,71451,71453,71455,71457,71459,71461,71463],{"class":130,"line":1033},[128,71434,58615],{"class":138},[128,71436,54994],{"class":54685},[128,71438,56868],{"class":199},[128,71440,270],{"class":138},[128,71442,66002],{"class":176},[128,71444,64431],{"class":138},[128,71446,5074],{"class":54685},[128,71448,58620],{"class":199},[128,71450,270],{"class":138},[128,71452,67859],{"class":176},[128,71454,58628],{"class":199},[128,71456,270],{"class":138},[128,71458,11209],{"class":176},[128,71460,67797],{"class":138},[128,71462,54994],{"class":54685},[128,71464,54692],{"class":138},[128,71466,71467,71469,71471,71473,71475,71477,71479,71481,71483,71485,71487,71489,71491,71493,71495,71497],{"class":130,"line":1038},[128,71468,58615],{"class":138},[128,71470,54994],{"class":54685},[128,71472,56868],{"class":199},[128,71474,270],{"class":138},[128,71476,66002],{"class":176},[128,71478,64431],{"class":138},[128,71480,5074],{"class":54685},[128,71482,58620],{"class":199},[128,71484,270],{"class":138},[128,71486,67894],{"class":176},[128,71488,58628],{"class":199},[128,71490,270],{"class":138},[128,71492,11209],{"class":176},[128,71494,67797],{"class":138},[128,71496,54994],{"class":54685},[128,71498,54692],{"class":138},[128,71500,71501,71503,71505,71507,71509,71511,71513,71515,71517,71519,71521,71523,71525,71527,71529,71531],{"class":130,"line":1050},[128,71502,58615],{"class":138},[128,71504,54994],{"class":54685},[128,71506,56868],{"class":199},[128,71508,270],{"class":138},[128,71510,66002],{"class":176},[128,71512,64431],{"class":138},[128,71514,5074],{"class":54685},[128,71516,58620],{"class":199},[128,71518,270],{"class":138},[128,71520,67929],{"class":176},[128,71522,58628],{"class":199},[128,71524,270],{"class":138},[128,71526,11209],{"class":176},[128,71528,67797],{"class":138},[128,71530,54994],{"class":54685},[128,71532,54692],{"class":138},[128,71534,71535,71537,71539],{"class":130,"line":1055},[128,71536,55159],{"class":138},[128,71538,54994],{"class":54685},[128,71540,54692],{"class":138},[128,71542,71543,71545,71547],{"class":130,"line":1060},[128,71544,55799],{"class":138},[128,71546,54994],{"class":54685},[128,71548,54692],{"class":138},[128,71550,71551,71553,71555],{"class":130,"line":1070},[128,71552,55526],{"class":138},[128,71554,55196],{"class":54685},[128,71556,54692],{"class":138},[128,71558,71559],{"class":130,"line":1086},[128,71560,71561],{"class":3814},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[128,71563,71564],{"class":130,"line":1095},[128,71565,71566],{"class":3814},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[128,71568,71569,71571,71573,71575,71577,71579,71581,71584],{"class":130,"line":1100},[128,71570,14748],{"class":134},[128,71572,64671],{"class":166},[128,71574,170],{"class":134},[128,71576,57777],{"class":138},[128,71578,57780],{"class":199},[128,71580,253],{"class":138},[128,71582,71583],{"class":176},"'.tab-nav ul'",[128,71585,180],{"class":138},[128,71587,71588],{"class":130,"line":1113},[128,71589,71590],{"class":3814},"    \u002F\u002F 2.添加事件\n",[128,71592,71593,71595,71597,71599,71601,71603,71605,71607,71609],{"class":130,"line":1124},[128,71594,70332],{"class":138},[128,71596,61193],{"class":199},[128,71598,253],{"class":138},[128,71600,61198],{"class":176},[128,71602,258],{"class":138},[128,71604,57830],{"class":134},[128,71606,5260],{"class":138},[128,71608,3830],{"class":266},[128,71610,15968],{"class":138},[128,71612,71613,71615,71617],{"class":130,"line":1129},[128,71614,61624],{"class":138},[128,71616,70388],{"class":199},[128,71618,70391],{"class":138},[128,71620,71621],{"class":130,"line":1134},[128,71622,71623],{"class":3814},"      \u002F\u002Fe.targer是我们点击的对象\n",[128,71625,71626,71628,71630,71632,71635],{"class":130,"line":1150},[128,71627,57861],{"class":134},[128,71629,70412],{"class":138},[128,71631,57867],{"class":134},[128,71633,71634],{"class":176}," 'A'",[128,71636,15968],{"class":138},[128,71638,71639,71641,71643,71645,71648,71650,71652,71654,71656],{"class":130,"line":1164},[128,71640,55307],{"class":138},[128,71642,57780],{"class":199},[128,71644,253],{"class":138},[128,71646,71647],{"class":176},"'.active'",[128,71649,60383],{"class":138},[128,71651,60386],{"class":199},[128,71653,253],{"class":138},[128,71655,68092],{"class":176},[128,71657,180],{"class":138},[128,71659,71660,71663,71665,71667,71669],{"class":130,"line":1178},[128,71661,71662],{"class":138},"        e.target.classList.",[128,71664,8892],{"class":199},[128,71666,253],{"class":138},[128,71668,68092],{"class":176},[128,71670,180],{"class":138},[128,71672,71673],{"class":130,"line":1183},[128,71674,160],{"emptyLinePlaceholder":159},[128,71676,71677],{"class":130,"line":1199},[128,71678,71679],{"class":3814},"        \u002F\u002F 下面大盒子模块\n",[128,71681,71682],{"class":130,"line":1214},[128,71683,71684],{"class":3814},"        \u002F\u002F console.log(e.target.dataset.id)\n",[128,71686,71687,71689,71691,71693,71695],{"class":130,"line":1229},[128,71688,64649],{"class":134},[128,71690,6603],{"class":166},[128,71692,170],{"class":134},[128,71694,48951],{"class":134},[128,71696,71697],{"class":138},"e.target.dataset.id\n",[128,71699,71700,71702,71704,71706,71708,71710,71712,71714,71716],{"class":130,"line":1234},[128,71701,55307],{"class":138},[128,71703,57780],{"class":199},[128,71705,253],{"class":138},[128,71707,68140],{"class":176},[128,71709,60383],{"class":138},[128,71711,60386],{"class":199},[128,71713,253],{"class":138},[128,71715,68092],{"class":176},[128,71717,180],{"class":138},[128,71719,71720,71722,71724,71726,71728,71730,71732,71734,71736,71738,71740,71742,71744],{"class":130,"line":1239},[128,71721,55307],{"class":138},[128,71723,57780],{"class":199},[128,71725,253],{"class":138},[128,71727,68166],{"class":176},[128,71729,4191],{"class":138},[128,71731,48951],{"class":134},[128,71733,28605],{"class":166},[128,71735,60412],{"class":176},[128,71737,60383],{"class":138},[128,71739,8892],{"class":199},[128,71741,253],{"class":138},[128,71743,68092],{"class":176},[128,71745,180],{"class":138},[128,71747,71748],{"class":130,"line":1251},[128,71749,160],{"emptyLinePlaceholder":159},[128,71751,71752],{"class":130,"line":1256},[128,71753,55780],{"class":138},[128,71755,71756],{"class":130,"line":1261},[128,71757,917],{"class":138},[128,71759,71760,71762,71764],{"class":130,"line":1271},[128,71761,55799],{"class":138},[128,71763,55196],{"class":54685},[128,71765,54692],{"class":138},[128,71767,71768,71770,71772],{"class":130,"line":1287},[128,71769,55168],{"class":138},[128,71771,55183],{"class":54685},[128,71773,54692],{"class":138},[128,71775,71776],{"class":130,"line":1296},[128,71777,160],{"emptyLinePlaceholder":159},[128,71779,71780,71782,71784],{"class":130,"line":1301},[128,71781,55168],{"class":138},[128,71783,54020],{"class":54685},[128,71785,54692],{"class":138},[72,71787,71789],{"id":71788},"_333-页面加载事件","3.3.3 页面加载事件",[26,71791,71792],{},[29,71793,71794],{},"load",[19,71796,71797],{},[5074,71798],{"alt":112,"src":71799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,71801,71802],{},"window代表整个窗口，比document还要大",[19,71804,71805],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,71807,71808],{},"img.addEventListener('load', function () {",[19,71810,71811],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,71813,55846],{},[26,71815,71816],{"start":142},[29,71817,71818],{},"DOMContentLoaded",[19,71820,71821],{},[5074,71822],{"alt":112,"src":71823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,71825,71826],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[72,71828,71830],{"id":71829},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,71832,71833],{},[5074,71834],{"alt":112,"src":71835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,71837,71838],{},[5074,71839],{"alt":112,"src":71840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,71842,71843],{},[5074,71844],{"alt":112,"src":71845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,71847,71848],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,71850,71851],{},"获得的是数字型数据，不带单位",[19,71853,71854],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,71856,71857],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,71859,71860],{},"它是通过document.documentElement来获取",[19,71862,71863],{},[5074,71864],{"alt":112,"src":71865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,71867,71868],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[72,71870,71872],{"id":71871},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,71874,71875],{},[5074,71876],{"alt":112,"src":71877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,71879,71880],{},[5074,71881],{"alt":112,"src":71882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[72,71884,71886],{"id":71885},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,71888,71889],{},[5074,71890],{"alt":112,"src":71891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,71893,71894],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,71896,71897],{},[5074,71898],{"alt":112,"src":71899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,71901,71902],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,71904,71905],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,71907,71908],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,71910,71911],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,71913,71914],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,71916,71917],{},[5074,71918],{"alt":112,"src":71919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,71921,71922],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,71924,71925],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,71927,71928],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,71930,71931],{},"e.pageX-box.getBoundingClientRect()",[72,71933,71935],{"id":71934},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,71937,71938],{},[5074,71939],{"alt":112,"src":71940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,71942,71943],{},"这个是相对于视口来说的，它是个方法，不是属性值",[72,71945,71947],{"id":71946},"_338-总结","3.3.8 总结",[19,71949,71950],{},[5074,71951],{"alt":112,"src":71952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,71954,71955],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,71957,71958],{},"修改盒子的宽高只能通过width和height来实现",[72,71960,71962],{"id":71961},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[106,71964,71966],{"className":54018,"code":71965,"language":54020,"meta":112,"style":112},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[114,71967,71968,71973,71978,71983,71988],{"__ignoreMap":112},[128,71969,71970],{"class":130,"line":131},[128,71971,71972],{"class":138},"\u002F* 页面滑动 *\u002F\n",[128,71974,71975],{"class":130,"line":142},[128,71976,71977],{"class":138},"html {\n",[128,71979,71980],{"class":130,"line":156},[128,71981,71982],{"class":138},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[128,71984,71985],{"class":130,"line":163},[128,71986,71987],{"class":138},"  scroll-behavior: smooth;\n",[128,71989,71990],{"class":130,"line":183},[128,71991,2694],{"class":138},[19,71993,71994],{},"默认是auto",[72,71996,71998],{"id":71997},"_3310-日期对象","3.3.10 日期对象",[25485,72000,72002],{"id":72001},"_33101-实例化","3.3.10.1 实例化",[19,72004,72005],{},[5074,72006],{"alt":112,"src":72007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[25485,72009,72011],{"id":72010},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,72013,72014],{},[5074,72015],{"alt":112,"src":72016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,72018,72019],{},"月份+1",[19,72021,72022],{},"老外认为第一天为0，星期天",[19,72024,72025],{},"方法使用的时候必须要跟括号",[19,72027,72028],{},"快速获得日期",[19,72030,72031],{},"\u002F\u002F 得到年月日",[19,72033,72034],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,72036,72037],{},"\u002F\u002F 得到当地日期",[19,72039,72040],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,72042,72043],{},"\u002F\u002F 得到当地时间",[19,72045,72046],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,72048,72049],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,72051,72052],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[55196,72054,72055],{},"\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,72057,72058],{},"学会去封装函数！",[25485,72060,72062],{"id":72061},"_33103-时间戳","3.3.10.3 时间戳",[19,72064,72065],{},[5074,72066],{"alt":112,"src":72067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,72069,72070],{},[5074,72071],{"alt":112,"src":72072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,72074,72075],{},"三种方法记住一个就可以",[72,72077,72079],{"id":72078},"_3311-节点操作","3.3.11 节点操作",[25485,72081,72083],{"id":72082},"_33111-dom节点","3.3.11.1 DOM节点",[19,72085,72086],{},[5074,72087],{"alt":112,"src":72088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,72090,72091],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[25485,72093,72095],{"id":72094},"_33112-查找节点","3.3.11.2 查找节点",[19,72097,72098],{},"前边的document.querySelector()是获取的元素",[19,72100,72101],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,72103,72104],{},[5074,72105],{"alt":112,"src":72106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[26,72108,72109],{},[29,72110,72111],{},"父节点",[19,72113,72114],{},[5074,72115],{"alt":112,"src":72116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[26,72118,72119],{"start":142},[29,72120,72121],{},"子节点",[19,72123,72124],{},[5074,72125],{"alt":112,"src":72126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,72128,72129],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,72131,72132],{},"children获得的是伪数组，是亲儿子",[26,72134,72135],{"start":156},[29,72136,72137],{},"兄弟节点",[19,72139,72140],{},[5074,72141],{"alt":112,"src":72142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[25485,72144,72146],{"id":72145},"_33113-增加节点","3.3.11.3 增加节点",[19,72148,72149],{},[5074,72150],{"alt":112,"src":72151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,72153,72154],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,72156,72157],{},[5074,72158],{"alt":112,"src":72159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,72161,72162],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,72164,72165],{},"下面是写法的部分展示，就按照下边的格式来写",[19,72167,72168],{},"例：",[55196,72170,72171],{},"\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,72173,72174],{},[5074,72175],{"alt":112,"src":72176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,72178,72179],{},"false只克隆标签，里边的内容不会克隆过来",[106,72181,72183],{"className":54018,"code":72182,"language":54020,"meta":112,"style":112},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[114,72184,72185],{"__ignoreMap":112},[128,72186,72187],{"class":130,"line":131},[128,72188,72182],{"class":138},[25485,72190,72192],{"id":72191},"_33114-删除节点","3.3.11.4 删除节点",[19,72194,72195],{},[5074,72196],{"alt":112,"src":72197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,72199,72200],{},"父亲删儿子",[19,72202,72203],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[72,72205,72207],{"id":72206},"_3312-m端事件","3.3.12 M端事件",[19,72209,72210],{},"M端就是移动端",[19,72212,72213],{},[5074,72214],{"alt":112,"src":72215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[72,72217,72219],{"id":72218},"_3313-插件","3.3.13 插件",[19,72221,72222],{},"要熟悉官网！！！",[19,72224,72225],{},[3989,72226,72227],{"href":72227,"rel":72228},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[27352],[19,72230,72231],{},[3989,72232,72233],{"href":72233,"rel":72234},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[27352],[72,72236,72238],{"id":72237},"_3314-学生信息表","3.3.14 学生信息表",[26,72240,72241,72244,72247,72250,72253,72256,72259,72262],{},[29,72242,72243],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[29,72245,72246],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[29,72248,72249],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[29,72251,72252],{},"用好表单元素自带的属性，value,name等",[29,72254,72255],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[29,72257,72258],{},"不要忘记事件对象",[29,72260,72261],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[29,72263,72264],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,72266,72267],{},"结构：",[106,72269,72271],{"className":54018,"code":72270,"language":54020,"meta":112,"style":112},"\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",[114,72272,72273,72283,72297,72301,72309,72323,72343,72364,72377,72401,72409,72413,72421,72434,72455,72483,72510,72515,72537,72557,72576,72584,72612,72634,72653,72672,72692,72712,72732,72740,72760,72768,72772,72785,72793,72801,72809,72822,72835,72848,72861,72874,72887,72900,72908,72916,72924,72929,72934,72939,72944,72949,72954,72959,72964,72969,72974,72979,72984,72989,72997,73005,73013,73017,73037,73056,73076,73096,73116,73136,73140,73145,73165,73170,73180,73185,73190,73210,73232,73237,73247,73251,73255,73260,73265,73294,73308,73323,73327,73331,73335,73340,73351,73364,73369,73374,73379,73384,73389,73393,73398,73403,73412,73417,73422,73434,73439,73446,73450,73455,73465,73470,73480,73485,73513,73534,73544,73564,73582,73599,73616,73633,73650,73654,73664,73669,73674,73679,73690,73694,73698,73702,73707,73712,73733,73745,73750,73755,73760,73774,73779,73786,73790,73794,73802,73806,73814,73818],{"__ignoreMap":112},[128,72274,72275,72277,72279,72281],{"class":130,"line":131},[128,72276,54682],{"class":138},[128,72278,54686],{"class":54685},[128,72280,54689],{"class":199},[128,72282,54692],{"class":138},[128,72284,72285,72287,72289,72291,72293,72295],{"class":130,"line":142},[128,72286,4657],{"class":138},[128,72288,54020],{"class":54685},[128,72290,54701],{"class":199},[128,72292,270],{"class":138},[128,72294,54706],{"class":176},[128,72296,54692],{"class":138},[128,72298,72299],{"class":130,"line":156},[128,72300,160],{"emptyLinePlaceholder":159},[128,72302,72303,72305,72307],{"class":130,"line":163},[128,72304,4657],{"class":138},[128,72306,54719],{"class":54685},[128,72308,54692],{"class":138},[128,72310,72311,72313,72315,72317,72319,72321],{"class":130,"line":183},[128,72312,55526],{"class":138},[128,72314,54729],{"class":54685},[128,72316,54732],{"class":199},[128,72318,270],{"class":138},[128,72320,54737],{"class":176},[128,72322,62507],{"class":138},[128,72324,72325,72327,72329,72331,72333,72335,72337,72339,72341],{"class":130,"line":188},[128,72326,55526],{"class":138},[128,72328,54729],{"class":54685},[128,72330,18442],{"class":199},[128,72332,270],{"class":138},[128,72334,54776],{"class":176},[128,72336,54756],{"class":199},[128,72338,270],{"class":138},[128,72340,54783],{"class":176},[128,72342,62507],{"class":138},[128,72344,72345,72347,72349,72351,72353,72355,72357,72359,72362],{"class":130,"line":193},[128,72346,55526],{"class":138},[128,72348,54729],{"class":54685},[128,72350,54748],{"class":199},[128,72352,270],{"class":138},[128,72354,54753],{"class":176},[128,72356,54756],{"class":199},[128,72358,270],{"class":138},[128,72360,72361],{"class":176},"\"ie=edge\"",[128,72363,62507],{"class":138},[128,72365,72366,72368,72370,72373,72375],{"class":130,"line":206},[128,72367,55526],{"class":138},[128,72369,2752],{"class":54685},[128,72371,72372],{"class":138},">学生信息管理\u003C\u002F",[128,72374,2752],{"class":54685},[128,72376,54692],{"class":138},[128,72378,72379,72381,72384,72387,72389,72392,72394,72396,72399],{"class":130,"line":221},[128,72380,55526],{"class":138},[128,72382,72383],{"class":54685},"link",[128,72385,72386],{"class":199}," rel",[128,72388,270],{"class":138},[128,72390,72391],{"class":176},"\"stylesheet\"",[128,72393,64436],{"class":199},[128,72395,270],{"class":138},[128,72397,72398],{"class":176},"\"css\u002Findex.css\"",[128,72400,62507],{"class":138},[128,72402,72403,72405,72407],{"class":130,"line":230},[128,72404,55168],{"class":138},[128,72406,54719],{"class":54685},[128,72408,54692],{"class":138},[128,72410,72411],{"class":130,"line":235},[128,72412,160],{"emptyLinePlaceholder":159},[128,72414,72415,72417,72419],{"class":130,"line":244},[128,72416,4657],{"class":138},[128,72418,55183],{"class":54685},[128,72420,54692],{"class":138},[128,72422,72423,72425,72427,72430,72432],{"class":130,"line":287},[128,72424,55526],{"class":138},[128,72426,10],{"class":54685},[128,72428,72429],{"class":138},">新增学员\u003C\u002F",[128,72431,10],{"class":54685},[128,72433,54692],{"class":138},[128,72435,72436,72438,72440,72442,72444,72446,72449,72451,72453],{"class":130,"line":301},[128,72437,55526],{"class":138},[128,72439,70003],{"class":54685},[128,72441,56868],{"class":199},[128,72443,270],{"class":138},[128,72445,66043],{"class":176},[128,72447,72448],{"class":199}," autocomplete",[128,72450,270],{"class":138},[128,72452,35245],{"class":176},[128,72454,54692],{"class":138},[128,72456,72457,72460,72462,72464,72466,72468,72470,72472,72475,72477,72479,72481],{"class":130,"line":310},[128,72458,72459],{"class":138},"    姓名：\u003C",[128,72461,643],{"class":54685},[128,72463,57205],{"class":199},[128,72465,270],{"class":138},[128,72467,66077],{"class":176},[128,72469,56868],{"class":199},[128,72471,270],{"class":138},[128,72473,72474],{"class":176},"\"uname\"",[128,72476,18442],{"class":199},[128,72478,270],{"class":138},[128,72480,72474],{"class":176},[128,72482,62507],{"class":138},[128,72484,72485,72488,72490,72492,72494,72496,72498,72500,72502,72504,72506,72508],{"class":130,"line":323},[128,72486,72487],{"class":138},"    年龄：\u003C",[128,72489,643],{"class":54685},[128,72491,57205],{"class":199},[128,72493,270],{"class":138},[128,72495,66077],{"class":176},[128,72497,56868],{"class":199},[128,72499,270],{"class":138},[128,72501,1204],{"class":176},[128,72503,18442],{"class":199},[128,72505,270],{"class":138},[128,72507,1204],{"class":176},[128,72509,62507],{"class":138},[128,72511,72512],{"class":130,"line":330},[128,72513,72514],{"class":138},"    性别:\n",[128,72516,72517,72519,72522,72524,72526,72529,72531,72533,72535],{"class":130,"line":335},[128,72518,54726],{"class":138},[128,72520,72521],{"class":54685},"select",[128,72523,18442],{"class":199},[128,72525,270],{"class":138},[128,72527,72528],{"class":176},"\"gender\"",[128,72530,56868],{"class":199},[128,72532,270],{"class":138},[128,72534,72528],{"class":176},[128,72536,54692],{"class":138},[128,72538,72539,72541,72544,72546,72548,72550,72553,72555],{"class":130,"line":340},[128,72540,58615],{"class":138},[128,72542,72543],{"class":54685},"option",[128,72545,70029],{"class":199},[128,72547,270],{"class":138},[128,72549,13488],{"class":176},[128,72551,72552],{"class":138},">男\u003C\u002F",[128,72554,72543],{"class":54685},[128,72556,54692],{"class":138},[128,72558,72559,72561,72563,72565,72567,72569,72572,72574],{"class":130,"line":351},[128,72560,58615],{"class":138},[128,72562,72543],{"class":54685},[128,72564,70029],{"class":199},[128,72566,270],{"class":138},[128,72568,13557],{"class":176},[128,72570,72571],{"class":138},">女\u003C\u002F",[128,72573,72543],{"class":54685},[128,72575,54692],{"class":138},[128,72577,72578,72580,72582],{"class":130,"line":384},[128,72579,55159],{"class":138},[128,72581,72521],{"class":54685},[128,72583,54692],{"class":138},[128,72585,72586,72589,72591,72593,72595,72597,72599,72601,72604,72606,72608,72610],{"class":130,"line":414},[128,72587,72588],{"class":138},"    薪资：\u003C",[128,72590,643],{"class":54685},[128,72592,57205],{"class":199},[128,72594,270],{"class":138},[128,72596,66077],{"class":176},[128,72598,56868],{"class":199},[128,72600,270],{"class":138},[128,72602,72603],{"class":176},"\"salary\"",[128,72605,18442],{"class":199},[128,72607,270],{"class":138},[128,72609,72603],{"class":176},[128,72611,62507],{"class":138},[128,72613,72614,72617,72619,72621,72623,72626,72628,72630,72632],{"class":130,"line":419},[128,72615,72616],{"class":138},"    就业城市：\u003C",[128,72618,72521],{"class":54685},[128,72620,18442],{"class":199},[128,72622,270],{"class":138},[128,72624,72625],{"class":176},"\"city\"",[128,72627,56868],{"class":199},[128,72629,270],{"class":138},[128,72631,72625],{"class":176},[128,72633,54692],{"class":138},[128,72635,72636,72638,72640,72642,72644,72646,72649,72651],{"class":130,"line":424},[128,72637,58615],{"class":138},[128,72639,72543],{"class":54685},[128,72641,70029],{"class":199},[128,72643,270],{"class":138},[128,72645,3110],{"class":176},[128,72647,72648],{"class":138},">北京\u003C\u002F",[128,72650,72543],{"class":54685},[128,72652,54692],{"class":138},[128,72654,72655,72657,72659,72661,72663,72665,72668,72670],{"class":130,"line":434},[128,72656,58615],{"class":138},[128,72658,72543],{"class":54685},[128,72660,70029],{"class":199},[128,72662,270],{"class":138},[128,72664,3124],{"class":176},[128,72666,72667],{"class":138},">上海\u003C\u002F",[128,72669,72543],{"class":54685},[128,72671,54692],{"class":138},[128,72673,72674,72676,72678,72680,72682,72685,72688,72690],{"class":130,"line":447},[128,72675,58615],{"class":138},[128,72677,72543],{"class":54685},[128,72679,70029],{"class":199},[128,72681,270],{"class":138},[128,72683,72684],{"class":176},"\"广州\"",[128,72686,72687],{"class":138},">广州\u003C\u002F",[128,72689,72543],{"class":54685},[128,72691,54692],{"class":138},[128,72693,72694,72696,72698,72700,72702,72705,72708,72710],{"class":130,"line":459},[128,72695,58615],{"class":138},[128,72697,72543],{"class":54685},[128,72699,70029],{"class":199},[128,72701,270],{"class":138},[128,72703,72704],{"class":176},"\"深圳\"",[128,72706,72707],{"class":138},">深圳\u003C\u002F",[128,72709,72543],{"class":54685},[128,72711,54692],{"class":138},[128,72713,72714,72716,72718,72720,72722,72725,72728,72730],{"class":130,"line":471},[128,72715,58615],{"class":138},[128,72717,72543],{"class":54685},[128,72719,70029],{"class":199},[128,72721,270],{"class":138},[128,72723,72724],{"class":176},"\"曹县\"",[128,72726,72727],{"class":138},">曹县\u003C\u002F",[128,72729,72543],{"class":54685},[128,72731,54692],{"class":138},[128,72733,72734,72736,72738],{"class":130,"line":483},[128,72735,55159],{"class":138},[128,72737,72521],{"class":54685},[128,72739,54692],{"class":138},[128,72741,72742,72744,72746,72748,72750,72753,72756,72758],{"class":130,"line":495},[128,72743,54726],{"class":138},[128,72745,57268],{"class":54685},[128,72747,56868],{"class":199},[128,72749,270],{"class":138},[128,72751,72752],{"class":176},"\"add\"",[128,72754,72755],{"class":138},">录入\u003C\u002F",[128,72757,57268],{"class":54685},[128,72759,54692],{"class":138},[128,72761,72762,72764,72766],{"class":130,"line":507},[128,72763,55799],{"class":138},[128,72765,70003],{"class":54685},[128,72767,54692],{"class":138},[128,72769,72770],{"class":130,"line":519},[128,72771,160],{"emptyLinePlaceholder":159},[128,72773,72774,72776,72778,72781,72783],{"class":130,"line":524},[128,72775,55526],{"class":138},[128,72777,10],{"class":54685},[128,72779,72780],{"class":138},">就业榜\u003C\u002F",[128,72782,10],{"class":54685},[128,72784,54692],{"class":138},[128,72786,72787,72789,72791],{"class":130,"line":529},[128,72788,55526],{"class":138},[128,72790,3891],{"class":54685},[128,72792,54692],{"class":138},[128,72794,72795,72797,72799],{"class":130,"line":540},[128,72796,54726],{"class":138},[128,72798,3894],{"class":54685},[128,72800,54692],{"class":138},[128,72802,72803,72805,72807],{"class":130,"line":555},[128,72804,58615],{"class":138},[128,72806,3897],{"class":54685},[128,72808,54692],{"class":138},[128,72810,72811,72813,72815,72818,72820],{"class":130,"line":576},[128,72812,58683],{"class":138},[128,72814,3900],{"class":54685},[128,72816,72817],{"class":138},">序号\u003C\u002F",[128,72819,3900],{"class":54685},[128,72821,54692],{"class":138},[128,72823,72824,72826,72828,72831,72833],{"class":130,"line":584},[128,72825,58683],{"class":138},[128,72827,3900],{"class":54685},[128,72829,72830],{"class":138},">姓名\u003C\u002F",[128,72832,3900],{"class":54685},[128,72834,54692],{"class":138},[128,72836,72837,72839,72841,72844,72846],{"class":130,"line":593},[128,72838,58683],{"class":138},[128,72840,3900],{"class":54685},[128,72842,72843],{"class":138},">年龄\u003C\u002F",[128,72845,3900],{"class":54685},[128,72847,54692],{"class":138},[128,72849,72850,72852,72854,72857,72859],{"class":130,"line":598},[128,72851,58683],{"class":138},[128,72853,3900],{"class":54685},[128,72855,72856],{"class":138},">性别\u003C\u002F",[128,72858,3900],{"class":54685},[128,72860,54692],{"class":138},[128,72862,72863,72865,72867,72870,72872],{"class":130,"line":603},[128,72864,58683],{"class":138},[128,72866,3900],{"class":54685},[128,72868,72869],{"class":138},">薪资\u003C\u002F",[128,72871,3900],{"class":54685},[128,72873,54692],{"class":138},[128,72875,72876,72878,72880,72883,72885],{"class":130,"line":614},[128,72877,58683],{"class":138},[128,72879,3900],{"class":54685},[128,72881,72882],{"class":138},">就业城市\u003C\u002F",[128,72884,3900],{"class":54685},[128,72886,54692],{"class":138},[128,72888,72889,72891,72893,72896,72898],{"class":130,"line":625},[128,72890,58683],{"class":138},[128,72892,3900],{"class":54685},[128,72894,72895],{"class":138},">操作\u003C\u002F",[128,72897,3900],{"class":54685},[128,72899,54692],{"class":138},[128,72901,72902,72904,72906],{"class":130,"line":633},[128,72903,58788],{"class":138},[128,72905,3897],{"class":54685},[128,72907,54692],{"class":138},[128,72909,72910,72912,72914],{"class":130,"line":649},[128,72911,55159],{"class":138},[128,72913,3894],{"class":54685},[128,72915,54692],{"class":138},[128,72917,72918,72920,72922],{"class":130,"line":660},[128,72919,54726],{"class":138},[128,72921,3938],{"class":54685},[128,72923,54692],{"class":138},[128,72925,72926],{"class":130,"line":673},[128,72927,72928],{"class":3814},"      \u003C!-- \n",[128,72930,72931],{"class":130,"line":678},[128,72932,72933],{"class":3814},"        \u003Ctr>\n",[128,72935,72936],{"class":130,"line":683},[128,72937,72938],{"class":3814},"          \u003Ctd>1001\u003C\u002Ftd>\n",[128,72940,72941],{"class":130,"line":693},[128,72942,72943],{"class":3814},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[128,72945,72946],{"class":130,"line":702},[128,72947,72948],{"class":3814},"          \u003Ctd>19\u003C\u002Ftd>\n",[128,72950,72951],{"class":130,"line":709},[128,72952,72953],{"class":3814},"          \u003Ctd>男\u003C\u002Ftd>\n",[128,72955,72956],{"class":130,"line":723},[128,72957,72958],{"class":3814},"          \u003Ctd>15000\u003C\u002Ftd>\n",[128,72960,72961],{"class":130,"line":732},[128,72962,72963],{"class":3814},"          \u003Ctd>上海\u003C\u002Ftd>\n",[128,72965,72966],{"class":130,"line":744},[128,72967,72968],{"class":3814},"          \u003Ctd>\n",[128,72970,72971],{"class":130,"line":749},[128,72972,72973],{"class":3814},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[128,72975,72976],{"class":130,"line":754},[128,72977,72978],{"class":3814},"          \u003C\u002Ftd>\n",[128,72980,72981],{"class":130,"line":764},[128,72982,72983],{"class":3814},"        \u003C\u002Ftr> \n",[128,72985,72986],{"class":130,"line":782},[128,72987,72988],{"class":3814},"        -->\n",[128,72990,72991,72993,72995],{"class":130,"line":787},[128,72992,55159],{"class":138},[128,72994,3938],{"class":54685},[128,72996,54692],{"class":138},[128,72998,72999,73001,73003],{"class":130,"line":795},[128,73000,55799],{"class":138},[128,73002,3891],{"class":54685},[128,73004,54692],{"class":138},[128,73006,73007,73009,73011],{"class":130,"line":807},[128,73008,55526],{"class":138},[128,73010,55196],{"class":54685},[128,73012,54692],{"class":138},[128,73014,73015],{"class":130,"line":813},[128,73016,63338],{"class":3814},[128,73018,73019,73021,73024,73026,73028,73030,73032,73035],{"class":130,"line":818},[128,73020,14748],{"class":134},[128,73022,73023],{"class":166}," uname",[128,73025,170],{"class":134},[128,73027,57777],{"class":138},[128,73029,57780],{"class":199},[128,73031,253],{"class":138},[128,73033,73034],{"class":176},"'.uname'",[128,73036,180],{"class":138},[128,73038,73039,73041,73043,73045,73047,73049,73051,73054],{"class":130,"line":835},[128,73040,14748],{"class":134},[128,73042,19209],{"class":166},[128,73044,170],{"class":134},[128,73046,57777],{"class":138},[128,73048,57780],{"class":199},[128,73050,253],{"class":138},[128,73052,73053],{"class":176},"'.age'",[128,73055,180],{"class":138},[128,73057,73058,73060,73063,73065,73067,73069,73071,73074],{"class":130,"line":851},[128,73059,14748],{"class":134},[128,73061,73062],{"class":166}," gender",[128,73064,170],{"class":134},[128,73066,57777],{"class":138},[128,73068,57780],{"class":199},[128,73070,253],{"class":138},[128,73072,73073],{"class":176},"'.gender'",[128,73075,180],{"class":138},[128,73077,73078,73080,73083,73085,73087,73089,73091,73094],{"class":130,"line":867},[128,73079,14748],{"class":134},[128,73081,73082],{"class":166}," salary",[128,73084,170],{"class":134},[128,73086,57777],{"class":138},[128,73088,57780],{"class":199},[128,73090,253],{"class":138},[128,73092,73093],{"class":176},"'.salary'",[128,73095,180],{"class":138},[128,73097,73098,73100,73103,73105,73107,73109,73111,73114],{"class":130,"line":872},[128,73099,14748],{"class":134},[128,73101,73102],{"class":166}," city",[128,73104,170],{"class":134},[128,73106,57777],{"class":138},[128,73108,57780],{"class":199},[128,73110,253],{"class":138},[128,73112,73113],{"class":176},"'.city'",[128,73115,180],{"class":138},[128,73117,73118,73120,73123,73125,73127,73129,73131,73134],{"class":130,"line":878},[128,73119,14748],{"class":134},[128,73121,73122],{"class":166}," tbody",[128,73124,170],{"class":134},[128,73126,57777],{"class":138},[128,73128,57780],{"class":199},[128,73130,253],{"class":138},[128,73132,73133],{"class":176},"'tbody'",[128,73135,180],{"class":138},[128,73137,73138],{"class":130,"line":887},[128,73139,160],{"emptyLinePlaceholder":159},[128,73141,73142],{"class":130,"line":896},[128,73143,73144],{"class":3814},"    \u002F\u002F 获取所有带有name属性的元素\n",[128,73146,73147,73149,73152,73154,73156,73158,73160,73163],{"class":130,"line":905},[128,73148,14748],{"class":134},[128,73150,73151],{"class":166}," items",[128,73153,170],{"class":134},[128,73155,57777],{"class":138},[128,73157,59061],{"class":199},[128,73159,253],{"class":138},[128,73161,73162],{"class":176},"'[name]'",[128,73164,180],{"class":138},[128,73166,73167],{"class":130,"line":914},[128,73168,73169],{"class":3814},"    \u002F\u002F 声明一个空的数组\n",[128,73171,73172,73174,73176,73178],{"class":130,"line":920},[128,73173,14748],{"class":134},[128,73175,61075],{"class":166},[128,73177,170],{"class":134},[128,73179,227],{"class":138},[128,73181,73182],{"class":130,"line":926},[128,73183,73184],{"class":3814},"    \u002F\u002F 1.录入模块\n",[128,73186,73187],{"class":130,"line":938},[128,73188,73189],{"class":3814},"    \u002F\u002F 1.1这是一个表单提交事件\n",[128,73191,73192,73194,73197,73199,73201,73203,73205,73208],{"class":130,"line":943},[128,73193,14748],{"class":134},[128,73195,73196],{"class":166}," info",[128,73198,170],{"class":134},[128,73200,57777],{"class":138},[128,73202,57780],{"class":199},[128,73204,253],{"class":138},[128,73206,73207],{"class":176},"'.info'",[128,73209,180],{"class":138},[128,73211,73212,73215,73217,73219,73222,73224,73226,73228,73230],{"class":130,"line":948},[128,73213,73214],{"class":138},"    info.",[128,73216,61193],{"class":199},[128,73218,253],{"class":138},[128,73220,73221],{"class":176},"'submit'",[128,73223,258],{"class":138},[128,73225,57830],{"class":134},[128,73227,5260],{"class":138},[128,73229,3830],{"class":266},[128,73231,15968],{"class":138},[128,73233,73234],{"class":130,"line":958},[128,73235,73236],{"class":3814},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[128,73238,73239,73242,73245],{"class":130,"line":974},[128,73240,73241],{"class":138},"      e.",[128,73243,73244],{"class":199},"preventDefault",[128,73246,5563],{"class":138},[128,73248,73249],{"class":130,"line":985},[128,73250,63392],{"class":3814},[128,73252,73253],{"class":130,"line":990},[128,73254,160],{"emptyLinePlaceholder":159},[128,73256,73257],{"class":130,"line":1005},[128,73258,73259],{"class":3814},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[128,73261,73262],{"class":130,"line":1017},[128,73263,73264],{"class":3814},"      \u002F\u002F 先遍历循环\n",[128,73266,73267,73269,73271,73273,73275,73277,73279,73281,73283,73286,73288,73290,73292],{"class":130,"line":1022},[128,73268,55666],{"class":134},[128,73270,5260],{"class":138},[128,73272,55229],{"class":134},[128,73274,12984],{"class":138},[128,73276,270],{"class":134},[128,73278,7659],{"class":166},[128,73280,12991],{"class":138},[128,73282,4657],{"class":134},[128,73284,73285],{"class":138}," items.",[128,73287,55350],{"class":166},[128,73289,6783],{"class":138},[128,73291,5877],{"class":134},[128,73293,15968],{"class":138},[128,73295,73296,73298,73301,73303,73306],{"class":130,"line":1027},[128,73297,558],{"class":134},[128,73299,73300],{"class":138}," (items[i].value ",[128,73302,57867],{"class":134},[128,73304,73305],{"class":176}," ''",[128,73307,15968],{"class":138},[128,73309,73310,73313,73316,73318,73321],{"class":130,"line":1033},[128,73311,73312],{"class":134},"          return",[128,73314,73315],{"class":199}," alert",[128,73317,253],{"class":138},[128,73319,73320],{"class":176},"'输入内容不能为空'",[128,73322,180],{"class":138},[128,73324,73325],{"class":130,"line":1038},[128,73326,2014],{"class":138},[128,73328,73329],{"class":130,"line":1050},[128,73330,55780],{"class":138},[128,73332,73333],{"class":130,"line":1055},[128,73334,160],{"emptyLinePlaceholder":159},[128,73336,73337],{"class":130,"line":1060},[128,73338,73339],{"class":3814},"      \u002F\u002F 创建新的对象\n",[128,73341,73342,73344,73347,73349],{"class":130,"line":1070},[128,73343,61608],{"class":134},[128,73345,73346],{"class":166}," obj",[128,73348,170],{"class":134},[128,73350,1959],{"class":138},[128,73352,73353,73356,73358,73360,73362],{"class":130,"line":1086},[128,73354,73355],{"class":138},"        stuID: arr.",[128,73357,55350],{"class":166},[128,73359,48951],{"class":134},[128,73361,28605],{"class":166},[128,73363,2665],{"class":138},[128,73365,73366],{"class":130,"line":1095},[128,73367,73368],{"class":138},"        uname: uname.value,\n",[128,73370,73371],{"class":130,"line":1100},[128,73372,73373],{"class":138},"        age: age.value,\n",[128,73375,73376],{"class":130,"line":1113},[128,73377,73378],{"class":138},"        gender: gender.value,\n",[128,73380,73381],{"class":130,"line":1124},[128,73382,73383],{"class":138},"        salary: salary.value,\n",[128,73385,73386],{"class":130,"line":1129},[128,73387,73388],{"class":138},"        city: city.value\n",[128,73390,73391],{"class":130,"line":1134},[128,73392,55780],{"class":138},[128,73394,73395],{"class":130,"line":1150},[128,73396,73397],{"class":3814},"      \u002F\u002F console.log(obj);\n",[128,73399,73400],{"class":130,"line":1164},[128,73401,73402],{"class":3814},"      \u002F\u002F 追加到数组里面\n",[128,73404,73405,73407,73409],{"class":130,"line":1178},[128,73406,61387],{"class":138},[128,73408,55266],{"class":199},[128,73410,73411],{"class":138},"(obj)\n",[128,73413,73414],{"class":130,"line":1183},[128,73415,73416],{"class":3814},"      \u002F\u002F console.log(arr);\n",[128,73418,73419],{"class":130,"line":1199},[128,73420,73421],{"class":3814},"      \u002F\u002F 清空表单  reset重置表单\n",[128,73423,73424,73427,73429,73432],{"class":130,"line":1214},[128,73425,73426],{"class":166},"      this",[128,73428,4307],{"class":138},[128,73430,73431],{"class":199},"reset",[128,73433,5563],{"class":138},[128,73435,73436],{"class":130,"line":1229},[128,73437,73438],{"class":3814},"      \u002F\u002F 调用渲染函数\n",[128,73440,73441,73444],{"class":130,"line":1234},[128,73442,73443],{"class":199},"      render",[128,73445,5563],{"class":138},[128,73447,73448],{"class":130,"line":1239},[128,73449,917],{"class":138},[128,73451,73452],{"class":130,"line":1251},[128,73453,73454],{"class":3814},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[128,73456,73457,73460,73463],{"class":130,"line":1256},[128,73458,73459],{"class":134},"    function",[128,73461,73462],{"class":199}," render",[128,73464,14380],{"class":138},[128,73466,73467],{"class":130,"line":1261},[128,73468,73469],{"class":3814},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[128,73471,73472,73475,73477],{"class":130,"line":1271},[128,73473,73474],{"class":138},"      tbody.innerHTML ",[128,73476,270],{"class":134},[128,73478,73479],{"class":176}," ''\n",[128,73481,73482],{"class":130,"line":1287},[128,73483,73484],{"class":3814},"      \u002F\u002F 遍历数组\n",[128,73486,73487,73489,73491,73493,73495,73497,73499,73501,73503,73505,73507,73509,73511],{"class":130,"line":1296},[128,73488,55666],{"class":134},[128,73490,5260],{"class":138},[128,73492,55229],{"class":134},[128,73494,12984],{"class":138},[128,73496,270],{"class":134},[128,73498,7659],{"class":166},[128,73500,12991],{"class":138},[128,73502,4657],{"class":134},[128,73504,55347],{"class":138},[128,73506,55350],{"class":166},[128,73508,6783],{"class":138},[128,73510,5877],{"class":134},[128,73512,15968],{"class":138},[128,73514,73515,73517,73520,73522,73524,73527,73529,73532],{"class":130,"line":1301},[128,73516,64649],{"class":134},[128,73518,73519],{"class":166}," tr",[128,73521,170],{"class":134},[128,73523,57777],{"class":138},[128,73525,73526],{"class":199},"createElement",[128,73528,253],{"class":138},[128,73530,73531],{"class":176},"'tr'",[128,73533,180],{"class":138},[128,73535,73536,73539,73541],{"class":130,"line":1314},[128,73537,73538],{"class":138},"        tr.innerHTML ",[128,73540,270],{"class":134},[128,73542,73543],{"class":176}," `\n",[128,73545,73546,73549,73551,73553,73555,73558,73561],{"class":130,"line":1325},[128,73547,73548],{"class":176},"        \u003Ctd>${",[128,73550,7447],{"class":138},[128,73552,4638],{"class":176},[128,73554,4191],{"class":138},[128,73556,73557],{"class":176},"].",[128,73559,73560],{"class":138},"stuID",[128,73562,73563],{"class":176},"}\u003C\u002Ftd>\n",[128,73565,73566,73569,73571,73573,73575,73577,73580],{"class":130,"line":1330},[128,73567,73568],{"class":176},"          \u003Ctd>${",[128,73570,7447],{"class":138},[128,73572,4638],{"class":176},[128,73574,4191],{"class":138},[128,73576,73557],{"class":176},[128,73578,73579],{"class":138},"uname",[128,73581,73563],{"class":176},[128,73583,73584,73586,73588,73590,73592,73594,73597],{"class":130,"line":1335},[128,73585,73568],{"class":176},[128,73587,7447],{"class":138},[128,73589,4638],{"class":176},[128,73591,4191],{"class":138},[128,73593,73557],{"class":176},[128,73595,73596],{"class":138},"age",[128,73598,73563],{"class":176},[128,73600,73601,73603,73605,73607,73609,73611,73614],{"class":130,"line":1341},[128,73602,73568],{"class":176},[128,73604,7447],{"class":138},[128,73606,4638],{"class":176},[128,73608,4191],{"class":138},[128,73610,73557],{"class":176},[128,73612,73613],{"class":138},"gender",[128,73615,73563],{"class":176},[128,73617,73618,73620,73622,73624,73626,73628,73631],{"class":130,"line":1346},[128,73619,73568],{"class":176},[128,73621,7447],{"class":138},[128,73623,4638],{"class":176},[128,73625,4191],{"class":138},[128,73627,73557],{"class":176},[128,73629,73630],{"class":138},"salary",[128,73632,73563],{"class":176},[128,73634,73635,73637,73639,73641,73643,73645,73648],{"class":130,"line":1351},[128,73636,73568],{"class":176},[128,73638,7447],{"class":138},[128,73640,4638],{"class":176},[128,73642,4191],{"class":138},[128,73644,73557],{"class":176},[128,73646,73647],{"class":138},"city",[128,73649,73563],{"class":176},[128,73651,73652],{"class":130,"line":1362},[128,73653,72968],{"class":176},[128,73655,73656,73659,73661],{"class":130,"line":1370},[128,73657,73658],{"class":176},"            \u003Ca href=\"javascript:\" data-id=${",[128,73660,4191],{"class":138},[128,73662,73663],{"class":176},"}>删除\u003C\u002Fa>\n",[128,73665,73666],{"class":130,"line":1397},[128,73667,73668],{"class":176},"          \u003C\u002Ftd> \n",[128,73670,73671],{"class":130,"line":1417},[128,73672,73673],{"class":176},"          `\n",[128,73675,73676],{"class":130,"line":1437},[128,73677,73678],{"class":3814},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[128,73680,73681,73684,73687],{"class":130,"line":1458},[128,73682,73683],{"class":138},"        tbody.",[128,73685,73686],{"class":199},"appendChild",[128,73688,73689],{"class":138},"(tr)\n",[128,73691,73692],{"class":130,"line":1464},[128,73693,55780],{"class":138},[128,73695,73696],{"class":130,"line":1469},[128,73697,5773],{"class":138},[128,73699,73700],{"class":130,"line":1474},[128,73701,160],{"emptyLinePlaceholder":159},[128,73703,73704],{"class":130,"line":1484},[128,73705,73706],{"class":3814},"    \u002F\u002F 3.删除委托\n",[128,73708,73709],{"class":130,"line":1493},[128,73710,73711],{"class":3814},"    \u002F\u002F 3.1 事件委托 tbody\n",[128,73713,73714,73717,73719,73721,73723,73725,73727,73729,73731],{"class":130,"line":1505},[128,73715,73716],{"class":138},"    tbody.",[128,73718,61193],{"class":199},[128,73720,253],{"class":138},[128,73722,61198],{"class":176},[128,73724,258],{"class":138},[128,73726,57830],{"class":134},[128,73728,5260],{"class":138},[128,73730,3830],{"class":266},[128,73732,15968],{"class":138},[128,73734,73735,73737,73739,73741,73743],{"class":130,"line":1510},[128,73736,57861],{"class":134},[128,73738,70412],{"class":138},[128,73740,57867],{"class":134},[128,73742,71634],{"class":176},[128,73744,15968],{"class":138},[128,73746,73747],{"class":130,"line":1515},[128,73748,73749],{"class":3814},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[128,73751,73752],{"class":130,"line":1543},[128,73753,73754],{"class":3814},"        \u002F\u002F console.log(e.target.dataset.id);\n",[128,73756,73757],{"class":130,"line":1554},[128,73758,73759],{"class":3814},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[128,73761,73762,73765,73767,73770,73772],{"class":130,"line":1560},[128,73763,73764],{"class":138},"        arr.",[128,73766,61390],{"class":199},[128,73768,73769],{"class":138},"(e.target.dataset.id, ",[128,73771,2592],{"class":166},[128,73773,180],{"class":138},[128,73775,73776],{"class":130,"line":1565},[128,73777,73778],{"class":3814},"        \u002F\u002F 重新渲染一次\n",[128,73780,73781,73784],{"class":130,"line":1570},[128,73782,73783],{"class":199},"        render",[128,73785,5563],{"class":138},[128,73787,73788],{"class":130,"line":1580},[128,73789,55780],{"class":138},[128,73791,73792],{"class":130,"line":1591},[128,73793,917],{"class":138},[128,73795,73796,73798,73800],{"class":130,"line":1596},[128,73797,55799],{"class":138},[128,73799,55196],{"class":54685},[128,73801,54692],{"class":138},[128,73803,73804],{"class":130,"line":1605},[128,73805,160],{"emptyLinePlaceholder":159},[128,73807,73808,73810,73812],{"class":130,"line":1611},[128,73809,55168],{"class":138},[128,73811,55183],{"class":54685},[128,73813,54692],{"class":138},[128,73815,73816],{"class":130,"line":1628},[128,73817,160],{"emptyLinePlaceholder":159},[128,73819,73820,73822,73824],{"class":130,"line":1633},[128,73821,55168],{"class":138},[128,73823,54020],{"class":54685},[128,73825,54692],{"class":138},[19,73827,73828],{},"样式：",[106,73830,73834],{"className":73831,"code":73832,"language":73833,"meta":112,"style":112},"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",[114,73835,73836,73841,73851,73860,73864,73868,73873,73883,73888,73892,73897,73907,73912,73921,73925,73929,73934,73939,73949,73959,73964,73968,73973,73982,73992,73997,74007,74017,74021,74026,74034,74038,74043,74048,74053,74061,74070,74074,74079,74088,74092,74097,74106,74110,74115,74124,74133,74141,74145,74150,74159,74169,74178,74188,74194,74203,74213,74223,74227,74232,74241,74249,74259,74267,74276,74285,74295,74303,74307,74312,74321],{"__ignoreMap":112},[128,73837,73838],{"class":130,"line":131},[128,73839,73840],{"class":138},"* {\n",[128,73842,73843,73846,73848],{"class":130,"line":142},[128,73844,73845],{"class":54685},"  margin",[128,73847,1967],{"class":138},[128,73849,73850],{"class":176},"0;\n",[128,73852,73853,73856,73858],{"class":130,"line":156},[128,73854,73855],{"class":176},"  padding",[128,73857,1967],{"class":138},[128,73859,73850],{"class":176},[128,73861,73862],{"class":130,"line":163},[128,73863,2694],{"class":138},[128,73865,73866],{"class":130,"line":183},[128,73867,160],{"emptyLinePlaceholder":159},[128,73869,73870],{"class":130,"line":188},[128,73871,73872],{"class":176},"a {\n",[128,73874,73875,73878,73880],{"class":130,"line":193},[128,73876,73877],{"class":54685},"  text-decoration",[128,73879,1967],{"class":138},[128,73881,73882],{"class":176},"none;\n",[128,73884,73885],{"class":130,"line":206},[128,73886,73887],{"class":176},"  color:#721c24;\n",[128,73889,73890],{"class":130,"line":221},[128,73891,2694],{"class":138},[128,73893,73894],{"class":130,"line":230},[128,73895,73896],{"class":176},"h1 {\n",[128,73898,73899,73902,73904],{"class":130,"line":235},[128,73900,73901],{"class":54685},"  text-align",[128,73903,1967],{"class":138},[128,73905,73906],{"class":176},"center;\n",[128,73908,73909],{"class":130,"line":244},[128,73910,73911],{"class":176},"  color:#333;\n",[128,73913,73914,73916,73918],{"class":130,"line":287},[128,73915,73845],{"class":54685},[128,73917,1967],{"class":138},[128,73919,73920],{"class":176},"20px 0;\n",[128,73922,73923],{"class":130,"line":301},[128,73924,6247],{"class":138},[128,73926,73927],{"class":130,"line":310},[128,73928,2694],{"class":138},[128,73930,73931],{"class":130,"line":323},[128,73932,73933],{"class":176},"table {\n",[128,73935,73936],{"class":130,"line":330},[128,73937,73938],{"class":176},"  margin:0 auto;\n",[128,73940,73941,73944,73946],{"class":130,"line":335},[128,73942,73943],{"class":54685},"  width",[128,73945,1967],{"class":138},[128,73947,73948],{"class":176},"800px;\n",[128,73950,73951,73954,73956],{"class":130,"line":340},[128,73952,73953],{"class":54685},"  border-collapse",[128,73955,1967],{"class":138},[128,73957,73958],{"class":176},"collapse;\n",[128,73960,73961],{"class":130,"line":351},[128,73962,73963],{"class":176},"  color:#004085;\n",[128,73965,73966],{"class":130,"line":384},[128,73967,2694],{"class":138},[128,73969,73970],{"class":130,"line":414},[128,73971,73972],{"class":176},"th {\n",[128,73974,73975,73977,73979],{"class":130,"line":419},[128,73976,73855],{"class":54685},[128,73978,1967],{"class":138},[128,73980,73981],{"class":176},"10px;\n",[128,73983,73984,73987,73989],{"class":130,"line":424},[128,73985,73986],{"class":54685},"  background",[128,73988,1967],{"class":138},[128,73990,73991],{"class":3814},"#cfe5ff;\n",[128,73993,73994],{"class":130,"line":434},[128,73995,73996],{"class":138},"  \n",[128,73998,73999,74002,74004],{"class":130,"line":447},[128,74000,74001],{"class":54685},"  font-size",[128,74003,1967],{"class":138},[128,74005,74006],{"class":176},"20px;\n",[128,74008,74009,74012,74014],{"class":130,"line":459},[128,74010,74011],{"class":54685},"  font-weight",[128,74013,1967],{"class":138},[128,74015,74016],{"class":176},"400;\n",[128,74018,74019],{"class":130,"line":471},[128,74020,2694],{"class":138},[128,74022,74023],{"class":130,"line":483},[128,74024,74025],{"class":176},"td,th {\n",[128,74027,74028,74031],{"class":130,"line":495},[128,74029,74030],{"class":176},"  border:1px solid",[128,74032,74033],{"class":3814}," #b8daff;\n",[128,74035,74036],{"class":130,"line":507},[128,74037,2694],{"class":138},[128,74039,74040],{"class":130,"line":519},[128,74041,74042],{"class":176},"td {\n",[128,74044,74045],{"class":130,"line":524},[128,74046,74047],{"class":176},"  padding:10px;\n",[128,74049,74050],{"class":130,"line":529},[128,74051,74052],{"class":176},"  color:#666;\n",[128,74054,74055,74057,74059],{"class":130,"line":540},[128,74056,73901],{"class":54685},[128,74058,1967],{"class":138},[128,74060,73906],{"class":176},[128,74062,74063,74065,74067],{"class":130,"line":555},[128,74064,74001],{"class":54685},[128,74066,1967],{"class":138},[128,74068,74069],{"class":176},"16px;\n",[128,74071,74072],{"class":130,"line":576},[128,74073,2694],{"class":138},[128,74075,74076],{"class":130,"line":584},[128,74077,74078],{"class":176},"tbody tr {\n",[128,74080,74081,74083,74085],{"class":130,"line":593},[128,74082,73986],{"class":54685},[128,74084,1967],{"class":138},[128,74086,74087],{"class":3814},"#fff;\n",[128,74089,74090],{"class":130,"line":598},[128,74091,2694],{"class":138},[128,74093,74094],{"class":130,"line":603},[128,74095,74096],{"class":176},"tbody tr:hover {\n",[128,74098,74099,74101,74103],{"class":130,"line":614},[128,74100,73986],{"class":54685},[128,74102,1967],{"class":138},[128,74104,74105],{"class":3814},"#e1ecf8;\n",[128,74107,74108],{"class":130,"line":625},[128,74109,2694],{"class":138},[128,74111,74112],{"class":130,"line":633},[128,74113,74114],{"class":176},".info {\n",[128,74116,74117,74119,74121],{"class":130,"line":649},[128,74118,73943],{"class":54685},[128,74120,1967],{"class":138},[128,74122,74123],{"class":176},"900px;\n",[128,74125,74126,74128,74130],{"class":130,"line":660},[128,74127,73845],{"class":54685},[128,74129,1967],{"class":138},[128,74131,74132],{"class":176},"50px auto;\n",[128,74134,74135,74137,74139],{"class":130,"line":673},[128,74136,73901],{"class":54685},[128,74138,1967],{"class":138},[128,74140,73906],{"class":176},[128,74142,74143],{"class":130,"line":678},[128,74144,2694],{"class":138},[128,74146,74147],{"class":130,"line":683},[128,74148,74149],{"class":176},".info  input, .info select {\n",[128,74151,74152,74154,74156],{"class":130,"line":693},[128,74153,73943],{"class":54685},[128,74155,1967],{"class":138},[128,74157,74158],{"class":176},"80px;\n",[128,74160,74161,74164,74166],{"class":130,"line":702},[128,74162,74163],{"class":54685},"  height",[128,74165,1967],{"class":138},[128,74167,74168],{"class":176},"27px;\n",[128,74170,74171,74174,74176],{"class":130,"line":709},[128,74172,74173],{"class":54685},"  outline",[128,74175,1967],{"class":138},[128,74177,73882],{"class":176},[128,74179,74180,74183,74185],{"class":130,"line":723},[128,74181,74182],{"class":54685},"  border-radius",[128,74184,1967],{"class":138},[128,74186,74187],{"class":176},"5px;\n",[128,74189,74190,74192],{"class":130,"line":732},[128,74191,74030],{"class":176},[128,74193,74033],{"class":3814},[128,74195,74196,74199,74201],{"class":130,"line":744},[128,74197,74198],{"class":54685},"  padding-left",[128,74200,1967],{"class":138},[128,74202,74187],{"class":176},[128,74204,74205,74208,74210],{"class":130,"line":749},[128,74206,74207],{"class":54685},"  box-sizing",[128,74209,1967],{"class":138},[128,74211,74212],{"class":176},"border-box;\n",[128,74214,74215,74218,74220],{"class":130,"line":754},[128,74216,74217],{"class":54685},"  margin-right",[128,74219,1967],{"class":138},[128,74221,74222],{"class":176},"15px;\n",[128,74224,74225],{"class":130,"line":764},[128,74226,2694],{"class":138},[128,74228,74229],{"class":130,"line":782},[128,74230,74231],{"class":176},".info button {\n",[128,74233,74234,74236,74238],{"class":130,"line":787},[128,74235,73943],{"class":54685},[128,74237,1967],{"class":138},[128,74239,74240],{"class":176},"60px;\n",[128,74242,74243,74245,74247],{"class":130,"line":795},[128,74244,74163],{"class":54685},[128,74246,1967],{"class":138},[128,74248,74168],{"class":176},[128,74250,74251,74254,74256],{"class":130,"line":807},[128,74252,74253],{"class":54685},"  background-color",[128,74255,1967],{"class":138},[128,74257,74258],{"class":3814},"#004085;\n",[128,74260,74261,74263,74265],{"class":130,"line":813},[128,74262,74173],{"class":54685},[128,74264,1967],{"class":138},[128,74266,73882],{"class":176},[128,74268,74269,74272,74274],{"class":130,"line":818},[128,74270,74271],{"class":54685},"  border",[128,74273,1967],{"class":138},[128,74275,73850],{"class":176},[128,74277,74278,74281,74283],{"class":130,"line":835},[128,74279,74280],{"class":54685},"  color",[128,74282,1967],{"class":138},[128,74284,74087],{"class":3814},[128,74286,74287,74290,74292],{"class":130,"line":851},[128,74288,74289],{"class":54685},"  cursor",[128,74291,1967],{"class":138},[128,74293,74294],{"class":176},"pointer;\n",[128,74296,74297,74299,74301],{"class":130,"line":867},[128,74298,74182],{"class":54685},[128,74300,1967],{"class":138},[128,74302,74187],{"class":176},[128,74304,74305],{"class":130,"line":872},[128,74306,2694],{"class":138},[128,74308,74309],{"class":130,"line":878},[128,74310,74311],{"class":176},".info .age {\n",[128,74313,74314,74316,74318],{"class":130,"line":887},[128,74315,73943],{"class":54685},[128,74317,1967],{"class":138},[128,74319,74320],{"class":176},"50px;\n",[128,74322,74323],{"class":130,"line":896},[128,74324,2694],{"class":138},[19,74326,74327],{},"思路：",[19,74329,74330],{},[5074,74331],{"alt":112,"src":74332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,74334,74335],{},[5074,74336],{"alt":112,"src":74337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,74339,74340],{},[5074,74341],{"alt":112,"src":74342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[72,74344,74346],{"id":74345},"_3315-重绘回流","3.3.15 重绘回流",[19,74348,74349],{},[5074,74350],{"alt":112,"src":74351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,74353,74354],{},[5074,74355],{"alt":112,"src":74356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,74358,74359],{},[5074,74360],{"alt":112,"src":74361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,74363,74365],{"id":74364},"_34-bom","3.4 BOM",[19,74367,74368],{},[5074,74369],{"alt":112,"src":74370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,74372,74373],{},"平时写的document省略了window而已，实际上是window.document",[19,74375,74376],{},"函数也是这样，调用的时候实际为window.fn()",[19,74378,74379],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,74381,74382],{},"window大部分情况下可以省略",[72,74384,74386],{"id":74385},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,74388,74389],{},"只执行一次",[19,74391,74392],{},[5074,74393],{"alt":112,"src":74394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,74396,74397],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,74399,74400],{},[5074,74401],{"alt":112,"src":74402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[72,74404,74406],{"id":74405},"_342-js执行机制","3.4.2 JS执行机制",[19,74408,74409],{},[5074,74410],{"alt":112,"src":74411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,74413,74414],{},"两个的结果都是1111 3333 2222",[19,74416,74417],{},[5074,74418],{"alt":112,"src":74419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,74421,74422],{},[5074,74423],{"alt":112,"src":74424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,74426,74427],{},[5074,74428],{"alt":112,"src":74429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,74431,74432],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,74434,74435],{},"工作流程：",[19,74437,74438],{},[5074,74439],{"alt":112,"src":74440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,74442,74443],{},[5074,74444],{"alt":112,"src":74445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,74447,74448],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,74450,74451],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[72,74453,74455],{"id":74454},"_343-location对象","3.4.3 location对象",[19,74457,74458],{},"location对象属于window这个全局对象下的，可以 省略window",[19,74460,74461],{},[5074,74462],{"alt":112,"src":74463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,74465,74466],{},"href可以跳转页面",[26,74468,74469],{},[29,74470,74471],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,74473,74474],{},"search得到提交信息之后网站后边的地址",[19,74476,74477],{},[5074,74478],{"alt":112,"src":74479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,74481,74482],{},[5074,74483],{"alt":112,"src":74484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[26,74486,74487],{"start":142},[29,74488,74489],{},"hash:这个获取单页面应用#后边的地址",[19,74491,74492],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,74494,74495],{},[5074,74496],{"alt":112,"src":74497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[106,74499,74501],{"className":56449,"code":74500,"language":56451,"meta":112,"style":112},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[114,74502,74503,74523,74543],{"__ignoreMap":112},[128,74504,74505,74507,74509,74511,74513,74516,74519,74521],{"class":130,"line":131},[128,74506,55526],{"class":138},[128,74508,3989],{"class":54685},[128,74510,64436],{"class":199},[128,74512,270],{"class":138},[128,74514,74515],{"class":176},"\"#\u002Fmy\"",[128,74517,74518],{"class":138},">我的\u003C\u002F",[128,74520,3989],{"class":54685},[128,74522,54692],{"class":138},[128,74524,74525,74527,74529,74531,74533,74536,74539,74541],{"class":130,"line":142},[128,74526,55526],{"class":138},[128,74528,3989],{"class":54685},[128,74530,64436],{"class":199},[128,74532,270],{"class":138},[128,74534,74535],{"class":176},"\"#\u002Ffriend\"",[128,74537,74538],{"class":138},">关注\u003C\u002F",[128,74540,3989],{"class":54685},[128,74542,54692],{"class":138},[128,74544,74545,74547,74549,74551,74553,74556,74559,74561],{"class":130,"line":156},[128,74546,55526],{"class":138},[128,74548,3989],{"class":54685},[128,74550,64436],{"class":199},[128,74552,270],{"class":138},[128,74554,74555],{"class":176},"\"#\u002Fdownload\"",[128,74557,74558],{"class":138},">下载\u003C\u002F",[128,74560,3989],{"class":54685},[128,74562,54692],{"class":138},[19,74564,74565],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[26,74567,74568],{"start":156},[29,74569,74570,74571,74573,74574,74576],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[57098,74572],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[57098,74575],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[72,74578,74580],{"id":74579},"_345-navigator对象","3.4.5 navigator对象",[19,74582,74583],{},[5074,74584],{"alt":112,"src":74585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[106,74587,74591],{"className":74588,"code":74589,"language":74590,"meta":112,"style":112},"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",[114,74592,74593,74598,74609,74621,74626,74677,74718,74723,74736,74748,74753],{"__ignoreMap":112},[128,74594,74595],{"class":130,"line":131},[128,74596,74597],{"class":3814},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[128,74599,74600,74602,74604,74606],{"class":130,"line":142},[128,74601,3977],{"class":134},[128,74603,253],{"class":138},[128,74605,57830],{"class":134},[128,74607,74608],{"class":138}," () { \n",[128,74610,74611,74613,74616,74618],{"class":130,"line":156},[128,74612,10349],{"class":134},[128,74614,74615],{"class":166}," userAgent",[128,74617,170],{"class":134},[128,74619,74620],{"class":138}," navigator.userAgent \n",[128,74622,74623],{"class":130,"line":163},[128,74624,74625],{"class":3814},"\u002F\u002F 验证是否为Android或iPhone \n",[128,74627,74628,74630,74633,74635,74638,74641,74643,74645,74648,74650,74653,74657,74659,74661,74663,74666,74668,74670,74672,74674],{"class":130,"line":183},[128,74629,10349],{"class":134},[128,74631,74632],{"class":166}," android",[128,74634,170],{"class":134},[128,74636,74637],{"class":138}," userAgent.",[128,74639,74640],{"class":199},"match",[128,74642,253],{"class":138},[128,74644,4333],{"class":176},[128,74646,74647],{"class":51362},"(Android);",[128,74649,4731],{"class":134},[128,74651,74652],{"class":166},"[\\s",[128,74654,74656],{"class":74655},"snhLl","\\\u002F",[128,74658,1388],{"class":166},[128,74660,2457],{"class":134},[128,74662,253],{"class":51362},[128,74664,74665],{"class":166},"[\\d.]",[128,74667,2457],{"class":134},[128,74669,4179],{"class":51362},[128,74671,4731],{"class":134},[128,74673,4333],{"class":176},[128,74675,74676],{"class":138},") \n",[128,74678,74679,74681,74684,74686,74688,74690,74692,74694,74697,74700,74703,74705,74707,74710,74712,74714,74716],{"class":130,"line":188},[128,74680,10349],{"class":134},[128,74682,74683],{"class":166}," iphone",[128,74685,170],{"class":134},[128,74687,74637],{"class":138},[128,74689,74640],{"class":199},[128,74691,253],{"class":138},[128,74693,4333],{"class":176},[128,74695,74696],{"class":51362},"(iPhone",[128,74698,74699],{"class":166},"\\s",[128,74701,74702],{"class":51362},"OS)",[128,74704,74699],{"class":166},[128,74706,253],{"class":51362},[128,74708,74709],{"class":166},"[\\d_]",[128,74711,2457],{"class":134},[128,74713,4179],{"class":51362},[128,74715,4333],{"class":176},[128,74717,74676],{"class":138},[128,74719,74720],{"class":130,"line":193},[128,74721,74722],{"class":3814},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[128,74724,74725,74727,74730,74733],{"class":130,"line":206},[128,74726,1800],{"class":134},[128,74728,74729],{"class":138}," (android ",[128,74731,74732],{"class":134},"||",[128,74734,74735],{"class":138}," iphone) { \n",[128,74737,74738,74741,74743,74746],{"class":130,"line":221},[128,74739,74740],{"class":138},"location.href ",[128,74742,270],{"class":134},[128,74744,74745],{"class":176}," 'http:\u002F\u002Fm.itcast.cn'",[128,74747,6247],{"class":138},[128,74749,74750],{"class":130,"line":230},[128,74751,74752],{"class":138},"} \n",[128,74754,74755],{"class":130,"line":235},[128,74756,74757],{"class":138},"})()\n",[72,74759,74761],{"id":74760},"_346-histroy对象","3.4.6 histroy对象",[19,74763,74764],{},[5074,74765],{"alt":112,"src":74766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,74768,74769],{},"浏览器地址的前进与后退!!!",[19,74771,74772],{},"history.back() 等效于 history.go(-1)",[19,74774,74775],{},"history.forward() 等效于 history.go(1)",[14,74777,74779],{"id":74778},"_35-本地存储","3.5 本地存储",[26,74781,74782,74785,74788],{},[29,74783,74784],{},"数据存储在用户浏览器中",[29,74786,74787],{},"设置、读取方便、甚至页面刷新不丢失数据",[29,74789,74790],{},"容量较大，sessionStorage和localStorage约 5M 左右",[72,74792,74794],{"id":74793},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,74796,74797],{},"只能存储字符串",[19,74799,74800],{},[5074,74801],{"alt":112,"src":74802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,74804,74805],{},[5074,74806],{"alt":112,"src":74807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,74809,74810],{},"键值对要加引号,不然就会当变量来看了",[19,74812,74813],{},"localStorage.setItem('uname', 'pink')",[19,74815,74816],{},"刷新之后信息不再丢失",[19,74818,74819],{},"操作key,value会跟着变",[19,74821,74822],{},"删除只删除键就可以,即名字",[19,74824,74813],{},[19,74826,74827],{},"改:",[19,74829,74830],{},"localStorage.setItem('uname','red')",[19,74832,74833],{},"有这个键就是改,没有这个键就是改",[19,74835,74836],{},[5074,74837],{"alt":112,"src":74838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,74840,74841],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,74843,74844],{},[5074,74845],{"alt":112,"src":74846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,74848,74849],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[72,74851,74853],{"id":74852},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,74855,74856],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,74858,74859],{},"特性:",[26,74861,74862,74865,74868,74871],{},[29,74863,74864],{},"生命周期为关闭浏览器窗口",[29,74866,74867],{},"在同一个窗口(页面)下数据可以共享",[29,74869,74870],{},"以键值对的形式存储使用",[29,74872,74873],{},"用法跟localStorage 基本相同",[72,74875,74877],{"id":74876},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,74879,74880],{},"本地只能存储字符串,无法直接存储复杂数据类型",[106,74882,74884],{"className":56449,"code":74883,"language":56451,"meta":112,"style":112},"\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",[114,74885,74886,74894,74899,74904,74909,74914,74918,74923,74928],{"__ignoreMap":112},[128,74887,74888,74890,74892],{"class":130,"line":131},[128,74889,4657],{"class":138},[128,74891,55196],{"class":54685},[128,74893,54692],{"class":138},[128,74895,74896],{"class":130,"line":142},[128,74897,74898],{"class":138},"    const obj = {\n",[128,74900,74901],{"class":130,"line":156},[128,74902,74903],{"class":138},"      uname: 'pink老师',\n",[128,74905,74906],{"class":130,"line":163},[128,74907,74908],{"class":138},"      age: 18,\n",[128,74910,74911],{"class":130,"line":183},[128,74912,74913],{"class":138},"      gender: '女'\n",[128,74915,74916],{"class":130,"line":188},[128,74917,5773],{"class":138},[128,74919,74920],{"class":130,"line":193},[128,74921,74922],{"class":138},"    \u002F\u002F 存储复杂数据类型\n",[128,74924,74925],{"class":130,"line":206},[128,74926,74927],{"class":138},"    localStorage.setItem('obj', obj)\n",[128,74929,74930,74932,74934],{"class":130,"line":221},[128,74931,55799],{"class":138},[128,74933,55196],{"class":54685},[128,74935,54692],{"class":138},[19,74937,74938],{},[5074,74939],{"alt":112,"src":74940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,74942,74943],{},"如果获取一下数据:",[19,74945,74946],{},"log(localStorage.getItem('obj'))",[19,74948,74949],{},[5074,74950],{"alt":112,"src":74951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,74953,74954],{},"发现直接存对象是使用不了的!!!",[25485,74956,74958],{"id":74957},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,74960,74961],{},[5074,74962],{"alt":112,"src":74963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[106,74965,74967],{"className":54018,"code":74966,"language":54020,"meta":112,"style":112},"\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",[114,74968,74969,74977,74987,74997,75006,75014,75018,75022,75048,75067,75075,75079,75084,75089],{"__ignoreMap":112},[128,74970,74971,74973,74975],{"class":130,"line":131},[128,74972,4657],{"class":138},[128,74974,55196],{"class":54685},[128,74976,54692],{"class":138},[128,74978,74979,74981,74983,74985],{"class":130,"line":142},[128,74980,14748],{"class":134},[128,74982,73346],{"class":166},[128,74984,170],{"class":134},[128,74986,1959],{"class":138},[128,74988,74989,74992,74995],{"class":130,"line":156},[128,74990,74991],{"class":138},"      uname: ",[128,74993,74994],{"class":176},"'pink老师'",[128,74996,2665],{"class":138},[128,74998,74999,75002,75004],{"class":130,"line":163},[128,75000,75001],{"class":138},"      age: ",[128,75003,4399],{"class":166},[128,75005,2665],{"class":138},[128,75007,75008,75011],{"class":130,"line":183},[128,75009,75010],{"class":138},"      gender: ",[128,75012,75013],{"class":176},"'女'\n",[128,75015,75016],{"class":130,"line":188},[128,75017,5773],{"class":138},[128,75019,75020],{"class":130,"line":193},[128,75021,74922],{"class":3814},[128,75023,75024,75027,75030,75032,75035,75037,75040,75042,75045],{"class":130,"line":206},[128,75025,75026],{"class":138},"  localStorage.",[128,75028,75029],{"class":199},"setItem",[128,75031,253],{"class":138},[128,75033,75034],{"class":176},"'obj'",[128,75036,258],{"class":138},[128,75038,75039],{"class":166},"JSON",[128,75041,4307],{"class":138},[128,75043,75044],{"class":199},"stringify",[128,75046,75047],{"class":138},"(obj))\n",[128,75049,75050,75053,75055,75058,75061,75063,75065],{"class":130,"line":221},[128,75051,75052],{"class":138},"  console.",[128,75054,61627],{"class":199},[128,75056,75057],{"class":138},"(localStorage.",[128,75059,75060],{"class":199},"getItem",[128,75062,253],{"class":138},[128,75064,75034],{"class":176},[128,75066,3034],{"class":138},[128,75068,75069,75071,75073],{"class":130,"line":230},[128,75070,55799],{"class":138},[128,75072,55196],{"class":54685},[128,75074,54692],{"class":138},[128,75076,75077],{"class":130,"line":235},[128,75078,73996],{"class":138},[128,75080,75081],{"class":130,"line":244},[128,75082,75083],{"class":138},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[128,75085,75086],{"class":130,"line":287},[128,75087,75088],{"class":138},"  类型是字符串的\n",[128,75090,75091],{"class":130,"line":301},[128,75092,75093],{"class":138},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[25485,75095,75097],{"id":75096},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,75099,75100],{},[5074,75101],{"alt":112,"src":75102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,75104,75105],{},[5074,75106],{"alt":112,"src":75107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[106,75109,75111],{"className":56449,"code":75110,"language":56451,"meta":112,"style":112},"  \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",[114,75112,75113,75121,75125,75129,75133,75137,75141,75146,75151,75156,75161,75166,75171,75176,75181],{"__ignoreMap":112},[128,75114,75115,75117,75119],{"class":130,"line":131},[128,75116,55526],{"class":138},[128,75118,55196],{"class":54685},[128,75120,54692],{"class":138},[128,75122,75123],{"class":130,"line":142},[128,75124,74898],{"class":138},[128,75126,75127],{"class":130,"line":156},[128,75128,74903],{"class":138},[128,75130,75131],{"class":130,"line":163},[128,75132,74908],{"class":138},[128,75134,75135],{"class":130,"line":183},[128,75136,74913],{"class":138},[128,75138,75139],{"class":130,"line":188},[128,75140,5773],{"class":138},[128,75142,75143],{"class":130,"line":193},[128,75144,75145],{"class":138},"    \u002F\u002F 1.存储复杂数据类型\n",[128,75147,75148],{"class":130,"line":206},[128,75149,75150],{"class":138},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[128,75152,75153],{"class":130,"line":221},[128,75154,75155],{"class":138},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[128,75157,75158],{"class":130,"line":230},[128,75159,75160],{"class":138},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[128,75162,75163],{"class":130,"line":235},[128,75164,75165],{"class":138},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[128,75167,75168],{"class":130,"line":244},[128,75169,75170],{"class":138},"    \u002F\u002F 取\n",[128,75172,75173],{"class":130,"line":287},[128,75174,75175],{"class":138},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[128,75177,75178],{"class":130,"line":301},[128,75179,75180],{"class":138},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[128,75182,75183,75185,75187],{"class":130,"line":310},[128,75184,55799],{"class":138},[128,75186,55196],{"class":54685},[128,75188,54692],{"class":138},[19,75190,75191],{},[5074,75192],{"alt":112,"src":75193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[72,75195,75197],{"id":75196},"_356-数组map方法","3.5.6 数组map方法",[19,75199,75200],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,75202,75203],{},[5074,75204],{"alt":112,"src":75205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,75207,75208],{},[5074,75209],{"alt":112,"src":75210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,75212,75213,75216],{},[3903,75214,75215],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,75218,75219],{},"map有返回值，但是forEach没有返回值",[19,75221,75222],{},"map是个方法。用的时候要加 ()",[19,75224,75225],{},"map返回的是一个数组",[72,75227,75229],{"id":75228},"_357-数组中join方法","3.5.7 数组中join方法",[19,75231,75232],{},[5074,75233],{"alt":112,"src":75234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,75236,75237],{},"类似于python中拼接字符串一样！",[26,75239,75240,75243,75246],{},[29,75241,75242],{},"小括号为空则逗号分开",[29,75244,75245],{},"小括号为空字符串 ''，则元素之间没有分隔符",[29,75247,75248],{},"小括号用啥符号就用进行分割",[72,75250,75252],{"id":75251},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[26,75254,75255,75258,75261,75264,75267],{},[29,75256,75257],{},"记住本地时间获取快速方式：new Date().toDateString()",[29,75259,75260],{},"尽量减少DOM操作，用好map+join的渲染方式",[29,75262,75263],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[29,75265,75266],{},"return可以实现函数的结束",[29,75268,75269],{},"禁止跳转是 preventDefault() 不要忘记",[106,75271,75273],{"className":54018,"code":75272,"language":54020,"meta":112,"style":112},"\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",[114,75274,75275,75285,75299,75303,75311,75325,75345,75357,75365,75371,75381,75391,75395,75399,75405,75415,75427,75431,75435,75442,75454,75468,75478,75482,75486,75493,75500,75507,75519,75531,75541,75553,75557,75561,75568,75575,75587,75599,75609,75621,75651,75655,75659,75666,75678,75690,75714,75724,75734,75738,75742,75750,75761,75773,75785,75797,75814,75826,75838,75842,75846,75853,75865,75877,75889,75900,75918,75931,75943,75967,75978,75982,75986,75994,76004,76008,76012,76018,76030,76041,76051,76055,76059,76065,76087,76091,76095,76101,76107,76119,76129,76141,76171,76184,76201,76205,76209,76220,76242,76252,76256,76260,76273,76283,76295,76307,76319,76331,76341,76351,76361,76372,76385,76389,76397,76405,76409,76417,76430,76450,76483,76516,76549,76575,76593,76611,76619,76645,76663,76681,76699,76717,76735,76743,76751,76769,76777,76806,76814,76822,76830,76843,76855,76867,76879,76891,76903,76916,76928,76936,76944,76952,76957,76962,76966,76970,76974,76978,76982,76986,76991,76996,77001,77006,77014,77022,77030,77035,77040,77045,77050,77055,77060,77065,77070,77075,77080,77085,77090,77095,77100,77104,77109,77114,77124,77133,77137,77142,77151,77167,77209,77249,77288,77352,77360,77364,77369,77387,77395,77400,77405,77435,77441,77446,77459,77471,77483,77495,77507,77519,77531,77535,77545,77549,77554,77559,77563,77572,77576,77581,77586,77605,77610,77630,77634,77639,77643,77648,77666,77684,77702,77721,77740,77759,77764,77770,77791,77797,77806,77812,77818,77824,77851,77864,77869,77879,77885,77891,77897,77903,77908,77914,77920,77926,77932,77965,77970,77975,77980,77985,77991,77997,78003,78014,78019,78025,78032,78046,78052,78076,78081,78086,78092,78098,78119,78125,78138,78144,78150,78156,78162,78167,78173,78179,78185,78203,78217,78223,78231,78237,78259,78264,78269,78274,78279,78284,78293,78302,78307],{"__ignoreMap":112},[128,75276,75277,75279,75281,75283],{"class":130,"line":131},[128,75278,54682],{"class":138},[128,75280,54686],{"class":54685},[128,75282,54689],{"class":199},[128,75284,54692],{"class":138},[128,75286,75287,75289,75291,75293,75295,75297],{"class":130,"line":142},[128,75288,4657],{"class":138},[128,75290,54020],{"class":54685},[128,75292,54701],{"class":199},[128,75294,270],{"class":138},[128,75296,54706],{"class":176},[128,75298,54692],{"class":138},[128,75300,75301],{"class":130,"line":156},[128,75302,160],{"emptyLinePlaceholder":159},[128,75304,75305,75307,75309],{"class":130,"line":163},[128,75306,4657],{"class":138},[128,75308,54719],{"class":54685},[128,75310,54692],{"class":138},[128,75312,75313,75315,75317,75319,75321,75323],{"class":130,"line":183},[128,75314,55526],{"class":138},[128,75316,54729],{"class":54685},[128,75318,54732],{"class":199},[128,75320,270],{"class":138},[128,75322,54737],{"class":176},[128,75324,54692],{"class":138},[128,75326,75327,75329,75331,75333,75335,75337,75339,75341,75343],{"class":130,"line":188},[128,75328,55526],{"class":138},[128,75330,54729],{"class":54685},[128,75332,18442],{"class":199},[128,75334,270],{"class":138},[128,75336,54776],{"class":176},[128,75338,54756],{"class":199},[128,75340,270],{"class":138},[128,75342,54783],{"class":176},[128,75344,54692],{"class":138},[128,75346,75347,75349,75351,75353,75355],{"class":130,"line":193},[128,75348,55526],{"class":138},[128,75350,2752],{"class":54685},[128,75352,54794],{"class":138},[128,75354,2752],{"class":54685},[128,75356,54692],{"class":138},[128,75358,75359,75361,75363],{"class":130,"line":206},[128,75360,55526],{"class":138},[128,75362,3659],{"class":54685},[128,75364,54692],{"class":138},[128,75366,75367,75369],{"class":130,"line":221},[128,75368,9960],{"class":54685},[128,75370,1959],{"class":138},[128,75372,75373,75375,75377,75379],{"class":130,"line":230},[128,75374,58076],{"class":166},[128,75376,1967],{"class":138},[128,75378,2452],{"class":166},[128,75380,4905],{"class":138},[128,75382,75383,75385,75387,75389],{"class":130,"line":235},[128,75384,58087],{"class":166},[128,75386,1967],{"class":138},[128,75388,2452],{"class":166},[128,75390,4905],{"class":138},[128,75392,75393],{"class":130,"line":244},[128,75394,5773],{"class":138},[128,75396,75397],{"class":130,"line":287},[128,75398,160],{"emptyLinePlaceholder":159},[128,75400,75401,75403],{"class":130,"line":301},[128,75402,60659],{"class":54685},[128,75404,1959],{"class":138},[128,75406,75407,75409,75411,75413],{"class":130,"line":310},[128,75408,60666],{"class":166},[128,75410,1967],{"class":138},[128,75412,54975],{"class":166},[128,75414,4905],{"class":138},[128,75416,75417,75419,75421,75423,75425],{"class":130,"line":323},[128,75418,65456],{"class":166},[128,75420,1967],{"class":138},[128,75422,4449],{"class":166},[128,75424,54875],{"class":134},[128,75426,4905],{"class":138},[128,75428,75429],{"class":130,"line":330},[128,75430,5773],{"class":138},[128,75432,75433],{"class":130,"line":335},[128,75434,160],{"emptyLinePlaceholder":159},[128,75436,75437,75440],{"class":130,"line":340},[128,75438,75439],{"class":199},"    .info",[128,75441,1959],{"class":138},[128,75443,75444,75446,75448,75450,75452],{"class":130,"line":351},[128,75445,58152],{"class":166},[128,75447,1967],{"class":138},[128,75449,54872],{"class":166},[128,75451,54875],{"class":134},[128,75453,4905],{"class":138},[128,75455,75456,75458,75460,75462,75464,75466],{"class":130,"line":384},[128,75457,58087],{"class":166},[128,75459,1967],{"class":138},[128,75461,4196],{"class":166},[128,75463,54875],{"class":134},[128,75465,54939],{"class":166},[128,75467,4905],{"class":138},[128,75469,75470,75472,75474,75476],{"class":130,"line":414},[128,75471,60666],{"class":166},[128,75473,1967],{"class":138},[128,75475,54975],{"class":166},[128,75477,4905],{"class":138},[128,75479,75480],{"class":130,"line":419},[128,75481,5773],{"class":138},[128,75483,75484],{"class":130,"line":424},[128,75485,160],{"emptyLinePlaceholder":159},[128,75487,75488,75491],{"class":130,"line":434},[128,75489,75490],{"class":199},"    .uname",[128,75492,2665],{"class":138},[128,75494,75495,75498],{"class":130,"line":447},[128,75496,75497],{"class":199},"    .age",[128,75499,2665],{"class":138},[128,75501,75502,75505],{"class":130,"line":459},[128,75503,75504],{"class":199},"    .salary",[128,75506,1959],{"class":138},[128,75508,75509,75511,75513,75515,75517],{"class":130,"line":471},[128,75510,58152],{"class":166},[128,75512,1967],{"class":138},[128,75514,4061],{"class":166},[128,75516,54875],{"class":134},[128,75518,4905],{"class":138},[128,75520,75521,75523,75525,75527,75529],{"class":130,"line":483},[128,75522,58166],{"class":166},[128,75524,1967],{"class":138},[128,75526,4449],{"class":166},[128,75528,54875],{"class":134},[128,75530,4905],{"class":138},[128,75532,75533,75535,75537,75539],{"class":130,"line":495},[128,75534,65159],{"class":166},[128,75536,1967],{"class":138},[128,75538,58118],{"class":166},[128,75540,4905],{"class":138},[128,75542,75543,75545,75547,75549,75551],{"class":130,"line":507},[128,75544,65129],{"class":166},[128,75546,1967],{"class":138},[128,75548,4324],{"class":166},[128,75550,54875],{"class":134},[128,75552,4905],{"class":138},[128,75554,75555],{"class":130,"line":519},[128,75556,5773],{"class":138},[128,75558,75559],{"class":130,"line":524},[128,75560,160],{"emptyLinePlaceholder":159},[128,75562,75563,75566],{"class":130,"line":529},[128,75564,75565],{"class":199},"    .gender",[128,75567,2665],{"class":138},[128,75569,75570,75573],{"class":130,"line":540},[128,75571,75572],{"class":199},"    .city",[128,75574,1959],{"class":138},[128,75576,75577,75579,75581,75583,75585],{"class":130,"line":555},[128,75578,58152],{"class":166},[128,75580,1967],{"class":138},[128,75582,4061],{"class":166},[128,75584,54875],{"class":134},[128,75586,4905],{"class":138},[128,75588,75589,75591,75593,75595,75597],{"class":130,"line":576},[128,75590,58166],{"class":166},[128,75592,1967],{"class":138},[128,75594,4573],{"class":166},[128,75596,54875],{"class":134},[128,75598,4905],{"class":138},[128,75600,75601,75603,75605,75607],{"class":130,"line":584},[128,75602,65159],{"class":166},[128,75604,1967],{"class":138},[128,75606,58118],{"class":166},[128,75608,4905],{"class":138},[128,75610,75611,75613,75615,75617,75619],{"class":130,"line":593},[128,75612,65129],{"class":166},[128,75614,1967],{"class":138},[128,75616,4324],{"class":166},[128,75618,54875],{"class":134},[128,75620,4905],{"class":138},[128,75622,75623,75625,75627,75629,75631,75633,75636,75638,75640,75642,75645,75647,75649],{"class":130,"line":598},[128,75624,65356],{"class":166},[128,75626,1967],{"class":138},[128,75628,2592],{"class":166},[128,75630,54875],{"class":134},[128,75632,54904],{"class":166},[128,75634,75635],{"class":166}," rgb",[128,75637,253],{"class":138},[128,75639,3143],{"class":166},[128,75641,258],{"class":138},[128,75643,75644],{"class":166},"197",[128,75646,258],{"class":138},[128,75648,75644],{"class":166},[128,75650,6292],{"class":138},[128,75652,75653],{"class":130,"line":603},[128,75654,5773],{"class":138},[128,75656,75657],{"class":130,"line":614},[128,75658,160],{"emptyLinePlaceholder":159},[128,75660,75661,75664],{"class":130,"line":625},[128,75662,75663],{"class":54685},"    button",[128,75665,1959],{"class":138},[128,75667,75668,75670,75672,75674,75676],{"class":130,"line":633},[128,75669,58166],{"class":166},[128,75671,1967],{"class":138},[128,75673,4573],{"class":166},[128,75675,54875],{"class":134},[128,75677,4905],{"class":138},[128,75679,75680,75682,75684,75686,75688],{"class":130,"line":649},[128,75681,58152],{"class":166},[128,75683,1967],{"class":138},[128,75685,4233],{"class":166},[128,75687,54875],{"class":134},[128,75689,4905],{"class":138},[128,75691,75692,75694,75696,75699,75701,75703,75705,75708,75710,75712],{"class":130,"line":660},[128,75693,58265],{"class":166},[128,75695,1967],{"class":138},[128,75697,75698],{"class":166},"rgb",[128,75700,253],{"class":138},[128,75702,4714],{"class":166},[128,75704,258],{"class":138},[128,75706,75707],{"class":166},"187",[128,75709,258],{"class":138},[128,75711,4049],{"class":166},[128,75713,6292],{"class":138},[128,75715,75716,75718,75720,75722],{"class":130,"line":673},[128,75717,60796],{"class":166},[128,75719,1967],{"class":138},[128,75721,64221],{"class":166},[128,75723,4905],{"class":138},[128,75725,75726,75728,75730,75732],{"class":130,"line":678},[128,75727,65356],{"class":166},[128,75729,1967],{"class":138},[128,75731,2452],{"class":166},[128,75733,4905],{"class":138},[128,75735,75736],{"class":130,"line":683},[128,75737,5773],{"class":138},[128,75739,75740],{"class":130,"line":693},[128,75741,160],{"emptyLinePlaceholder":159},[128,75743,75744,75746,75748],{"class":130,"line":702},[128,75745,75663],{"class":54685},[128,75747,55071],{"class":54685},[128,75749,1959],{"class":138},[128,75751,75752,75754,75756,75759],{"class":130,"line":709},[128,75753,58390],{"class":166},[128,75755,1967],{"class":138},[128,75757,75758],{"class":166},"inline-block",[128,75760,4905],{"class":138},[128,75762,75763,75765,75767,75769,75771],{"class":130,"line":723},[128,75764,58152],{"class":166},[128,75766,1967],{"class":138},[128,75768,4196],{"class":166},[128,75770,54875],{"class":134},[128,75772,4905],{"class":138},[128,75774,75775,75777,75779,75781,75783],{"class":130,"line":732},[128,75776,58166],{"class":166},[128,75778,1967],{"class":138},[128,75780,4196],{"class":166},[128,75782,54875],{"class":134},[128,75784,4905],{"class":138},[128,75786,75787,75789,75791,75793,75795],{"class":130,"line":744},[128,75788,60739],{"class":166},[128,75790,1967],{"class":138},[128,75792,4222],{"class":166},[128,75794,54875],{"class":134},[128,75796,4905],{"class":138},[128,75798,75799,75801,75803,75805,75807,75809,75812],{"class":130,"line":749},[128,75800,65356],{"class":166},[128,75802,1967],{"class":138},[128,75804,2592],{"class":166},[128,75806,54875],{"class":134},[128,75808,54904],{"class":166},[128,75810,75811],{"class":166}," #fff",[128,75813,4905],{"class":138},[128,75815,75816,75818,75820,75822,75824],{"class":130,"line":754},[128,75817,58515],{"class":166},[128,75819,1967],{"class":138},[128,75821,4069],{"class":166},[128,75823,54875],{"class":134},[128,75825,4905],{"class":138},[128,75827,75828,75830,75832,75834,75836],{"class":130,"line":764},[128,75829,65129],{"class":166},[128,75831,1967],{"class":138},[128,75833,2592],{"class":166},[128,75835,54875],{"class":134},[128,75837,4905],{"class":138},[128,75839,75840],{"class":130,"line":782},[128,75841,5773],{"class":138},[128,75843,75844],{"class":130,"line":787},[128,75845,160],{"emptyLinePlaceholder":159},[128,75847,75848,75851],{"class":130,"line":795},[128,75849,75850],{"class":199},"    .total",[128,75852,1959],{"class":138},[128,75854,75855,75857,75859,75861,75863],{"class":130,"line":807},[128,75856,58152],{"class":166},[128,75858,1967],{"class":138},[128,75860,65008],{"class":166},[128,75862,54875],{"class":134},[128,75864,4905],{"class":138},[128,75866,75867,75869,75871,75873,75875],{"class":130,"line":813},[128,75868,58166],{"class":166},[128,75870,1967],{"class":138},[128,75872,4151],{"class":166},[128,75874,54875],{"class":134},[128,75876,4905],{"class":138},[128,75878,75879,75881,75883,75885,75887],{"class":130,"line":818},[128,75880,60739],{"class":166},[128,75882,1967],{"class":138},[128,75884,4151],{"class":166},[128,75886,54875],{"class":134},[128,75888,4905],{"class":138},[128,75890,75891,75893,75895,75898],{"class":130,"line":835},[128,75892,60666],{"class":166},[128,75894,1967],{"class":138},[128,75896,75897],{"class":166},"right",[128,75899,4905],{"class":138},[128,75901,75902,75904,75906,75908,75910,75912,75914,75916],{"class":130,"line":851},[128,75903,58087],{"class":166},[128,75905,1967],{"class":138},[128,75907,4151],{"class":166},[128,75909,54875],{"class":134},[128,75911,54939],{"class":166},[128,75913,5625],{"class":166},[128,75915,54875],{"class":134},[128,75917,4905],{"class":138},[128,75919,75920,75923,75925,75927,75929],{"class":130,"line":867},[128,75921,75922],{"class":166},"      padding-right",[128,75924,1967],{"class":138},[128,75926,4196],{"class":166},[128,75928,54875],{"class":134},[128,75930,4905],{"class":138},[128,75932,75933,75935,75937,75939,75941],{"class":130,"line":872},[128,75934,58303],{"class":166},[128,75936,1967],{"class":138},[128,75938,4272],{"class":166},[128,75940,54875],{"class":134},[128,75942,4905],{"class":138},[128,75944,75945,75947,75949,75951,75953,75956,75958,75961,75963,75965],{"class":130,"line":878},[128,75946,58265],{"class":166},[128,75948,1967],{"class":138},[128,75950,75698],{"class":166},[128,75952,253],{"class":138},[128,75954,75955],{"class":166},"237",[128,75957,258],{"class":138},[128,75959,75960],{"class":166},"235",[128,75962,258],{"class":138},[128,75964,75960],{"class":166},[128,75966,6292],{"class":138},[128,75968,75969,75972,75974,75976],{"class":130,"line":887},[128,75970,75971],{"class":166},"      box-sizing",[128,75973,1967],{"class":138},[128,75975,63885],{"class":166},[128,75977,4905],{"class":138},[128,75979,75980],{"class":130,"line":896},[128,75981,5773],{"class":138},[128,75983,75984],{"class":130,"line":905},[128,75985,160],{"emptyLinePlaceholder":159},[128,75987,75988,75990,75992],{"class":130,"line":914},[128,75989,75850],{"class":199},[128,75991,55071],{"class":54685},[128,75993,1959],{"class":138},[128,75995,75996,75998,76000,76002],{"class":130,"line":920},[128,75997,60796],{"class":166},[128,75999,1967],{"class":138},[128,76001,60801],{"class":166},[128,76003,4905],{"class":138},[128,76005,76006],{"class":130,"line":926},[128,76007,5773],{"class":138},[128,76009,76010],{"class":130,"line":938},[128,76011,160],{"emptyLinePlaceholder":159},[128,76013,76014,76016],{"class":130,"line":943},[128,76015,68401],{"class":54685},[128,76017,1959],{"class":138},[128,76019,76020,76022,76024,76026,76028],{"class":130,"line":948},[128,76021,58152],{"class":166},[128,76023,1967],{"class":138},[128,76025,65008],{"class":166},[128,76027,54875],{"class":134},[128,76029,4905],{"class":138},[128,76031,76032,76034,76036,76039],{"class":130,"line":958},[128,76033,58087],{"class":166},[128,76035,1967],{"class":138},[128,76037,76038],{"class":166},"auto",[128,76040,4905],{"class":138},[128,76042,76043,76045,76047,76049],{"class":130,"line":974},[128,76044,68408],{"class":166},[128,76046,1967],{"class":138},[128,76048,68413],{"class":166},[128,76050,4905],{"class":138},[128,76052,76053],{"class":130,"line":985},[128,76054,5773],{"class":138},[128,76056,76057],{"class":130,"line":990},[128,76058,160],{"emptyLinePlaceholder":159},[128,76060,76061,76063],{"class":130,"line":1005},[128,76062,68493],{"class":54685},[128,76064,1959],{"class":138},[128,76066,76067,76069,76071,76073,76075,76077,76079,76081,76083,76085],{"class":130,"line":1017},[128,76068,58265],{"class":166},[128,76070,1967],{"class":138},[128,76072,75698],{"class":166},[128,76074,253],{"class":138},[128,76076,75955],{"class":166},[128,76078,258],{"class":138},[128,76080,75960],{"class":166},[128,76082,258],{"class":138},[128,76084,75960],{"class":166},[128,76086,6292],{"class":138},[128,76088,76089],{"class":130,"line":1022},[128,76090,5773],{"class":138},[128,76092,76093],{"class":130,"line":1027},[128,76094,160],{"emptyLinePlaceholder":159},[128,76096,76097,76099],{"class":130,"line":1033},[128,76098,68493],{"class":54685},[128,76100,2665],{"class":138},[128,76102,76103,76105],{"class":130,"line":1038},[128,76104,68559],{"class":54685},[128,76106,1959],{"class":138},[128,76108,76109,76111,76113,76115,76117],{"class":130,"line":1050},[128,76110,58166],{"class":166},[128,76112,1967],{"class":138},[128,76114,4023],{"class":166},[128,76116,54875],{"class":134},[128,76118,4905],{"class":138},[128,76120,76121,76123,76125,76127],{"class":130,"line":1055},[128,76122,60666],{"class":166},[128,76124,1967],{"class":138},[128,76126,27223],{"class":166},[128,76128,4905],{"class":138},[128,76130,76131,76133,76135,76137,76139],{"class":130,"line":1060},[128,76132,58303],{"class":166},[128,76134,1967],{"class":138},[128,76136,4298],{"class":166},[128,76138,54875],{"class":134},[128,76140,4905],{"class":138},[128,76142,76143,76145,76147,76149,76151,76153,76155,76157,76160,76162,76165,76167,76169],{"class":130,"line":1070},[128,76144,65356],{"class":166},[128,76146,1967],{"class":138},[128,76148,2592],{"class":166},[128,76150,54875],{"class":134},[128,76152,54904],{"class":166},[128,76154,75635],{"class":166},[128,76156,253],{"class":138},[128,76158,76159],{"class":166},"228",[128,76161,258],{"class":138},[128,76163,76164],{"class":166},"225",[128,76166,258],{"class":138},[128,76168,76164],{"class":166},[128,76170,6292],{"class":138},[128,76172,76173,76176,76178,76180,76182],{"class":130,"line":1086},[128,76174,76175],{"class":166},"      padding-left",[128,76177,1967],{"class":138},[128,76179,4069],{"class":166},[128,76181,54875],{"class":134},[128,76183,4905],{"class":138},[128,76185,76186,76188,76190,76192,76195,76197,76199],{"class":130,"line":1095},[128,76187,65239],{"class":166},[128,76189,1967],{"class":138},[128,76191,31606],{"class":166},[128,76193,76194],{"class":166}," linear",[128,76196,65246],{"class":166},[128,76198,4444],{"class":134},[128,76200,4905],{"class":138},[128,76202,76203],{"class":130,"line":1100},[128,76204,5773],{"class":138},[128,76206,76207],{"class":130,"line":1113},[128,76208,160],{"emptyLinePlaceholder":159},[128,76210,76211,76214,76216,76218],{"class":130,"line":1124},[128,76212,76213],{"class":54685},"    tbody",[128,76215,73519],{"class":54685},[128,76217,64319],{"class":199},[128,76219,1959],{"class":138},[128,76221,76222,76224,76226,76228,76230,76232,76234,76236,76238,76240],{"class":130,"line":1129},[128,76223,58265],{"class":166},[128,76225,1967],{"class":138},[128,76227,75698],{"class":166},[128,76229,253],{"class":138},[128,76231,75955],{"class":166},[128,76233,258],{"class":138},[128,76235,75960],{"class":166},[128,76237,258],{"class":138},[128,76239,75960],{"class":166},[128,76241,6292],{"class":138},[128,76243,76244,76246,76248,76250],{"class":130,"line":1134},[128,76245,65404],{"class":166},[128,76247,1967],{"class":138},[128,76249,65409],{"class":166},[128,76251,4905],{"class":138},[128,76253,76254],{"class":130,"line":1150},[128,76255,5773],{"class":138},[128,76257,76258],{"class":130,"line":1164},[128,76259,160],{"emptyLinePlaceholder":159},[128,76261,76262,76264,76266,76269,76271],{"class":130,"line":1178},[128,76263,76213],{"class":54685},[128,76265,73519],{"class":54685},[128,76267,76268],{"class":54685}," td",[128,76270,5010],{"class":54685},[128,76272,1959],{"class":138},[128,76274,76275,76277,76279,76281],{"class":130,"line":1183},[128,76276,58390],{"class":166},[128,76278,1967],{"class":138},[128,76280,64248],{"class":166},[128,76282,4905],{"class":138},[128,76284,76285,76287,76289,76291,76293],{"class":130,"line":1199},[128,76286,58152],{"class":166},[128,76288,1967],{"class":138},[128,76290,4654],{"class":166},[128,76292,54875],{"class":134},[128,76294,4905],{"class":138},[128,76296,76297,76299,76301,76303,76305],{"class":130,"line":1214},[128,76298,58166],{"class":166},[128,76300,1967],{"class":138},[128,76302,4573],{"class":166},[128,76304,54875],{"class":134},[128,76306,4905],{"class":138},[128,76308,76309,76311,76313,76315,76317],{"class":130,"line":1229},[128,76310,60739],{"class":166},[128,76312,1967],{"class":138},[128,76314,4573],{"class":166},[128,76316,54875],{"class":134},[128,76318,4905],{"class":138},[128,76320,76321,76323,76325,76327,76329],{"class":130,"line":1234},[128,76322,65456],{"class":166},[128,76324,1967],{"class":138},[128,76326,409],{"class":166},[128,76328,54875],{"class":134},[128,76330,4905],{"class":138},[128,76332,76333,76335,76337,76339],{"class":130,"line":1239},[128,76334,60796],{"class":166},[128,76336,1967],{"class":138},[128,76338,64221],{"class":166},[128,76340,4905],{"class":138},[128,76342,76343,76345,76347,76349],{"class":130,"line":1251},[128,76344,60666],{"class":166},[128,76346,1967],{"class":138},[128,76348,54975],{"class":166},[128,76350,4905],{"class":138},[128,76352,76353,76355,76357,76359],{"class":130,"line":1256},[128,76354,67348],{"class":166},[128,76356,1967],{"class":138},[128,76358,58118],{"class":166},[128,76360,4905],{"class":138},[128,76362,76363,76365,76367,76370],{"class":130,"line":1261},[128,76364,58265],{"class":166},[128,76366,1967],{"class":138},[128,76368,76369],{"class":166},"orange",[128,76371,4905],{"class":138},[128,76373,76374,76376,76378,76381,76383],{"class":130,"line":1271},[128,76375,58515],{"class":166},[128,76377,1967],{"class":138},[128,76379,76380],{"class":166},"12.5",[128,76382,54875],{"class":134},[128,76384,4905],{"class":138},[128,76386,76387],{"class":130,"line":1287},[128,76388,5773],{"class":138},[128,76390,76391,76393,76395],{"class":130,"line":1296},[128,76392,55799],{"class":138},[128,76394,3659],{"class":54685},[128,76396,54692],{"class":138},[128,76398,76399,76401,76403],{"class":130,"line":1301},[128,76400,55168],{"class":138},[128,76402,54719],{"class":54685},[128,76404,54692],{"class":138},[128,76406,76407],{"class":130,"line":1314},[128,76408,160],{"emptyLinePlaceholder":159},[128,76410,76411,76413,76415],{"class":130,"line":1325},[128,76412,4657],{"class":138},[128,76414,55183],{"class":54685},[128,76416,54692],{"class":138},[128,76418,76419,76421,76423,76426,76428],{"class":130,"line":1330},[128,76420,55526],{"class":138},[128,76422,14],{"class":54685},[128,76424,76425],{"class":138},">学生就业统计表\u003C\u002F",[128,76427,14],{"class":54685},[128,76429,54692],{"class":138},[128,76431,76432,76434,76436,76438,76440,76442,76444,76446,76448],{"class":130,"line":1335},[128,76433,55526],{"class":138},[128,76435,70003],{"class":54685},[128,76437,56868],{"class":199},[128,76439,270],{"class":138},[128,76441,66043],{"class":176},[128,76443,72448],{"class":199},[128,76445,270],{"class":138},[128,76447,35245],{"class":176},[128,76449,54692],{"class":138},[128,76451,76452,76454,76456,76458,76460,76462,76464,76466,76468,76470,76472,76475,76477,76479,76481],{"class":130,"line":1341},[128,76453,54726],{"class":138},[128,76455,643],{"class":54685},[128,76457,57205],{"class":199},[128,76459,270],{"class":138},[128,76461,66077],{"class":176},[128,76463,18442],{"class":199},[128,76465,270],{"class":138},[128,76467,72474],{"class":176},[128,76469,64399],{"class":199},[128,76471,270],{"class":138},[128,76473,76474],{"class":176},"\"姓名\"",[128,76476,56868],{"class":199},[128,76478,270],{"class":138},[128,76480,72474],{"class":176},[128,76482,54692],{"class":138},[128,76484,76485,76487,76489,76491,76493,76495,76497,76499,76501,76503,76505,76508,76510,76512,76514],{"class":130,"line":1346},[128,76486,54726],{"class":138},[128,76488,643],{"class":54685},[128,76490,57205],{"class":199},[128,76492,270],{"class":138},[128,76494,66077],{"class":176},[128,76496,18442],{"class":199},[128,76498,270],{"class":138},[128,76500,1204],{"class":176},[128,76502,64399],{"class":199},[128,76504,270],{"class":138},[128,76506,76507],{"class":176},"\"年龄\"",[128,76509,56868],{"class":199},[128,76511,270],{"class":138},[128,76513,1204],{"class":176},[128,76515,54692],{"class":138},[128,76517,76518,76520,76522,76524,76526,76528,76530,76532,76534,76536,76538,76541,76543,76545,76547],{"class":130,"line":1351},[128,76519,54726],{"class":138},[128,76521,643],{"class":54685},[128,76523,57205],{"class":199},[128,76525,270],{"class":138},[128,76527,66077],{"class":176},[128,76529,18442],{"class":199},[128,76531,270],{"class":138},[128,76533,72603],{"class":176},[128,76535,64399],{"class":199},[128,76537,270],{"class":138},[128,76539,76540],{"class":176},"\"薪资\"",[128,76542,56868],{"class":199},[128,76544,270],{"class":138},[128,76546,72603],{"class":176},[128,76548,54692],{"class":138},[128,76550,76551,76553,76555,76557,76559,76561,76563,76565,76567,76569,76571,76573],{"class":130,"line":1362},[128,76552,54726],{"class":138},[128,76554,72521],{"class":54685},[128,76556,18442],{"class":199},[128,76558,270],{"class":138},[128,76560,72528],{"class":176},[128,76562,18481],{"class":199},[128,76564,270],{"class":138},[128,76566,11209],{"class":176},[128,76568,56868],{"class":199},[128,76570,270],{"class":138},[128,76572,72528],{"class":176},[128,76574,54692],{"class":138},[128,76576,76577,76579,76581,76583,76585,76587,76589,76591],{"class":130,"line":1370},[128,76578,58615],{"class":138},[128,76580,72543],{"class":54685},[128,76582,70029],{"class":199},[128,76584,270],{"class":138},[128,76586,13488],{"class":176},[128,76588,72552],{"class":138},[128,76590,72543],{"class":54685},[128,76592,54692],{"class":138},[128,76594,76595,76597,76599,76601,76603,76605,76607,76609],{"class":130,"line":1397},[128,76596,58615],{"class":138},[128,76598,72543],{"class":54685},[128,76600,70029],{"class":199},[128,76602,270],{"class":138},[128,76604,13557],{"class":176},[128,76606,72571],{"class":138},[128,76608,72543],{"class":54685},[128,76610,54692],{"class":138},[128,76612,76613,76615,76617],{"class":130,"line":1417},[128,76614,55159],{"class":138},[128,76616,72521],{"class":54685},[128,76618,54692],{"class":138},[128,76620,76621,76623,76625,76627,76629,76631,76633,76635,76637,76639,76641,76643],{"class":130,"line":1437},[128,76622,54726],{"class":138},[128,76624,72521],{"class":54685},[128,76626,18442],{"class":199},[128,76628,270],{"class":138},[128,76630,72625],{"class":176},[128,76632,18481],{"class":199},[128,76634,270],{"class":138},[128,76636,11209],{"class":176},[128,76638,56868],{"class":199},[128,76640,270],{"class":138},[128,76642,72625],{"class":176},[128,76644,54692],{"class":138},[128,76646,76647,76649,76651,76653,76655,76657,76659,76661],{"class":130,"line":1458},[128,76648,58615],{"class":138},[128,76650,72543],{"class":54685},[128,76652,70029],{"class":199},[128,76654,270],{"class":138},[128,76656,3110],{"class":176},[128,76658,72648],{"class":138},[128,76660,72543],{"class":54685},[128,76662,54692],{"class":138},[128,76664,76665,76667,76669,76671,76673,76675,76677,76679],{"class":130,"line":1464},[128,76666,58615],{"class":138},[128,76668,72543],{"class":54685},[128,76670,70029],{"class":199},[128,76672,270],{"class":138},[128,76674,3124],{"class":176},[128,76676,72667],{"class":138},[128,76678,72543],{"class":54685},[128,76680,54692],{"class":138},[128,76682,76683,76685,76687,76689,76691,76693,76695,76697],{"class":130,"line":1469},[128,76684,58615],{"class":138},[128,76686,72543],{"class":54685},[128,76688,70029],{"class":199},[128,76690,270],{"class":138},[128,76692,72684],{"class":176},[128,76694,72687],{"class":138},[128,76696,72543],{"class":54685},[128,76698,54692],{"class":138},[128,76700,76701,76703,76705,76707,76709,76711,76713,76715],{"class":130,"line":1474},[128,76702,58615],{"class":138},[128,76704,72543],{"class":54685},[128,76706,70029],{"class":199},[128,76708,270],{"class":138},[128,76710,72704],{"class":176},[128,76712,72707],{"class":138},[128,76714,72543],{"class":54685},[128,76716,54692],{"class":138},[128,76718,76719,76721,76723,76725,76727,76729,76731,76733],{"class":130,"line":1484},[128,76720,58615],{"class":138},[128,76722,72543],{"class":54685},[128,76724,70029],{"class":199},[128,76726,270],{"class":138},[128,76728,72724],{"class":176},[128,76730,72727],{"class":138},[128,76732,72543],{"class":54685},[128,76734,54692],{"class":138},[128,76736,76737,76739,76741],{"class":130,"line":1493},[128,76738,55159],{"class":138},[128,76740,72521],{"class":54685},[128,76742,54692],{"class":138},[128,76744,76745,76747,76749],{"class":130,"line":1505},[128,76746,54726],{"class":138},[128,76748,57268],{"class":54685},[128,76750,54692],{"class":138},[128,76752,76753,76755,76757,76760,76762,76765,76767],{"class":130,"line":1510},[128,76754,58615],{"class":138},[128,76756,128],{"class":54685},[128,76758,76759],{"class":138},">+\u003C\u002F",[128,76761,128],{"class":54685},[128,76763,76764],{"class":138},">添加\u003C\u002F",[128,76766,57268],{"class":54685},[128,76768,54692],{"class":138},[128,76770,76771,76773,76775],{"class":130,"line":1515},[128,76772,55799],{"class":138},[128,76774,70003],{"class":54685},[128,76776,54692],{"class":138},[128,76778,76779,76781,76783,76785,76787,76789,76792,76794,76797,76799,76802,76804],{"class":130,"line":1543},[128,76780,55526],{"class":138},[128,76782,54994],{"class":54685},[128,76784,56868],{"class":199},[128,76786,270],{"class":138},[128,76788,65959],{"class":176},[128,76790,76791],{"class":138},">共有数据 \u003C",[128,76793,128],{"class":54685},[128,76795,76796],{"class":138},">0\u003C\u002F",[128,76798,128],{"class":54685},[128,76800,76801],{"class":138},"> 条\u003C\u002F",[128,76803,54994],{"class":54685},[128,76805,54692],{"class":138},[128,76807,76808,76810,76812],{"class":130,"line":1554},[128,76809,55526],{"class":138},[128,76811,3891],{"class":54685},[128,76813,54692],{"class":138},[128,76815,76816,76818,76820],{"class":130,"line":1560},[128,76817,54726],{"class":138},[128,76819,3894],{"class":54685},[128,76821,54692],{"class":138},[128,76823,76824,76826,76828],{"class":130,"line":1565},[128,76825,58615],{"class":138},[128,76827,3897],{"class":54685},[128,76829,54692],{"class":138},[128,76831,76832,76834,76836,76839,76841],{"class":130,"line":1570},[128,76833,58683],{"class":138},[128,76835,3900],{"class":54685},[128,76837,76838],{"class":138},">ID\u003C\u002F",[128,76840,3900],{"class":54685},[128,76842,54692],{"class":138},[128,76844,76845,76847,76849,76851,76853],{"class":130,"line":1580},[128,76846,58683],{"class":138},[128,76848,3900],{"class":54685},[128,76850,72830],{"class":138},[128,76852,3900],{"class":54685},[128,76854,54692],{"class":138},[128,76856,76857,76859,76861,76863,76865],{"class":130,"line":1591},[128,76858,58683],{"class":138},[128,76860,3900],{"class":54685},[128,76862,72843],{"class":138},[128,76864,3900],{"class":54685},[128,76866,54692],{"class":138},[128,76868,76869,76871,76873,76875,76877],{"class":130,"line":1596},[128,76870,58683],{"class":138},[128,76872,3900],{"class":54685},[128,76874,72856],{"class":138},[128,76876,3900],{"class":54685},[128,76878,54692],{"class":138},[128,76880,76881,76883,76885,76887,76889],{"class":130,"line":1605},[128,76882,58683],{"class":138},[128,76884,3900],{"class":54685},[128,76886,72869],{"class":138},[128,76888,3900],{"class":54685},[128,76890,54692],{"class":138},[128,76892,76893,76895,76897,76899,76901],{"class":130,"line":1611},[128,76894,58683],{"class":138},[128,76896,3900],{"class":54685},[128,76898,72882],{"class":138},[128,76900,3900],{"class":54685},[128,76902,54692],{"class":138},[128,76904,76905,76907,76909,76912,76914],{"class":130,"line":1628},[128,76906,58683],{"class":138},[128,76908,3900],{"class":54685},[128,76910,76911],{"class":138},">录入时间\u003C\u002F",[128,76913,3900],{"class":54685},[128,76915,54692],{"class":138},[128,76917,76918,76920,76922,76924,76926],{"class":130,"line":1633},[128,76919,58683],{"class":138},[128,76921,3900],{"class":54685},[128,76923,72895],{"class":138},[128,76925,3900],{"class":54685},[128,76927,54692],{"class":138},[128,76929,76930,76932,76934],{"class":130,"line":1648},[128,76931,58788],{"class":138},[128,76933,3897],{"class":54685},[128,76935,54692],{"class":138},[128,76937,76938,76940,76942],{"class":130,"line":1654},[128,76939,55159],{"class":138},[128,76941,3894],{"class":54685},[128,76943,54692],{"class":138},[128,76945,76946,76948,76950],{"class":130,"line":1669},[128,76947,54726],{"class":138},[128,76949,3938],{"class":54685},[128,76951,54692],{"class":138},[128,76953,76954],{"class":130,"line":1675},[128,76955,76956],{"class":3814},"      \u003C!-- \u003Ctr>\n",[128,76958,76959],{"class":130,"line":1689},[128,76960,76961],{"class":3814},"        \u003Ctd>1\u003C\u002Ftd>\n",[128,76963,76964],{"class":130,"line":1695},[128,76965,76961],{"class":3814},[128,76967,76968],{"class":130,"line":1709},[128,76969,76961],{"class":3814},[128,76971,76972],{"class":130,"line":1715},[128,76973,76961],{"class":3814},[128,76975,76976],{"class":130,"line":1729},[128,76977,76961],{"class":3814},[128,76979,76980],{"class":130,"line":1735},[128,76981,76961],{"class":3814},[128,76983,76984],{"class":130,"line":1749},[128,76985,76961],{"class":3814},[128,76987,76988],{"class":130,"line":1761},[128,76989,76990],{"class":3814},"        \u003Ctd>\n",[128,76992,76993],{"class":130,"line":1767},[128,76994,76995],{"class":3814},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[128,76997,76998],{"class":130,"line":1775},[128,76999,77000],{"class":3814},"        \u003C\u002Ftd>\n",[128,77002,77003],{"class":130,"line":1787},[128,77004,77005],{"class":3814},"      \u003C\u002Ftr> -->\n",[128,77007,77008,77010,77012],{"class":130,"line":1792},[128,77009,55159],{"class":138},[128,77011,3938],{"class":54685},[128,77013,54692],{"class":138},[128,77015,77016,77018,77020],{"class":130,"line":1797},[128,77017,55799],{"class":138},[128,77019,3891],{"class":54685},[128,77021,54692],{"class":138},[128,77023,77024,77026,77028],{"class":130,"line":1814},[128,77025,55526],{"class":138},[128,77027,55196],{"class":54685},[128,77029,54692],{"class":138},[128,77031,77032],{"class":130,"line":36751},[128,77033,77034],{"class":3814},"    \u002F\u002F const initData = [{\n",[128,77036,77037],{"class":130,"line":36757},[128,77038,77039],{"class":3814},"    \u002F\u002F   unameId: 1,\n",[128,77041,77042],{"class":130,"line":36768},[128,77043,77044],{"class":3814},"    \u002F\u002F   uname: '华晨宇',\n",[128,77046,77047],{"class":130,"line":36774},[128,77048,77049],{"class":3814},"    \u002F\u002F   age: 22,\n",[128,77051,77052],{"class":130,"line":36780},[128,77053,77054],{"class":3814},"    \u002F\u002F   salary: 12000,\n",[128,77056,77057],{"class":130,"line":36786},[128,77058,77059],{"class":3814},"    \u002F\u002F   gender: '男',\n",[128,77061,77062],{"class":130,"line":36804},[128,77063,77064],{"class":3814},"    \u002F\u002F   city: '北京',\n",[128,77066,77067],{"class":130,"line":36818},[128,77068,77069],{"class":3814},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[128,77071,77072],{"class":130,"line":36827},[128,77073,77074],{"class":3814},"    \u002F\u002F }]\n",[128,77076,77077],{"class":130,"line":36836},[128,77078,77079],{"class":3814},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[128,77081,77082],{"class":130,"line":36845},[128,77083,77084],{"class":3814},"    \u002F\u002F 1.渲染业务\n",[128,77086,77087],{"class":130,"line":36854},[128,77088,77089],{"class":3814},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[128,77091,77092],{"class":130,"line":36859},[128,77093,77094],{"class":3814},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[128,77096,77097],{"class":130,"line":36865},[128,77098,77099],{"class":3814},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[128,77101,77102],{"class":130,"line":36873},[128,77103,160],{"emptyLinePlaceholder":159},[128,77105,77106],{"class":130,"line":36878},[128,77107,77108],{"class":3814},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[128,77110,77111],{"class":130,"line":36884},[128,77112,77113],{"class":3814},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[128,77115,77116,77118,77120,77122],{"class":130,"line":36895},[128,77117,14748],{"class":134},[128,77119,61075],{"class":166},[128,77121,170],{"class":134},[128,77123,227],{"class":138},[128,77125,77126,77129,77131],{"class":130,"line":36901},[128,77127,77128],{"class":138},"    console.",[128,77130,61627],{"class":199},[128,77132,55794],{"class":138},[128,77134,77135],{"class":130,"line":36921},[128,77136,160],{"emptyLinePlaceholder":159},[128,77138,77139],{"class":130,"line":36927},[128,77140,77141],{"class":3814},"    \u002F\u002F 时间函数\n",[128,77143,77144,77146,77149],{"class":130,"line":36933},[128,77145,73459],{"class":134},[128,77147,77148],{"class":199}," getTime",[128,77150,14380],{"class":138},[128,77152,77153,77155,77158,77160,77162,77165],{"class":130,"line":36939},[128,77154,61608],{"class":134},[128,77156,77157],{"class":166}," date",[128,77159,170],{"class":134},[128,77161,15105],{"class":134},[128,77163,77164],{"class":199}," Date",[128,77166,5563],{"class":138},[128,77168,77169,77171,77173,77175,77178,77181,77183,77185,77187,77190,77193,77195,77197,77199,77201,77203,77205,77207],{"class":130,"line":36956},[128,77170,61608],{"class":134},[128,77172,19610],{"class":166},[128,77174,170],{"class":134},[128,77176,77177],{"class":138}," date.",[128,77179,77180],{"class":199},"getHours",[128,77182,16576],{"class":138},[128,77184,4657],{"class":134},[128,77186,5625],{"class":166},[128,77188,77189],{"class":134}," ?",[128,77191,77192],{"class":176}," '0'",[128,77194,48951],{"class":134},[128,77196,77177],{"class":138},[128,77198,77180],{"class":199},[128,77200,16576],{"class":138},[128,77202,4607],{"class":134},[128,77204,77177],{"class":138},[128,77206,77180],{"class":199},[128,77208,5563],{"class":138},[128,77210,77211,77213,77216,77218,77220,77223,77225,77227,77229,77231,77233,77235,77237,77239,77241,77243,77245,77247],{"class":130,"line":36962},[128,77212,61608],{"class":134},[128,77214,77215],{"class":166}," m",[128,77217,170],{"class":134},[128,77219,77177],{"class":138},[128,77221,77222],{"class":199},"getMinutes",[128,77224,16576],{"class":138},[128,77226,4657],{"class":134},[128,77228,5625],{"class":166},[128,77230,77189],{"class":134},[128,77232,77192],{"class":176},[128,77234,48951],{"class":134},[128,77236,77177],{"class":138},[128,77238,77222],{"class":199},[128,77240,16576],{"class":138},[128,77242,4607],{"class":134},[128,77244,77177],{"class":138},[128,77246,77222],{"class":199},[128,77248,5563],{"class":138},[128,77250,77251,77253,77255,77257,77259,77262,77264,77266,77268,77270,77272,77274,77276,77278,77280,77282,77284,77286],{"class":130,"line":36968},[128,77252,61608],{"class":134},[128,77254,11974],{"class":166},[128,77256,170],{"class":134},[128,77258,77177],{"class":138},[128,77260,77261],{"class":199},"getSeconds",[128,77263,16576],{"class":138},[128,77265,4657],{"class":134},[128,77267,5625],{"class":166},[128,77269,77189],{"class":134},[128,77271,77192],{"class":176},[128,77273,48951],{"class":134},[128,77275,77177],{"class":138},[128,77277,77261],{"class":199},[128,77279,16576],{"class":138},[128,77281,4607],{"class":134},[128,77283,77177],{"class":138},[128,77285,77261],{"class":199},[128,77287,5563],{"class":138},[128,77289,77290,77292,77295,77297,77299,77301,77303,77306,77308,77311,77313,77315,77318,77320,77322,77324,77326,77328,77330,77333,77335,77338,77340,77343,77345,77347,77349],{"class":130,"line":36974},[128,77291,61608],{"class":134},[128,77293,77294],{"class":166}," str",[128,77296,170],{"class":134},[128,77298,66281],{"class":176},[128,77300,3026],{"class":138},[128,77302,4307],{"class":176},[128,77304,77305],{"class":199},"getFullYear",[128,77307,6010],{"class":176},[128,77309,77310],{"class":176},"}\u002F${",[128,77312,3026],{"class":138},[128,77314,4307],{"class":176},[128,77316,77317],{"class":199},"getMonth",[128,77319,16576],{"class":176},[128,77321,2457],{"class":134},[128,77323,28605],{"class":166},[128,77325,77310],{"class":176},[128,77327,3026],{"class":138},[128,77329,4307],{"class":176},[128,77331,77332],{"class":199},"getDate",[128,77334,6010],{"class":176},[128,77336,77337],{"class":176},"} ${",[128,77339,4165],{"class":138},[128,77341,77342],{"class":176},"}:${",[128,77344,4293],{"class":138},[128,77346,77342],{"class":176},[128,77348,4444],{"class":138},[128,77350,77351],{"class":176},"}`\n",[128,77353,77354,77357],{"class":130,"line":36980},[128,77355,77356],{"class":134},"      return",[128,77358,77359],{"class":138}," str\n",[128,77361,77362],{"class":130,"line":36986},[128,77363,5773],{"class":138},[128,77365,77366],{"class":130,"line":37013},[128,77367,77368],{"class":3814},"    \u002F\u002F 渲染函数\n",[128,77370,77371,77373,77375,77377,77379,77381,77383,77385],{"class":130,"line":37037},[128,77372,14748],{"class":134},[128,77374,73122],{"class":166},[128,77376,170],{"class":134},[128,77378,57777],{"class":138},[128,77380,57780],{"class":199},[128,77382,253],{"class":138},[128,77384,73133],{"class":176},[128,77386,180],{"class":138},[128,77388,77389,77391,77393],{"class":130,"line":37043},[128,77390,73459],{"class":134},[128,77392,73462],{"class":199},[128,77394,14380],{"class":138},[128,77396,77397],{"class":130,"line":37049},[128,77398,77399],{"class":3814},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[128,77401,77402],{"class":130,"line":37055},[128,77403,77404],{"class":3814},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[128,77406,77407,77409,77412,77414,77416,77419,77421,77423,77425,77428,77430,77433],{"class":130,"line":37066},[128,77408,61608],{"class":134},[128,77410,77411],{"class":166}," trArr",[128,77413,170],{"class":134},[128,77415,55347],{"class":138},[128,77417,77418],{"class":199},"map",[128,77420,253],{"class":138},[128,77422,57830],{"class":134},[128,77424,5260],{"class":138},[128,77426,77427],{"class":266},"ele",[128,77429,258],{"class":138},[128,77431,77432],{"class":266},"index",[128,77434,15968],{"class":138},[128,77436,77437,77439],{"class":130,"line":37077},[128,77438,224],{"class":134},[128,77440,73543],{"class":176},[128,77442,77443],{"class":130,"line":37083},[128,77444,77445],{"class":176},"      \u003Ctr>\n",[128,77447,77448,77450,77452,77454,77457],{"class":130,"line":37100},[128,77449,73548],{"class":176},[128,77451,77427],{"class":138},[128,77453,4307],{"class":176},[128,77455,77456],{"class":138},"unameId",[128,77458,73563],{"class":176},[128,77460,77461,77463,77465,77467,77469],{"class":130,"line":37123},[128,77462,73548],{"class":176},[128,77464,77427],{"class":138},[128,77466,4307],{"class":176},[128,77468,73579],{"class":138},[128,77470,73563],{"class":176},[128,77472,77473,77475,77477,77479,77481],{"class":130,"line":37146},[128,77474,73548],{"class":176},[128,77476,77427],{"class":138},[128,77478,4307],{"class":176},[128,77480,73596],{"class":138},[128,77482,73563],{"class":176},[128,77484,77485,77487,77489,77491,77493],{"class":130,"line":37152},[128,77486,73548],{"class":176},[128,77488,77427],{"class":138},[128,77490,4307],{"class":176},[128,77492,73613],{"class":138},[128,77494,73563],{"class":176},[128,77496,77497,77499,77501,77503,77505],{"class":130,"line":37157},[128,77498,73548],{"class":176},[128,77500,77427],{"class":138},[128,77502,4307],{"class":176},[128,77504,73630],{"class":138},[128,77506,73563],{"class":176},[128,77508,77509,77511,77513,77515,77517],{"class":130,"line":37166},[128,77510,73548],{"class":176},[128,77512,77427],{"class":138},[128,77514,4307],{"class":176},[128,77516,73647],{"class":138},[128,77518,73563],{"class":176},[128,77520,77521,77523,77525,77527,77529],{"class":130,"line":37176},[128,77522,73548],{"class":176},[128,77524,77427],{"class":138},[128,77526,4307],{"class":176},[128,77528,5971],{"class":138},[128,77530,73563],{"class":176},[128,77532,77533],{"class":130,"line":37182},[128,77534,76990],{"class":176},[128,77536,77537,77540,77542],{"class":130,"line":37187},[128,77538,77539],{"class":176},"          \u003Ca href=\"#\" data-id=\"${",[128,77541,77432],{"class":138},[128,77543,77544],{"class":176},"}\">删除\u003C\u002Fa>\n",[128,77546,77547],{"class":130,"line":37193},[128,77548,77000],{"class":176},[128,77550,77551],{"class":130,"line":37206},[128,77552,77553],{"class":176},"      \u003C\u002Ftr>\n",[128,77555,77556],{"class":130,"line":37212},[128,77557,77558],{"class":176},"  `\n",[128,77560,77561],{"class":130,"line":37223},[128,77562,68193],{"class":138},[128,77564,77565,77567,77569],{"class":130,"line":37234},[128,77566,61624],{"class":138},[128,77568,61627],{"class":199},[128,77570,77571],{"class":138},"(trArr)\n",[128,77573,77574],{"class":130,"line":37253},[128,77575,160],{"emptyLinePlaceholder":159},[128,77577,77578],{"class":130,"line":52903},[128,77579,77580],{"class":3814},"      \u002F\u002F (2) 把数组转换为字符串join\n",[128,77582,77583],{"class":130,"line":52908},[128,77584,77585],{"class":3814},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[128,77587,77588,77590,77592,77595,77598,77600,77603],{"class":130,"line":52917},[128,77589,73474],{"class":138},[128,77591,270],{"class":134},[128,77593,77594],{"class":138}," trArr.",[128,77596,77597],{"class":199},"join",[128,77599,253],{"class":138},[128,77601,77602],{"class":176},"''",[128,77604,180],{"class":138},[128,77606,77607],{"class":130,"line":52926},[128,77608,77609],{"class":3814},"      \u002F\u002F 显示共有几条\n",[128,77611,77612,77614,77616,77618,77621,77624,77626,77628],{"class":130,"line":52931},[128,77613,59151],{"class":138},[128,77615,57780],{"class":199},[128,77617,253],{"class":138},[128,77619,77620],{"class":176},"'.total span'",[128,77622,77623],{"class":138},").innerHTML ",[128,77625,270],{"class":134},[128,77627,55347],{"class":138},[128,77629,59211],{"class":166},[128,77631,77632],{"class":130,"line":52936},[128,77633,5773],{"class":138},[128,77635,77636],{"class":130,"line":52941},[128,77637,77638],{"class":3814},"    \u002F\u002F render()\n",[128,77640,77641],{"class":130,"line":52954},[128,77642,160],{"emptyLinePlaceholder":159},[128,77644,77645],{"class":130,"line":52959},[128,77646,77647],{"class":3814},"    \u002F\u002F 获取DOM对象\n",[128,77649,77650,77652,77654,77656,77658,77660,77662,77664],{"class":130,"line":52968},[128,77651,14748],{"class":134},[128,77653,73196],{"class":166},[128,77655,170],{"class":134},[128,77657,57777],{"class":138},[128,77659,57780],{"class":199},[128,77661,253],{"class":138},[128,77663,73207],{"class":176},[128,77665,180],{"class":138},[128,77667,77668,77670,77672,77674,77676,77678,77680,77682],{"class":130,"line":52977},[128,77669,14748],{"class":134},[128,77671,73023],{"class":166},[128,77673,170],{"class":134},[128,77675,57777],{"class":138},[128,77677,57780],{"class":199},[128,77679,253],{"class":138},[128,77681,73034],{"class":176},[128,77683,180],{"class":138},[128,77685,77686,77688,77690,77692,77694,77696,77698,77700],{"class":130,"line":52994},[128,77687,14748],{"class":134},[128,77689,19209],{"class":166},[128,77691,170],{"class":134},[128,77693,57777],{"class":138},[128,77695,57780],{"class":199},[128,77697,253],{"class":138},[128,77699,73053],{"class":176},[128,77701,180],{"class":138},[128,77703,77705,77707,77709,77711,77713,77715,77717,77719],{"class":130,"line":77704},231,[128,77706,14748],{"class":134},[128,77708,73082],{"class":166},[128,77710,170],{"class":134},[128,77712,57777],{"class":138},[128,77714,57780],{"class":199},[128,77716,253],{"class":138},[128,77718,73093],{"class":176},[128,77720,180],{"class":138},[128,77722,77724,77726,77728,77730,77732,77734,77736,77738],{"class":130,"line":77723},232,[128,77725,14748],{"class":134},[128,77727,73062],{"class":166},[128,77729,170],{"class":134},[128,77731,57777],{"class":138},[128,77733,57780],{"class":199},[128,77735,253],{"class":138},[128,77737,73073],{"class":176},[128,77739,180],{"class":138},[128,77741,77743,77745,77747,77749,77751,77753,77755,77757],{"class":130,"line":77742},233,[128,77744,14748],{"class":134},[128,77746,73102],{"class":166},[128,77748,170],{"class":134},[128,77750,57777],{"class":138},[128,77752,57780],{"class":199},[128,77754,253],{"class":138},[128,77756,73113],{"class":176},[128,77758,180],{"class":138},[128,77760,77762],{"class":130,"line":77761},234,[128,77763,160],{"emptyLinePlaceholder":159},[128,77765,77767],{"class":130,"line":77766},235,[128,77768,77769],{"class":3814},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[128,77771,77773,77775,77777,77779,77781,77783,77785,77787,77789],{"class":130,"line":77772},236,[128,77774,73214],{"class":138},[128,77776,61193],{"class":199},[128,77778,253],{"class":138},[128,77780,73221],{"class":176},[128,77782,258],{"class":138},[128,77784,57830],{"class":134},[128,77786,5260],{"class":138},[128,77788,3830],{"class":266},[128,77790,15968],{"class":138},[128,77792,77794],{"class":130,"line":77793},237,[128,77795,77796],{"class":3814},"      \u002F\u002F 禁止浏览器跳转\n",[128,77798,77800,77802,77804],{"class":130,"line":77799},238,[128,77801,73241],{"class":138},[128,77803,73244],{"class":199},[128,77805,5563],{"class":138},[128,77807,77809],{"class":130,"line":77808},239,[128,77810,77811],{"class":3814},"      \u002F\u002F 非空判断\n",[128,77813,77815],{"class":130,"line":77814},240,[128,77816,77817],{"class":3814},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[128,77819,77821],{"class":130,"line":77820},241,[128,77822,77823],{"class":3814},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[128,77825,77827,77829,77831,77833,77836,77838,77841,77844,77846,77848],{"class":130,"line":77826},242,[128,77828,57861],{"class":134},[128,77830,5260],{"class":138},[128,77832,3977],{"class":134},[128,77834,77835],{"class":138},"uname.value ",[128,77837,74732],{"class":134},[128,77839,77840],{"class":134}," !",[128,77842,77843],{"class":138},"age.value ",[128,77845,74732],{"class":134},[128,77847,77840],{"class":134},[128,77849,77850],{"class":138},"salary.value) {\n",[128,77852,77854,77856,77858,77860,77862],{"class":130,"line":77853},243,[128,77855,224],{"class":134},[128,77857,73315],{"class":199},[128,77859,253],{"class":138},[128,77861,73320],{"class":176},[128,77863,180],{"class":138},[128,77865,77867],{"class":130,"line":77866},244,[128,77868,55780],{"class":138},[128,77870,77872,77874,77876],{"class":130,"line":77871},245,[128,77873,61387],{"class":138},[128,77875,55266],{"class":199},[128,77877,77878],{"class":138},"({\n",[128,77880,77882],{"class":130,"line":77881},246,[128,77883,77884],{"class":3814},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[128,77886,77888],{"class":130,"line":77887},247,[128,77889,77890],{"class":3814},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[128,77892,77894],{"class":130,"line":77893},248,[128,77895,77896],{"class":3814},"        \u002F\u002F 对象的序号应为数组长度+1\n",[128,77898,77900],{"class":130,"line":77899},249,[128,77901,77902],{"class":3814},"        \u002F\u002F unameId: arr.length + 1,\n",[128,77904,77906],{"class":130,"line":77905},250,[128,77907,160],{"emptyLinePlaceholder":159},[128,77909,77911],{"class":130,"line":77910},251,[128,77912,77913],{"class":3814},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[128,77915,77917],{"class":130,"line":77916},252,[128,77918,77919],{"class":3814},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[128,77921,77923],{"class":130,"line":77922},253,[128,77924,77925],{"class":3814},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[128,77927,77929],{"class":130,"line":77928},254,[128,77930,77931],{"class":3814},"        \u002F\u002F 0当假看\n",[128,77933,77935,77938,77940,77942,77945,77947,77949,77951,77954,77956,77958,77961,77963],{"class":130,"line":77934},255,[128,77936,77937],{"class":138},"        unameId: arr.",[128,77939,55350],{"class":166},[128,77941,77189],{"class":134},[128,77943,77944],{"class":138}," arr[arr.",[128,77946,55350],{"class":166},[128,77948,55653],{"class":134},[128,77950,28605],{"class":166},[128,77952,77953],{"class":138},"].unameId ",[128,77955,2457],{"class":134},[128,77957,28605],{"class":166},[128,77959,77960],{"class":134}," :",[128,77962,28605],{"class":166},[128,77964,2665],{"class":138},[128,77966,77968],{"class":130,"line":77967},256,[128,77969,73368],{"class":138},[128,77971,77973],{"class":130,"line":77972},257,[128,77974,73373],{"class":138},[128,77976,77978],{"class":130,"line":77977},258,[128,77979,73383],{"class":138},[128,77981,77983],{"class":130,"line":77982},259,[128,77984,73378],{"class":138},[128,77986,77988],{"class":130,"line":77987},260,[128,77989,77990],{"class":138},"        city: city.value,\n",[128,77992,77994],{"class":130,"line":77993},261,[128,77995,77996],{"class":3814},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[128,77998,78000],{"class":130,"line":77999},262,[128,78001,78002],{"class":3814},"        \u002F\u002F time: new Date().toDateString()\n",[128,78004,78006,78009,78012],{"class":130,"line":78005},263,[128,78007,78008],{"class":138},"        time: ",[128,78010,78011],{"class":199},"getTime",[128,78013,5563],{"class":138},[128,78015,78017],{"class":130,"line":78016},264,[128,78018,68193],{"class":138},[128,78020,78022],{"class":130,"line":78021},265,[128,78023,78024],{"class":3814},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[128,78026,78028,78030],{"class":130,"line":78027},266,[128,78029,73443],{"class":199},[128,78031,5563],{"class":138},[128,78033,78035,78037,78039,78041,78043],{"class":130,"line":78034},267,[128,78036,73426],{"class":166},[128,78038,4307],{"class":138},[128,78040,73431],{"class":199},[128,78042,16576],{"class":138},[128,78044,78045],{"class":3814},"\u002F\u002F重置表单\n",[128,78047,78049],{"class":130,"line":78048},268,[128,78050,78051],{"class":3814},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[128,78053,78055,78058,78060,78062,78065,78067,78069,78071,78073],{"class":130,"line":78054},269,[128,78056,78057],{"class":138},"      localStorage.",[128,78059,75029],{"class":199},[128,78061,253],{"class":138},[128,78063,78064],{"class":176},"'data'",[128,78066,258],{"class":138},[128,78068,75039],{"class":166},[128,78070,4307],{"class":138},[128,78072,75044],{"class":199},[128,78074,78075],{"class":138},"(arr))\n",[128,78077,78079],{"class":130,"line":78078},270,[128,78080,917],{"class":138},[128,78082,78084],{"class":130,"line":78083},271,[128,78085,160],{"emptyLinePlaceholder":159},[128,78087,78089],{"class":130,"line":78088},272,[128,78090,78091],{"class":3814},"    \u002F\u002F 3.删除业务\n",[128,78093,78095],{"class":130,"line":78094},273,[128,78096,78097],{"class":3814},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[128,78099,78101,78103,78105,78107,78109,78111,78113,78115,78117],{"class":130,"line":78100},274,[128,78102,73716],{"class":138},[128,78104,61193],{"class":199},[128,78106,253],{"class":138},[128,78108,61198],{"class":176},[128,78110,258],{"class":138},[128,78112,57830],{"class":134},[128,78114,5260],{"class":138},[128,78116,3830],{"class":266},[128,78118,15968],{"class":138},[128,78120,78122],{"class":130,"line":78121},275,[128,78123,78124],{"class":3814},"      \u002F\u002F 判断是否点击的是删除按钮\n",[128,78126,78128,78130,78132,78134,78136],{"class":130,"line":78127},276,[128,78129,57861],{"class":134},[128,78131,70412],{"class":138},[128,78133,57867],{"class":134},[128,78135,71634],{"class":176},[128,78137,15968],{"class":138},[128,78139,78141],{"class":130,"line":78140},277,[128,78142,78143],{"class":3814},"        \u002F\u002F alert(1)\n",[128,78145,78147],{"class":130,"line":78146},278,[128,78148,78149],{"class":3814},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[128,78151,78153],{"class":130,"line":78152},279,[128,78154,78155],{"class":3814},"        \u002F\u002F console.log(e.target)\n",[128,78157,78159],{"class":130,"line":78158},280,[128,78160,78161],{"class":3814},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[128,78163,78165],{"class":130,"line":78164},281,[128,78166,160],{"emptyLinePlaceholder":159},[128,78168,78170],{"class":130,"line":78169},282,[128,78171,78172],{"class":3814},"        \u002F\u002F 确认框，确然是否真的要删除\n",[128,78174,78176],{"class":130,"line":78175},283,[128,78177,78178],{"class":3814},"        \u002F\u002F confirm()为确认框\n",[128,78180,78182],{"class":130,"line":78181},284,[128,78183,78184],{"class":3814},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[128,78186,78188,78190,78192,78195,78197,78200],{"class":130,"line":78187},285,[128,78189,558],{"class":134},[128,78191,5260],{"class":138},[128,78193,78194],{"class":199},"confirm",[128,78196,253],{"class":138},[128,78198,78199],{"class":176},"'您确定要删除这条数据吗？'",[128,78201,78202],{"class":138},")) {\n",[128,78204,78206,78209,78211,78213,78215],{"class":130,"line":78205},286,[128,78207,78208],{"class":138},"          arr.",[128,78210,61390],{"class":199},[128,78212,73769],{"class":138},[128,78214,2592],{"class":166},[128,78216,180],{"class":138},[128,78218,78220],{"class":130,"line":78219},287,[128,78221,78222],{"class":3814},"          \u002F\u002F 3.4 重新渲染页面\n",[128,78224,78226,78229],{"class":130,"line":78225},288,[128,78227,78228],{"class":199},"          render",[128,78230,5563],{"class":138},[128,78232,78234],{"class":130,"line":78233},289,[128,78235,78236],{"class":3814},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[128,78238,78240,78243,78245,78247,78249,78251,78253,78255,78257],{"class":130,"line":78239},290,[128,78241,78242],{"class":138},"          localStorage.",[128,78244,75029],{"class":199},[128,78246,253],{"class":138},[128,78248,78064],{"class":176},[128,78250,258],{"class":138},[128,78252,75039],{"class":166},[128,78254,4307],{"class":138},[128,78256,75044],{"class":199},[128,78258,78075],{"class":138},[128,78260,78262],{"class":130,"line":78261},291,[128,78263,2014],{"class":138},[128,78265,78267],{"class":130,"line":78266},292,[128,78268,55780],{"class":138},[128,78270,78272],{"class":130,"line":78271},293,[128,78273,160],{"emptyLinePlaceholder":159},[128,78275,78277],{"class":130,"line":78276},294,[128,78278,917],{"class":138},[128,78280,78282],{"class":130,"line":78281},295,[128,78283,160],{"emptyLinePlaceholder":159},[128,78285,78287,78289,78291],{"class":130,"line":78286},296,[128,78288,55799],{"class":138},[128,78290,55196],{"class":54685},[128,78292,54692],{"class":138},[128,78294,78296,78298,78300],{"class":130,"line":78295},297,[128,78297,55168],{"class":138},[128,78299,55183],{"class":54685},[128,78301,54692],{"class":138},[128,78303,78305],{"class":130,"line":78304},298,[128,78306,160],{"emptyLinePlaceholder":159},[128,78308,78310,78312,78314],{"class":130,"line":78309},299,[128,78311,55168],{"class":138},[128,78313,54020],{"class":54685},[128,78315,54692],{"class":138},[14,78317,78319],{"id":78318},"_36-正则表达式","3.6 正则表达式",[19,78321,78322],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,78324,78325],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,78327,78328],{},"正则表达式的作用：",[4752,78330,78331,78338,78344],{},[29,78332,78333,78334,78337],{},"表单验证（ ",[3903,78335,78336],{},"匹配"," ）",[29,78339,78340,78341,78337],{},"过滤敏感词（ ",[3903,78342,78343],{},"替换",[29,78345,78346,78347,78337],{},"字符串中提取我们想要的部分（ ",[3903,78348,78349],{},"提取",[72,78351,78353],{"id":78352},"_361-语法","3.6.1 语法",[19,78355,78356],{},"正则表达式使用步骤：",[26,78358,78359,78362],{},[29,78360,78361],{},"定义规则",[29,78363,78364],{},"查找是否匹配",[19,78366,78367],{},"正则表达式里边不需要写引号",[19,78369,78370],{},[5074,78371],{"alt":112,"src":78372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,78374,78375],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,78377,78378],{},"reg.test(str)",[19,78380,78381],{},[5074,78382],{"alt":112,"src":78383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,78385,78386],{},[5074,78387],{"alt":112,"src":78388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[72,78390,78392],{"id":78391},"_362-元字符","3.6.2 元字符",[26,78394,78395,78398,78401,78404,78411],{},[29,78396,78397],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[29,78399,78400],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[29,78402,78403],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[29,78405,78406,78407],{},"正则验证工具：",[3989,78408,78409],{"href":78409,"rel":78410},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[27352],[29,78412,78413],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[25485,78415,78417],{"id":78416},"_3621-边界符","3.6.2.1 边界符",[19,78419,78420],{},[5074,78421],{"alt":112,"src":78422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,78424,78425],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,78427,78428],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,78430,78431],{},"只匹配一次",[19,78433,78434],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[25485,78436,78438],{"id":78437},"_3622-量词","3.6.2.2 量词",[19,78440,78441],{},[5074,78442],{"alt":112,"src":78443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,78445,78446],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[25485,78448,78450],{"id":78449},"_3623-元字符","3.6.2.3 元字符",[19,78452,78453],{},[5074,78454],{"alt":112,"src":78455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,78457,78458],{},"匹配的是a或b或c []只选一个",[19,78460,78461],{},[5074,78462],{"alt":112,"src":78463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,78465,78466],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,78468,78469],{},[5074,78470],{"alt":112,"src":78471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,78473,78474],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,78476,78477],{},[5074,78478],{"alt":112,"src":78479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[106,78481,78483],{"className":54018,"code":78482,"language":54020,"meta":112,"style":112},"\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",[114,78484,78485,78495,78509,78513,78521,78535,78555,78567,78575,78579,78587,78595,78600,78631,78658,78686,78690,78695,78723,78754,78759,78764,78795,78827,78859,78863,78868,78899,78929,78959,78963,78968,78999,79030,79060,79090,79094,79099,79132,79136,79141,79172,79203,79207,79212,79243,79273,79304,79308,79313,79345,79376,79407,79434,79465,79497,79530,79561,79592,79624,79655,79663,79671,79675],{"__ignoreMap":112},[128,78486,78487,78489,78491,78493],{"class":130,"line":131},[128,78488,54682],{"class":138},[128,78490,54686],{"class":54685},[128,78492,54689],{"class":199},[128,78494,54692],{"class":138},[128,78496,78497,78499,78501,78503,78505,78507],{"class":130,"line":142},[128,78498,4657],{"class":138},[128,78500,54020],{"class":54685},[128,78502,54701],{"class":199},[128,78504,270],{"class":138},[128,78506,54706],{"class":176},[128,78508,54692],{"class":138},[128,78510,78511],{"class":130,"line":156},[128,78512,160],{"emptyLinePlaceholder":159},[128,78514,78515,78517,78519],{"class":130,"line":163},[128,78516,4657],{"class":138},[128,78518,54719],{"class":54685},[128,78520,54692],{"class":138},[128,78522,78523,78525,78527,78529,78531,78533],{"class":130,"line":183},[128,78524,55526],{"class":138},[128,78526,54729],{"class":54685},[128,78528,54732],{"class":199},[128,78530,270],{"class":138},[128,78532,54737],{"class":176},[128,78534,54692],{"class":138},[128,78536,78537,78539,78541,78543,78545,78547,78549,78551,78553],{"class":130,"line":188},[128,78538,55526],{"class":138},[128,78540,54729],{"class":54685},[128,78542,18442],{"class":199},[128,78544,270],{"class":138},[128,78546,54776],{"class":176},[128,78548,54756],{"class":199},[128,78550,270],{"class":138},[128,78552,54783],{"class":176},[128,78554,54692],{"class":138},[128,78556,78557,78559,78561,78563,78565],{"class":130,"line":193},[128,78558,55526],{"class":138},[128,78560,2752],{"class":54685},[128,78562,54794],{"class":138},[128,78564,2752],{"class":54685},[128,78566,54692],{"class":138},[128,78568,78569,78571,78573],{"class":130,"line":206},[128,78570,55168],{"class":138},[128,78572,54719],{"class":54685},[128,78574,54692],{"class":138},[128,78576,78577],{"class":130,"line":221},[128,78578,160],{"emptyLinePlaceholder":159},[128,78580,78581,78583,78585],{"class":130,"line":230},[128,78582,4657],{"class":138},[128,78584,55183],{"class":54685},[128,78586,54692],{"class":138},[128,78588,78589,78591,78593],{"class":130,"line":235},[128,78590,55526],{"class":138},[128,78592,55196],{"class":54685},[128,78594,54692],{"class":138},[128,78596,78597],{"class":130,"line":244},[128,78598,78599],{"class":3814},"    \u002F\u002F 元字符中\n",[128,78601,78602,78604,78606,78608,78610,78613,78615,78617,78620,78622,78625,78628],{"class":130,"line":287},[128,78603,77128],{"class":138},[128,78605,61627],{"class":199},[128,78607,253],{"class":138},[128,78609,4333],{"class":176},[128,78611,78612],{"class":51362},"哈",[128,78614,4333],{"class":176},[128,78616,4307],{"class":138},[128,78618,78619],{"class":199},"test",[128,78621,253],{"class":138},[128,78623,78624],{"class":176},"'哈'",[128,78626,78627],{"class":138},"))  ",[128,78629,78630],{"class":3814},"\u002F\u002Ftrue\n",[128,78632,78633,78635,78637,78639,78641,78643,78645,78647,78649,78651,78654,78656],{"class":130,"line":301},[128,78634,77128],{"class":138},[128,78636,61627],{"class":199},[128,78638,253],{"class":138},[128,78640,4333],{"class":176},[128,78642,78612],{"class":51362},[128,78644,4333],{"class":176},[128,78646,4307],{"class":138},[128,78648,78619],{"class":199},[128,78650,253],{"class":138},[128,78652,78653],{"class":176},"'哈哈'",[128,78655,78627],{"class":138},[128,78657,78630],{"class":3814},[128,78659,78660,78662,78664,78666,78668,78670,78672,78674,78676,78678,78681,78684],{"class":130,"line":310},[128,78661,77128],{"class":138},[128,78663,61627],{"class":199},[128,78665,253],{"class":138},[128,78667,4333],{"class":176},[128,78669,78612],{"class":51362},[128,78671,4333],{"class":176},[128,78673,4307],{"class":138},[128,78675,78619],{"class":199},[128,78677,253],{"class":138},[128,78679,78680],{"class":176},"'二哈'",[128,78682,78683],{"class":138},"))   ",[128,78685,78630],{"class":3814},[128,78687,78688],{"class":130,"line":323},[128,78689,160],{"emptyLinePlaceholder":159},[128,78691,78692],{"class":130,"line":330},[128,78693,78694],{"class":3814},"    \u002F\u002F 1.边界符\n",[128,78696,78697,78699,78701,78703,78705,78707,78709,78711,78713,78715,78717,78719,78721],{"class":130,"line":335},[128,78698,77128],{"class":138},[128,78700,61627],{"class":199},[128,78702,253],{"class":138},[128,78704,4333],{"class":176},[128,78706,4711],{"class":134},[128,78708,78612],{"class":51362},[128,78710,4333],{"class":176},[128,78712,4307],{"class":138},[128,78714,78619],{"class":199},[128,78716,253],{"class":138},[128,78718,78624],{"class":176},[128,78720,78627],{"class":138},[128,78722,78630],{"class":3814},[128,78724,78725,78727,78729,78731,78733,78735,78737,78739,78741,78743,78745,78747,78749,78751],{"class":130,"line":340},[128,78726,77128],{"class":138},[128,78728,61627],{"class":199},[128,78730,253],{"class":138},[128,78732,4333],{"class":176},[128,78734,4711],{"class":134},[128,78736,78612],{"class":51362},[128,78738,4052],{"class":134},[128,78740,4333],{"class":176},[128,78742,4307],{"class":138},[128,78744,78619],{"class":199},[128,78746,253],{"class":138},[128,78748,78653],{"class":176},[128,78750,78627],{"class":138},[128,78752,78753],{"class":3814},"\u002F\u002Ffalse\n",[128,78755,78756],{"class":130,"line":351},[128,78757,78758],{"class":3814},"    \u002F\u002F 2.量词\n",[128,78760,78761],{"class":130,"line":384},[128,78762,78763],{"class":3814},"    \u002F\u002F 量词 * 类似于 >= 0\n",[128,78765,78766,78768,78770,78772,78774,78776,78778,78781,78783,78785,78787,78789,78791,78793],{"class":130,"line":414},[128,78767,77128],{"class":138},[128,78769,61627],{"class":199},[128,78771,253],{"class":138},[128,78773,4333],{"class":176},[128,78775,4711],{"class":134},[128,78777,78612],{"class":51362},[128,78779,78780],{"class":134},"*$",[128,78782,4333],{"class":176},[128,78784,4307],{"class":138},[128,78786,78619],{"class":199},[128,78788,253],{"class":138},[128,78790,78653],{"class":176},[128,78792,78627],{"class":138},[128,78794,78630],{"class":3814},[128,78796,78797,78799,78801,78803,78805,78807,78809,78811,78813,78815,78817,78819,78822,78824],{"class":130,"line":419},[128,78798,77128],{"class":138},[128,78800,61627],{"class":199},[128,78802,253],{"class":138},[128,78804,4333],{"class":176},[128,78806,4711],{"class":134},[128,78808,78612],{"class":51362},[128,78810,78780],{"class":134},[128,78812,4333],{"class":176},[128,78814,4307],{"class":138},[128,78816,78619],{"class":199},[128,78818,253],{"class":138},[128,78820,78821],{"class":176},"'二哈好傻'",[128,78823,78627],{"class":138},[128,78825,78826],{"class":3814},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[128,78828,78829,78831,78833,78835,78837,78839,78841,78843,78845,78847,78849,78851,78854,78856],{"class":130,"line":424},[128,78830,77128],{"class":138},[128,78832,61627],{"class":199},[128,78834,253],{"class":138},[128,78836,4333],{"class":176},[128,78838,4711],{"class":134},[128,78840,78612],{"class":51362},[128,78842,78780],{"class":134},[128,78844,4333],{"class":176},[128,78846,4307],{"class":138},[128,78848,78619],{"class":199},[128,78850,253],{"class":138},[128,78852,78853],{"class":176},"'哈好哈'",[128,78855,78683],{"class":138},[128,78857,78858],{"class":3814},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[128,78860,78861],{"class":130,"line":434},[128,78862,160],{"emptyLinePlaceholder":159},[128,78864,78865],{"class":130,"line":447},[128,78866,78867],{"class":3814},"    \u002F\u002F +类似于>=1\n",[128,78869,78870,78872,78874,78876,78878,78880,78882,78885,78887,78889,78891,78893,78895,78897],{"class":130,"line":459},[128,78871,77128],{"class":138},[128,78873,61627],{"class":199},[128,78875,253],{"class":138},[128,78877,4333],{"class":176},[128,78879,4711],{"class":134},[128,78881,78612],{"class":51362},[128,78883,78884],{"class":134},"+$",[128,78886,4333],{"class":176},[128,78888,4307],{"class":138},[128,78890,78619],{"class":199},[128,78892,253],{"class":138},[128,78894,78653],{"class":176},[128,78896,78627],{"class":138},[128,78898,78630],{"class":3814},[128,78900,78901,78903,78905,78907,78909,78911,78913,78915,78917,78919,78921,78923,78925,78927],{"class":130,"line":471},[128,78902,77128],{"class":138},[128,78904,61627],{"class":199},[128,78906,253],{"class":138},[128,78908,4333],{"class":176},[128,78910,4711],{"class":134},[128,78912,78612],{"class":51362},[128,78914,78884],{"class":134},[128,78916,4333],{"class":176},[128,78918,4307],{"class":138},[128,78920,78619],{"class":199},[128,78922,253],{"class":138},[128,78924,78821],{"class":176},[128,78926,78627],{"class":138},[128,78928,78826],{"class":3814},[128,78930,78931,78933,78935,78937,78939,78941,78943,78945,78947,78949,78951,78953,78955,78957],{"class":130,"line":483},[128,78932,77128],{"class":138},[128,78934,61627],{"class":199},[128,78936,253],{"class":138},[128,78938,4333],{"class":176},[128,78940,4711],{"class":134},[128,78942,78612],{"class":51362},[128,78944,78884],{"class":134},[128,78946,4333],{"class":176},[128,78948,4307],{"class":138},[128,78950,78619],{"class":199},[128,78952,253],{"class":138},[128,78954,78853],{"class":176},[128,78956,78683],{"class":138},[128,78958,78753],{"class":3814},[128,78960,78961],{"class":130,"line":495},[128,78962,160],{"emptyLinePlaceholder":159},[128,78964,78965],{"class":130,"line":507},[128,78966,78967],{"class":3814},"    \u002F\u002F ?类似于0次或一次\n",[128,78969,78970,78972,78974,78976,78978,78980,78983,78985,78987,78989,78991,78993,78995,78997],{"class":130,"line":519},[128,78971,77128],{"class":138},[128,78973,61627],{"class":199},[128,78975,253],{"class":138},[128,78977,4333],{"class":176},[128,78979,4711],{"class":134},[128,78981,78982],{"class":51362},"哈？",[128,78984,4052],{"class":134},[128,78986,4333],{"class":176},[128,78988,4307],{"class":138},[128,78990,78619],{"class":199},[128,78992,253],{"class":138},[128,78994,77602],{"class":176},[128,78996,78683],{"class":138},[128,78998,78630],{"class":3814},[128,79000,79001,79003,79005,79007,79009,79011,79013,79016,79018,79020,79022,79024,79026,79028],{"class":130,"line":524},[128,79002,77128],{"class":138},[128,79004,61627],{"class":199},[128,79006,253],{"class":138},[128,79008,4333],{"class":176},[128,79010,4711],{"class":134},[128,79012,78612],{"class":51362},[128,79014,79015],{"class":134},"?$",[128,79017,4333],{"class":176},[128,79019,4307],{"class":138},[128,79021,78619],{"class":199},[128,79023,253],{"class":138},[128,79025,78653],{"class":176},[128,79027,78627],{"class":138},[128,79029,78753],{"class":3814},[128,79031,79032,79034,79036,79038,79040,79042,79044,79046,79048,79050,79052,79054,79056,79058],{"class":130,"line":529},[128,79033,77128],{"class":138},[128,79035,61627],{"class":199},[128,79037,253],{"class":138},[128,79039,4333],{"class":176},[128,79041,4711],{"class":134},[128,79043,78612],{"class":51362},[128,79045,79015],{"class":134},[128,79047,4333],{"class":176},[128,79049,4307],{"class":138},[128,79051,78619],{"class":199},[128,79053,253],{"class":138},[128,79055,78821],{"class":176},[128,79057,78627],{"class":138},[128,79059,78826],{"class":3814},[128,79061,79062,79064,79066,79068,79070,79072,79074,79076,79078,79080,79082,79084,79086,79088],{"class":130,"line":540},[128,79063,77128],{"class":138},[128,79065,61627],{"class":199},[128,79067,253],{"class":138},[128,79069,4333],{"class":176},[128,79071,4711],{"class":134},[128,79073,78612],{"class":51362},[128,79075,79015],{"class":134},[128,79077,4333],{"class":176},[128,79079,4307],{"class":138},[128,79081,78619],{"class":199},[128,79083,253],{"class":138},[128,79085,78853],{"class":176},[128,79087,78627],{"class":138},[128,79089,78753],{"class":3814},[128,79091,79092],{"class":130,"line":555},[128,79093,160],{"emptyLinePlaceholder":159},[128,79095,79096],{"class":130,"line":576},[128,79097,79098],{"class":3814},"    \u002F\u002F {n}写几，就必须出现几次\n",[128,79100,79101,79103,79105,79107,79109,79111,79113,79116,79118,79120,79122,79124,79127,79130],{"class":130,"line":584},[128,79102,77128],{"class":138},[128,79104,61627],{"class":199},[128,79106,253],{"class":138},[128,79108,4333],{"class":176},[128,79110,4711],{"class":134},[128,79112,78612],{"class":51362},[128,79114,79115],{"class":134},"{4}$",[128,79117,4333],{"class":176},[128,79119,4307],{"class":138},[128,79121,78619],{"class":199},[128,79123,253],{"class":138},[128,79125,79126],{"class":176},"'哈哈哈哈'",[128,79128,79129],{"class":138},")) ",[128,79131,78630],{"class":3814},[128,79133,79134],{"class":130,"line":593},[128,79135,160],{"emptyLinePlaceholder":159},[128,79137,79138],{"class":130,"line":598},[128,79139,79140],{"class":3814},"    \u002F\u002F {n,}大于等于n次\n",[128,79142,79143,79145,79147,79149,79151,79153,79155,79158,79160,79162,79164,79166,79168,79170],{"class":130,"line":603},[128,79144,77128],{"class":138},[128,79146,61627],{"class":199},[128,79148,253],{"class":138},[128,79150,4333],{"class":176},[128,79152,4711],{"class":134},[128,79154,78612],{"class":51362},[128,79156,79157],{"class":134},"{4,}$",[128,79159,4333],{"class":176},[128,79161,4307],{"class":138},[128,79163,78619],{"class":199},[128,79165,253],{"class":138},[128,79167,79126],{"class":176},[128,79169,79129],{"class":138},[128,79171,78630],{"class":3814},[128,79173,79174,79176,79178,79180,79182,79184,79186,79188,79190,79192,79194,79196,79199,79201],{"class":130,"line":614},[128,79175,77128],{"class":138},[128,79177,61627],{"class":199},[128,79179,253],{"class":138},[128,79181,4333],{"class":176},[128,79183,4711],{"class":134},[128,79185,78612],{"class":51362},[128,79187,79157],{"class":134},[128,79189,4333],{"class":176},[128,79191,4307],{"class":138},[128,79193,78619],{"class":199},[128,79195,253],{"class":138},[128,79197,79198],{"class":176},"'哈哈哈哈哈'",[128,79200,79129],{"class":138},[128,79202,78630],{"class":3814},[128,79204,79205],{"class":130,"line":625},[128,79206,160],{"emptyLinePlaceholder":159},[128,79208,79209],{"class":130,"line":633},[128,79210,79211],{"class":3814},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[128,79213,79214,79216,79218,79220,79222,79224,79226,79229,79231,79233,79235,79237,79239,79241],{"class":130,"line":649},[128,79215,77128],{"class":138},[128,79217,61627],{"class":199},[128,79219,253],{"class":138},[128,79221,4333],{"class":176},[128,79223,4711],{"class":134},[128,79225,78612],{"class":51362},[128,79227,79228],{"class":134},"{4,6}$",[128,79230,4333],{"class":176},[128,79232,4307],{"class":138},[128,79234,78619],{"class":199},[128,79236,253],{"class":138},[128,79238,79126],{"class":176},[128,79240,79129],{"class":138},[128,79242,78630],{"class":3814},[128,79244,79245,79247,79249,79251,79253,79255,79257,79259,79261,79263,79265,79267,79269,79271],{"class":130,"line":660},[128,79246,77128],{"class":138},[128,79248,61627],{"class":199},[128,79250,253],{"class":138},[128,79252,4333],{"class":176},[128,79254,4711],{"class":134},[128,79256,78612],{"class":51362},[128,79258,79228],{"class":134},[128,79260,4333],{"class":176},[128,79262,4307],{"class":138},[128,79264,78619],{"class":199},[128,79266,253],{"class":138},[128,79268,79198],{"class":176},[128,79270,79129],{"class":138},[128,79272,78630],{"class":3814},[128,79274,79275,79277,79279,79281,79283,79285,79287,79289,79291,79293,79295,79297,79300,79302],{"class":130,"line":673},[128,79276,77128],{"class":138},[128,79278,61627],{"class":199},[128,79280,253],{"class":138},[128,79282,4333],{"class":176},[128,79284,4711],{"class":134},[128,79286,78612],{"class":51362},[128,79288,79228],{"class":134},[128,79290,4333],{"class":176},[128,79292,4307],{"class":138},[128,79294,78619],{"class":199},[128,79296,253],{"class":138},[128,79298,79299],{"class":176},"'哈哈哈哈哈哈哈'",[128,79301,79129],{"class":138},[128,79303,78753],{"class":3814},[128,79305,79306],{"class":130,"line":678},[128,79307,160],{"emptyLinePlaceholder":159},[128,79309,79310],{"class":130,"line":683},[128,79311,79312],{"class":3814},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[128,79314,79315,79317,79319,79321,79323,79325,79328,79330,79332,79334,79336,79338,79341,79343],{"class":130,"line":693},[128,79316,77128],{"class":138},[128,79318,61627],{"class":199},[128,79320,253],{"class":138},[128,79322,4333],{"class":176},[128,79324,4711],{"class":134},[128,79326,79327],{"class":166},"[abc]",[128,79329,4052],{"class":134},[128,79331,4333],{"class":176},[128,79333,4307],{"class":138},[128,79335,78619],{"class":199},[128,79337,253],{"class":138},[128,79339,79340],{"class":176},"'a'",[128,79342,78627],{"class":138},[128,79344,78630],{"class":3814},[128,79346,79347,79349,79351,79353,79355,79357,79359,79361,79363,79365,79367,79369,79372,79374],{"class":130,"line":702},[128,79348,77128],{"class":138},[128,79350,61627],{"class":199},[128,79352,253],{"class":138},[128,79354,4333],{"class":176},[128,79356,4711],{"class":134},[128,79358,79327],{"class":166},[128,79360,4052],{"class":134},[128,79362,4333],{"class":176},[128,79364,4307],{"class":138},[128,79366,78619],{"class":199},[128,79368,253],{"class":138},[128,79370,79371],{"class":176},"'b'",[128,79373,78627],{"class":138},[128,79375,78630],{"class":3814},[128,79377,79378,79380,79382,79384,79386,79388,79390,79392,79394,79396,79398,79400,79403,79405],{"class":130,"line":709},[128,79379,77128],{"class":138},[128,79381,61627],{"class":199},[128,79383,253],{"class":138},[128,79385,4333],{"class":176},[128,79387,4711],{"class":134},[128,79389,79327],{"class":166},[128,79391,4052],{"class":134},[128,79393,4333],{"class":176},[128,79395,4307],{"class":138},[128,79397,78619],{"class":199},[128,79399,253],{"class":138},[128,79401,79402],{"class":176},"'c'",[128,79404,78627],{"class":138},[128,79406,78630],{"class":3814},[128,79408,79409,79411,79413,79415,79417,79419,79421,79423,79425,79427,79430,79432],{"class":130,"line":723},[128,79410,77128],{"class":138},[128,79412,61627],{"class":199},[128,79414,253],{"class":138},[128,79416,4333],{"class":176},[128,79418,79327],{"class":166},[128,79420,4333],{"class":176},[128,79422,4307],{"class":138},[128,79424,78619],{"class":199},[128,79426,253],{"class":138},[128,79428,79429],{"class":176},"'ab'",[128,79431,78627],{"class":138},[128,79433,78630],{"class":3814},[128,79435,79436,79438,79440,79442,79444,79446,79448,79450,79452,79454,79456,79458,79460,79462],{"class":130,"line":732},[128,79437,77128],{"class":138},[128,79439,61627],{"class":199},[128,79441,253],{"class":138},[128,79443,4333],{"class":176},[128,79445,4711],{"class":134},[128,79447,79327],{"class":166},[128,79449,4052],{"class":134},[128,79451,4333],{"class":176},[128,79453,4307],{"class":138},[128,79455,78619],{"class":199},[128,79457,253],{"class":138},[128,79459,79429],{"class":176},[128,79461,78627],{"class":138},[128,79463,79464],{"class":3814},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[128,79466,79467,79469,79471,79473,79475,79477,79479,79482,79484,79486,79488,79490,79492,79494],{"class":130,"line":744},[128,79468,77128],{"class":138},[128,79470,61627],{"class":199},[128,79472,253],{"class":138},[128,79474,4333],{"class":176},[128,79476,4711],{"class":134},[128,79478,79327],{"class":166},[128,79480,79481],{"class":134},"{2}$",[128,79483,4333],{"class":176},[128,79485,4307],{"class":138},[128,79487,78619],{"class":199},[128,79489,253],{"class":138},[128,79491,79429],{"class":176},[128,79493,78627],{"class":138},[128,79495,79496],{"class":3814},"\u002F\u002Ftrue   可以选两个\n",[128,79498,79499,79501,79503,79505,79507,79509,79512,79514,79516,79518,79520,79522,79525,79527],{"class":130,"line":749},[128,79500,77128],{"class":138},[128,79502,61627],{"class":199},[128,79504,253],{"class":138},[128,79506,4333],{"class":176},[128,79508,4711],{"class":134},[128,79510,79511],{"class":166},"[a-z]",[128,79513,4052],{"class":134},[128,79515,4333],{"class":176},[128,79517,4307],{"class":138},[128,79519,78619],{"class":199},[128,79521,253],{"class":138},[128,79523,79524],{"class":176},"'p'",[128,79526,78683],{"class":138},[128,79528,79529],{"class":3814},"\u002F\u002Ftrue   依然只能选一个\n",[128,79531,79532,79534,79536,79538,79540,79542,79545,79547,79549,79551,79553,79555,79557,79559],{"class":130,"line":754},[128,79533,77128],{"class":138},[128,79535,61627],{"class":199},[128,79537,253],{"class":138},[128,79539,4333],{"class":176},[128,79541,4711],{"class":134},[128,79543,79544],{"class":166},"[A-Z]",[128,79546,4052],{"class":134},[128,79548,4333],{"class":176},[128,79550,4307],{"class":138},[128,79552,78619],{"class":199},[128,79554,253],{"class":138},[128,79556,79524],{"class":176},[128,79558,78683],{"class":138},[128,79560,78753],{"class":3814},[128,79562,79563,79565,79567,79569,79571,79573,79575,79577,79579,79581,79583,79585,79588,79590],{"class":130,"line":764},[128,79564,77128],{"class":138},[128,79566,61627],{"class":199},[128,79568,253],{"class":138},[128,79570,4333],{"class":176},[128,79572,4711],{"class":134},[128,79574,79544],{"class":166},[128,79576,4052],{"class":134},[128,79578,4333],{"class":176},[128,79580,4307],{"class":138},[128,79582,78619],{"class":199},[128,79584,253],{"class":138},[128,79586,79587],{"class":176},"'P'",[128,79589,78683],{"class":138},[128,79591,78630],{"class":3814},[128,79593,79594,79596,79598,79600,79602,79604,79607,79609,79611,79613,79615,79617,79620,79622],{"class":130,"line":782},[128,79595,77128],{"class":138},[128,79597,61627],{"class":199},[128,79599,253],{"class":138},[128,79601,4333],{"class":176},[128,79603,4711],{"class":134},[128,79605,79606],{"class":166},"[0-9]",[128,79608,4052],{"class":134},[128,79610,4333],{"class":176},[128,79612,4307],{"class":138},[128,79614,78619],{"class":199},[128,79616,253],{"class":138},[128,79618,79619],{"class":176},"'0'",[128,79621,78683],{"class":138},[128,79623,78630],{"class":3814},[128,79625,79626,79628,79630,79632,79634,79636,79639,79641,79643,79645,79647,79649,79651,79653],{"class":130,"line":787},[128,79627,77128],{"class":138},[128,79629,61627],{"class":199},[128,79631,253],{"class":138},[128,79633,4333],{"class":176},[128,79635,4711],{"class":134},[128,79637,79638],{"class":166},"[a-zA-Z0-9]",[128,79640,4052],{"class":134},[128,79642,4333],{"class":176},[128,79644,4307],{"class":138},[128,79646,78619],{"class":199},[128,79648,253],{"class":138},[128,79650,79524],{"class":176},[128,79652,78627],{"class":138},[128,79654,78630],{"class":3814},[128,79656,79657,79659,79661],{"class":130,"line":795},[128,79658,55799],{"class":138},[128,79660,55196],{"class":54685},[128,79662,54692],{"class":138},[128,79664,79665,79667,79669],{"class":130,"line":807},[128,79666,55168],{"class":138},[128,79668,55183],{"class":54685},[128,79670,54692],{"class":138},[128,79672,79673],{"class":130,"line":813},[128,79674,160],{"emptyLinePlaceholder":159},[128,79676,79677,79679,79681],{"class":130,"line":818},[128,79678,55168],{"class":138},[128,79680,54020],{"class":54685},[128,79682,54692],{"class":138},[25485,79684,79686],{"id":79685},"_3624-修饰符","3.6.2.4 修饰符",[19,79688,79689],{},[5074,79690],{"alt":112,"src":79691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,79693,79694],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,79696,79697],{},[5074,79698],{"alt":112,"src":79699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[106,79701,79703],{"className":54018,"code":79702,"language":54020,"meta":112,"style":112},"\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",[114,79704,79705,79715,79729,79737,79751,79771,79783,79791,79799,79807,79839,79870,79875,79907,79918,79951,79960,79968,79976],{"__ignoreMap":112},[128,79706,79707,79709,79711,79713],{"class":130,"line":131},[128,79708,54682],{"class":138},[128,79710,54686],{"class":54685},[128,79712,54689],{"class":199},[128,79714,54692],{"class":138},[128,79716,79717,79719,79721,79723,79725,79727],{"class":130,"line":142},[128,79718,4657],{"class":138},[128,79720,54020],{"class":54685},[128,79722,54701],{"class":199},[128,79724,270],{"class":138},[128,79726,54706],{"class":176},[128,79728,54692],{"class":138},[128,79730,79731,79733,79735],{"class":130,"line":156},[128,79732,4657],{"class":138},[128,79734,54719],{"class":54685},[128,79736,54692],{"class":138},[128,79738,79739,79741,79743,79745,79747,79749],{"class":130,"line":163},[128,79740,55526],{"class":138},[128,79742,54729],{"class":54685},[128,79744,54732],{"class":199},[128,79746,270],{"class":138},[128,79748,54737],{"class":176},[128,79750,54692],{"class":138},[128,79752,79753,79755,79757,79759,79761,79763,79765,79767,79769],{"class":130,"line":183},[128,79754,55526],{"class":138},[128,79756,54729],{"class":54685},[128,79758,18442],{"class":199},[128,79760,270],{"class":138},[128,79762,54776],{"class":176},[128,79764,54756],{"class":199},[128,79766,270],{"class":138},[128,79768,54783],{"class":176},[128,79770,54692],{"class":138},[128,79772,79773,79775,79777,79779,79781],{"class":130,"line":188},[128,79774,55526],{"class":138},[128,79776,2752],{"class":54685},[128,79778,54794],{"class":138},[128,79780,2752],{"class":54685},[128,79782,54692],{"class":138},[128,79784,79785,79787,79789],{"class":130,"line":193},[128,79786,55168],{"class":138},[128,79788,54719],{"class":54685},[128,79790,54692],{"class":138},[128,79792,79793,79795,79797],{"class":130,"line":206},[128,79794,4657],{"class":138},[128,79796,55183],{"class":54685},[128,79798,54692],{"class":138},[128,79800,79801,79803,79805],{"class":130,"line":221},[128,79802,55526],{"class":138},[128,79804,55196],{"class":54685},[128,79806,54692],{"class":138},[128,79808,79809,79811,79813,79815,79817,79819,79822,79824,79826,79828,79830,79832,79835,79837],{"class":130,"line":230},[128,79810,77128],{"class":138},[128,79812,61627],{"class":199},[128,79814,253],{"class":138},[128,79816,4333],{"class":176},[128,79818,4711],{"class":134},[128,79820,79821],{"class":51362},"java",[128,79823,4052],{"class":134},[128,79825,4333],{"class":176},[128,79827,4307],{"class":138},[128,79829,78619],{"class":199},[128,79831,253],{"class":138},[128,79833,79834],{"class":176},"'java'",[128,79836,79129],{"class":138},[128,79838,78630],{"class":3814},[128,79840,79841,79843,79845,79847,79849,79851,79853,79855,79857,79859,79861,79863,79866,79868],{"class":130,"line":235},[128,79842,77128],{"class":138},[128,79844,61627],{"class":199},[128,79846,253],{"class":138},[128,79848,4333],{"class":176},[128,79850,4711],{"class":134},[128,79852,79821],{"class":51362},[128,79854,4052],{"class":134},[128,79856,4333],{"class":176},[128,79858,4307],{"class":138},[128,79860,78619],{"class":199},[128,79862,253],{"class":138},[128,79864,79865],{"class":176},"'Java'",[128,79867,79129],{"class":138},[128,79869,78753],{"class":3814},[128,79871,79872],{"class":130,"line":244},[128,79873,79874],{"class":3814},"    \u002F\u002F 不区分大小写、\n",[128,79876,79877,79879,79881,79883,79885,79887,79889,79891,79893,79895,79897,79899,79901,79903,79905],{"class":130,"line":287},[128,79878,77128],{"class":138},[128,79880,61627],{"class":199},[128,79882,253],{"class":138},[128,79884,4333],{"class":176},[128,79886,4711],{"class":134},[128,79888,79821],{"class":51362},[128,79890,4052],{"class":134},[128,79892,4333],{"class":176},[128,79894,4191],{"class":134},[128,79896,4307],{"class":138},[128,79898,78619],{"class":199},[128,79900,253],{"class":138},[128,79902,79865],{"class":176},[128,79904,79129],{"class":138},[128,79906,78630],{"class":3814},[128,79908,79909,79911,79913,79915],{"class":130,"line":301},[128,79910,14748],{"class":134},[128,79912,77294],{"class":166},[128,79914,170],{"class":134},[128,79916,79917],{"class":176}," 'java是一门编程语言，学完java工资很高'\n",[128,79919,79920,79922,79925,79927,79930,79933,79935,79937,79939,79941,79944,79946,79949],{"class":130,"line":310},[128,79921,14748],{"class":134},[128,79923,79924],{"class":166}," result",[128,79926,170],{"class":134},[128,79928,79929],{"class":138}," str.",[128,79931,79932],{"class":199},"replace",[128,79934,253],{"class":138},[128,79936,4333],{"class":176},[128,79938,79821],{"class":51362},[128,79940,4333],{"class":176},[128,79942,79943],{"class":134},"ig",[128,79945,258],{"class":138},[128,79947,79948],{"class":176},"'前端'",[128,79950,180],{"class":138},[128,79952,79953,79955,79957],{"class":130,"line":323},[128,79954,77128],{"class":138},[128,79956,61627],{"class":199},[128,79958,79959],{"class":138},"(result)\n",[128,79961,79962,79964,79966],{"class":130,"line":330},[128,79963,55799],{"class":138},[128,79965,55196],{"class":54685},[128,79967,54692],{"class":138},[128,79969,79970,79972,79974],{"class":130,"line":335},[128,79971,55168],{"class":138},[128,79973,55183],{"class":54685},[128,79975,54692],{"class":138},[128,79977,79978,79980,79982],{"class":130,"line":340},[128,79979,55168],{"class":138},[128,79981,54020],{"class":54685},[128,79983,54692],{"class":138},[3659,79985,79986],{},"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":112,"searchDepth":142,"depth":142,"links":79988},[79989,79999,80011,80028,80035,80043],{"id":56742,"depth":142,"text":56743,"children":79990},[79991,79992,79993,79994,79995,79996,79997,79998],{"id":56746,"depth":156,"text":56747},{"id":56779,"depth":156,"text":56780},{"id":56818,"depth":156,"text":56819},{"id":56976,"depth":156,"text":56977},{"id":57024,"depth":156,"text":57025},{"id":57161,"depth":156,"text":57162},{"id":57482,"depth":156,"text":57483},{"id":60469,"depth":156,"text":60470},{"id":60497,"depth":142,"text":60498,"children":80000},[80001,80002,80003,80004,80005,80006,80007,80008,80009,80010],{"id":60501,"depth":156,"text":60502},{"id":60524,"depth":156,"text":60525},{"id":61439,"depth":156,"text":61440},{"id":62129,"depth":156,"text":62130},{"id":62411,"depth":156,"text":62412},{"id":66570,"depth":156,"text":66571},{"id":66740,"depth":156,"text":66741},{"id":66868,"depth":156,"text":66869},{"id":66893,"depth":156,"text":66894},{"id":68282,"depth":156,"text":68283},{"id":69435,"depth":142,"text":69436,"children":80012},[80013,80014,80015,80016,80017,80018,80019,80020,80021,80022,80023,80024,80025,80026,80027],{"id":69439,"depth":156,"text":69440},{"id":70093,"depth":156,"text":70094},{"id":71788,"depth":156,"text":71789},{"id":71829,"depth":156,"text":71830},{"id":71871,"depth":156,"text":71872},{"id":71885,"depth":156,"text":71886},{"id":71934,"depth":156,"text":71935},{"id":71946,"depth":156,"text":71947},{"id":71961,"depth":156,"text":71962},{"id":71997,"depth":156,"text":71998},{"id":72078,"depth":156,"text":72079},{"id":72206,"depth":156,"text":72207},{"id":72218,"depth":156,"text":72219},{"id":72237,"depth":156,"text":72238},{"id":74345,"depth":156,"text":74346},{"id":74364,"depth":142,"text":74365,"children":80029},[80030,80031,80032,80033,80034],{"id":74385,"depth":156,"text":74386},{"id":74405,"depth":156,"text":74406},{"id":74454,"depth":156,"text":74455},{"id":74579,"depth":156,"text":74580},{"id":74760,"depth":156,"text":74761},{"id":74778,"depth":142,"text":74779,"children":80036},[80037,80038,80039,80040,80041,80042],{"id":74793,"depth":156,"text":74794},{"id":74852,"depth":156,"text":74853},{"id":74876,"depth":156,"text":74877},{"id":75196,"depth":156,"text":75197},{"id":75228,"depth":156,"text":75229},{"id":75251,"depth":156,"text":75252},{"id":78318,"depth":142,"text":78319,"children":80044},[80045,80046],{"id":78352,"depth":156,"text":78353},{"id":78391,"depth":156,"text":78392},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":56714,"description":3686},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":80053,"title":80054,"body":80055,"description":3686,"extension":3687,"meta":96188,"navigation":159,"path":96189,"seo":96190,"stem":96191,"__hash__":96192},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":80056,"toc":96124},[80057,80060,80063,80067,80071,80076,80081,80092,80096,80101,80104,80108,80111,80116,80120,80124,80127,80132,80135,80139,80142,80150,80153,80157,80162,80167,80170,80174,80179,80184,80187,80191,80196,80199,80204,80207,80212,80215,80220,80225,80228,80231,80235,80240,80245,80248,80252,80256,80259,80262,80265,80269,80273,80278,80283,80286,80290,80295,80300,80303,80306,80309,80312,80315,80318,80321,80324,80327,80332,80336,80341,80346,80349,80352,80355,80358,80361,80364,80367,80370,80374,80378,80381,80384,80387,80392,80394,80397,80400,80403,80406,80409,80412,80415,80418,80421,80424,80427,80430,80433,80438,80443,80448,80451,80455,80458,80463,80467,80469,80480,80485,80586,80589,80592,80595,80598,80601,80604,80607,80610,80612,80615,80618,80621,80624,80627,80629,80632,80635,80638,80641,80644,80647,80649,80652,80654,80656,80659,80663,80667,80670,80673,80676,80679,80682,80685,80688,80691,80694,80699,80819,80822,80825,80830,80833,80836,80839,80842,80847,80850,80853,80856,80859,80864,80867,80967,81032,81106,81110,81113,81116,81120,81123,81137,81166,81169,81172,81175,81178,81181,81184,81187,81189,81192,81195,81198,81201,81205,81210,81214,81219,81294,81297,81480,81483,81486,81489,81492,81495,81497,81500,81503,81506,81509,81512,81515,81517,81521,81524,81529,81532,81535,81538,81541,81543,81548,81551,81554,81557,81560,81562,81567,81570,81573,81575,81577,81580,81584,81587,81590,81595,81598,81601,81604,81654,81659,81663,81668,81671,81740,81743,81752,81756,81761,81764,81767,81775,81778,81795,83596,83600,83604,83609,83612,83616,83622,83628,83780,83785,83790,83793,83796,83799,83802,83805,83808,83811,83814,83817,83820,83823,83826,83831,83835,83838,83849,83853,83858,83861,83864,83867,83870,83873,83875,83878,83881,83884,83887,83889,83906,83909,83913,83916,83921,83926,83929,83932,83936,83939,83942,83951,83954,83958,83961,83966,83971,84038,84042,84045,84048,84053,84058,84144,84149,84153,84156,84159,84174,84177,84182,84186,84191,84300,84303,84314,84464,84468,84473,84582,84586,84591,84596,84601,84604,84611,84631,84667,84831,84836,84839,84844,84851,84854,84857,84860,84919,84975,85031,85035,85040,85355,85358,85362,85365,85370,85479,85484,85488,85493,85497,85568,85572,85574,85577,85580,85618,85894,85898,85915,85981,86015,86019,86022,86027,86056,86063,86072,86077,86092,86097,86106,86109,86246,86250,86312,86316,86321,86566,86570,86575,86578,86581,86584,86587,86591,86596,88176,88180,88184,88190,88193,88198,88202,88205,88210,88213,88224,88228,88233,88237,88242,88247,88250,88255,88259,88263,88266,88271,88276,88279,88282,88285,88407,88412,88514,88517,88520,88524,88529,88701,88706,88710,88713,88718,88784,88789,88792,88923,88926,88931,88934,88937,89028,89033,89036,89039,89042,89045,89050,89055,89058,89063,89068,89073,89077,89080,89083,89088,89093,89098,89103,89157,89160,89163,89168,89171,89174,89179,89184,89189,89193,89198,89212,89217,89220,89225,89229,89234,89239,89244,89249,89254,89259,89264,89269,89272,89276,89281,89284,89287,89290,89295,89300,89303,89306,89310,89313,89316,89321,89326,89331,89336,89339,89344,89349,89410,89415,89418,89423,90664,90669,90673,90677,90682,90685,90690,90695,90698,90703,90705,90710,90714,90717,90720,90731,90735,90740,90745,90800,90805,90810,90815,91026,91031,91035,91040,91043,91045,91048,91051,91496,91501,91508,91514,91517,91520,91784,91789,91793,92058,92063,92067,92072,92077,92082,92087,92418,92421,92426,92431,92434,92438,92442,92447,92452,92457,92462,92467,92472,92476,92479,92484,92489,92492,92566,92571,92576,92581,92583,92586,92956,92961,92966,92971,92974,92977,93079,93084,93089,93192,93196,93201,93205,93209,93214,93219,93222,93227,93230,93233,93626,93631,93634,93637,93640,93643,94163,94167,94172,94177,94182,94185,94190,94193,94196,94578,94583,94585,94587,94590,94593,95105,95109,95170,95173,95176,95179,95183,95186,95191,95196,96121],[10,80058,80054],{"id":80059},"_4js进阶",[19,80061,80062],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,80064,80066],{"id":80065},"_41-作用域","4.1 作用域",[72,80068,80070],{"id":80069},"_411-局部作用域","4.1.1 局部作用域",[19,80072,80073],{},[5074,80074],{"alt":112,"src":80075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,80077,80078],{},[5074,80079],{"alt":112,"src":80080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[4752,80082,80083,80086,80089],{},[29,80084,80085],{},"函数作用域在函数内部",[29,80087,80088],{},"块级作用域在{}",[29,80090,80091],{},"对象的那个{}不是作用域，不是块作用域",[72,80093,80095],{"id":80094},"_412-全局作用域","4.1.2 全局作用域",[19,80097,80098],{},[5074,80099],{"alt":112,"src":80100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,80102,80103],{},"window.a=10不要这样写",[72,80105,80107],{"id":80106},"_413-作用域链","4.1.3 作用域链",[19,80109,80110],{},"变量查找机制",[19,80112,80113],{},[5074,80114],{"alt":112,"src":80115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,80117,80119],{"id":80118},"_42-垃圾回收机制","4.2 垃圾回收机制",[72,80121,80123],{"id":80122},"_421-大体介绍","4.2.1 大体介绍",[19,80125,80126],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,80128,80129],{},[5074,80130],{"alt":112,"src":80131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,80133,80134],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[72,80136,80138],{"id":80137},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,80140,80141],{},"堆栈空间分配区别：",[26,80143,80144,80147],{},[29,80145,80146],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[29,80148,80149],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,80151,80152],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[25485,80154,80156],{"id":80155},"_4221-引用计数","4.2.2.1 引用计数",[19,80158,80159],{},[5074,80160],{"alt":112,"src":80161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,80163,80164],{},[5074,80165],{"alt":112,"src":80166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,80168,80169],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[25485,80171,80173],{"id":80172},"_4222-标记清除法","4.2.2.2 标记清除法",[19,80175,80176],{},[5074,80177],{"alt":112,"src":80178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,80180,80181],{},[5074,80182],{"alt":112,"src":80183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,80185,80186],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,80188,80190],{"id":80189},"_43-闭包","4.3 闭包",[19,80192,80193],{},[5074,80194],{"alt":112,"src":80195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,80197,80198],{},"闭包：内层函数+外层函数的变量",[19,80200,80201],{},[5074,80202],{"alt":112,"src":80203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,80205,80206],{},"closure就是闭包",[19,80208,80209],{},[5074,80210],{"alt":112,"src":80211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,80213,80214],{},"内层函数必须包含外层函数的变量才是闭包",[19,80216,80217],{},[5074,80218],{"alt":112,"src":80219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,80221,80222],{},[5074,80223],{"alt":112,"src":80224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,80226,80227],{},"闭包可能会引起内存泄漏",[19,80229,80230],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,80232,80234],{"id":80233},"_44-变量提升","4.4 变量提升",[19,80236,80237],{},[5074,80238],{"alt":112,"src":80239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,80241,80242],{},[5074,80243],{"alt":112,"src":80244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,80246,80247],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,80249,80251],{"id":80250},"_45-函数进阶","4.5 函数进阶",[72,80253,80255],{"id":80254},"_451-函数提升","4.5.1 函数提升",[19,80257,80258],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,80260,80261],{},"只提升函数声明，不提升函数调用",[55196,80263,80264],{},"\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",[72,80266,80268],{"id":80267},"_452-函数参数","4.5.2 函数参数",[25485,80270,80272],{"id":80271},"_4521-动态参数","4.5.2.1 动态参数",[19,80274,80275],{},[5074,80276],{"alt":112,"src":80277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,80279,80280],{},[5074,80281],{"alt":112,"src":80282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,80284,80285],{},"箭头函数里边没有arguments",[25485,80287,80289],{"id":80288},"_4522-剩余参数","4.5.2.2 剩余参数",[19,80291,80292],{},[5074,80293],{"alt":112,"src":80294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,80296,80297],{},[5074,80298],{"alt":112,"src":80299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,80301,80302],{},"剩余参数使用的时候不需要写...",[19,80304,80305],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,80307,80308],{},"  function getSum(a,b,...arr) {",[19,80310,80311],{},"  console.log(11)",[19,80313,80314],{},"  }",[19,80316,80317],{},"  getSum(1,2,3,4)",[19,80319,80320],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,80322,80323],{},"  getSum(1,2)",[19,80325,80326],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,80328,80329],{},[5074,80330],{"alt":112,"src":80331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[25485,80333,80335],{"id":80334},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,80337,80338],{},[5074,80339],{"alt":112,"src":80340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,80342,80343],{},[5074,80344],{"alt":112,"src":80345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,80347,80348],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,80350,80351],{},"展开运算符可以用于数组之间的合并：",[19,80353,80354],{},"const arr1 = [1, 2, 3]",[19,80356,80357],{},"const arr2 = [3, 4, 5]",[19,80359,80360],{},"const arr = [...arr1, ...arr2]",[19,80362,80363],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,80365,80366],{},"剩余参数：函数参数使用，得到真数组",[19,80368,80369],{},"展开运算符：数组中使用，数组展开",[72,80371,80373],{"id":80372},"_453-箭头函数","4.5.3 箭头函数",[25485,80375,80377],{"id":80376},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,80379,80380],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,80382,80383],{},"它不是万能的！！！",[19,80385,80386],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,80388,80389],{},[5074,80390],{"alt":112,"src":80391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,80393,3788],{},[19,80395,80396],{},"① 只有一个形参的时候，可以省略小括号：",[19,80398,80399],{},"const fn=x=>{console.log(x)}",[19,80401,80402],{},"② 只有一行代码时可以省略大括号：",[19,80404,80405],{},"const fn=x=>console.log(11)",[19,80407,80408],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,80410,80411],{},"const fn=x=>x+x",[19,80413,80414],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,80416,80417],{},"⑤ 阻止表单默认提交：",[19,80419,80420],{},"const form = document.querySelector('form')",[19,80422,80423],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,80425,80426],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,80428,80429],{},"const fn=uname=>({uname:uname})",[19,80431,80432],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,80434,80435],{},[5074,80436],{"alt":112,"src":80437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,80439,80440],{},[5074,80441],{"alt":112,"src":80442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,80444,80445],{},[5074,80446],{"alt":112,"src":80447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,80449,80450],{},"一定不要忘记用()，有()就理解为自带return",[25485,80452,80454],{"id":80453},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,80456,80457],{},"箭头函数是没有动态参数的arguments",[19,80459,80460],{},[5074,80461],{"alt":112,"src":80462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[25485,80464,80466],{"id":80465},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,80468,14859],{},[26,80470,80471,80474,80477],{},[29,80472,80473],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[29,80475,80476],{},"事件回调函数使用箭头函数时，this 为全局的 window",[29,80478,80479],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,80481,80482],{},[5074,80483],{"alt":112,"src":80484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[106,80486,80488],{"className":56449,"code":80487,"language":56451,"meta":112,"style":112},"  \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",[114,80489,80490,80498,80503,80508,80513,80518,80523,80527,80532,80536,80540,80545,80550,80555,80559,80563,80568,80573,80578],{"__ignoreMap":112},[128,80491,80492,80494,80496],{"class":130,"line":131},[128,80493,55526],{"class":138},[128,80495,55196],{"class":54685},[128,80497,54692],{"class":138},[128,80499,80500],{"class":130,"line":142},[128,80501,80502],{"class":138},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[128,80504,80505],{"class":130,"line":156},[128,80506,80507],{"class":138},"    console.log(this) \u002F\u002F指向window\n",[128,80509,80510],{"class":130,"line":163},[128,80511,80512],{"class":138},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[128,80514,80515],{"class":130,"line":183},[128,80516,80517],{"class":138},"    function fn() {\n",[128,80519,80520],{"class":130,"line":188},[128,80521,80522],{"class":138},"      console.log(this)  \u002F\u002F指向window\n",[128,80524,80525],{"class":130,"line":193},[128,80526,5773],{"class":138},[128,80528,80529],{"class":130,"line":206},[128,80530,80531],{"class":138},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[128,80533,80534],{"class":130,"line":221},[128,80535,160],{"emptyLinePlaceholder":159},[128,80537,80538],{"class":130,"line":230},[128,80539,74898],{"class":138},[128,80541,80542],{"class":130,"line":235},[128,80543,80544],{"class":138},"      name: 'andy',\n",[128,80546,80547],{"class":130,"line":244},[128,80548,80549],{"class":138},"      sayHai: function () {\n",[128,80551,80552],{"class":130,"line":287},[128,80553,80554],{"class":138},"        console.log(this)\n",[128,80556,80557],{"class":130,"line":301},[128,80558,55780],{"class":138},[128,80560,80561],{"class":130,"line":310},[128,80562,5773],{"class":138},[128,80564,80565],{"class":130,"line":323},[128,80566,80567],{"class":138},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[128,80569,80570],{"class":130,"line":330},[128,80571,80572],{"class":138},"    \u002F\u002F 2.箭头函数的this\n",[128,80574,80575],{"class":130,"line":335},[128,80576,80577],{"class":138},"    const fn = () => console.log(this)\n",[128,80579,80580,80582,80584],{"class":130,"line":340},[128,80581,55799],{"class":138},[128,80583,55196],{"class":54685},[128,80585,54692],{"class":138},[19,80587,80588],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,80590,80591],{},"const fn = () => console.log(this)",[19,80593,80594],{},"fn() \u002F\u002F指向window",[19,80596,80597],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,80599,80600],{},"①",[19,80602,80603],{},"const obj = {",[19,80605,80606],{},"uname: 'pink老师',",[19,80608,80609],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,80611,1453],{},[19,80613,80614],{},"调用对象里边的函数",[19,80616,80617],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,80619,80620],{},"obj.sayHai()",[19,80622,80623],{},"②",[19,80625,80626],{},"const obj1 = {",[19,80628,80606],{},[19,80630,80631],{},"sayHai: function () {",[19,80633,80634],{},"let i = 10",[19,80636,80637],{},"const count = () => {",[19,80639,80640],{},"console.log(this)",[19,80642,80643],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,80645,80646],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,80648,1453],{},[19,80650,80651],{},"count()",[19,80653,1453],{},[19,80655,1453],{},[19,80657,80658],{},"obj1.sayHai()",[14,80660,80662],{"id":80661},"_46-解构赋值","4.6 解构赋值",[72,80664,80666],{"id":80665},"_461-数组解构","4.6.1 数组解构",[19,80668,80669],{},"以前要是使用数组中的值的话：",[19,80671,80672],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,80674,80675],{},"const arr=[100,60,80]",[19,80677,80678],{},"const max=arr[0]",[19,80680,80681],{},"const min=arr[1]",[19,80683,80684],{},"const avg=arr[2]",[19,80686,80687],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,80689,80690],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,80692,80693],{},"这个写法就类似于上边的那种用很多const的方法",[19,80695,80696],{},[5074,80697],{"alt":112,"src":80698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[106,80700,80702],{"className":54018,"code":80701,"language":54020,"meta":112,"style":112},"①变量之间交换值:\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",[114,80703,80704,80709,80714,80719,80724,80729,80733,80737,80742,80746,80751,80756,80760,80765,80770,80781,80791,80796,80801,80806,80810,80814],{"__ignoreMap":112},[128,80705,80706],{"class":130,"line":131},[128,80707,80708],{"class":138},"①变量之间交换值:\n",[128,80710,80711],{"class":130,"line":142},[128,80712,80713],{"class":138},"let a=1\n",[128,80715,80716],{"class":130,"line":156},[128,80717,80718],{"class":138},"let b=2;\n",[128,80720,80721],{"class":130,"line":163},[128,80722,80723],{"class":138},"必须加这行代码，不然就会报错\n",[128,80725,80726],{"class":130,"line":183},[128,80727,80728],{"class":138},"[b,a]=[a,b]\n",[128,80730,80731],{"class":130,"line":188},[128,80732,160],{"emptyLinePlaceholder":159},[128,80734,80735],{"class":130,"line":193},[128,80736,160],{"emptyLinePlaceholder":159},[128,80738,80739],{"class":130,"line":206},[128,80740,80741],{"class":138},"可以写成下面的方式：\n",[128,80743,80744],{"class":130,"line":221},[128,80745,80713],{"class":138},[128,80747,80748],{"class":130,"line":230},[128,80749,80750],{"class":138},"let b=2\n",[128,80752,80753],{"class":130,"line":235},[128,80754,80755],{"class":138},";[b,a]=[a,b]\n",[128,80757,80758],{"class":130,"line":244},[128,80759,160],{"emptyLinePlaceholder":159},[128,80761,80762],{"class":130,"line":287},[128,80763,80764],{"class":138},"②排序\n",[128,80766,80767],{"class":130,"line":301},[128,80768,80769],{"class":138},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[128,80771,80772,80775,80778],{"class":130,"line":310},[128,80773,80774],{"class":138},"for (let i = 0; i ",[128,80776,4657],{"class":80777},"s7hpK",[128,80779,80780],{"class":138}," arr1.length; i++) {\n",[128,80782,80783,80786,80788],{"class":130,"line":323},[128,80784,80785],{"class":138},"   for (let j = 0; j ",[128,80787,4657],{"class":80777},[128,80789,80790],{"class":138}," arr1.length - 1; j++) {\n",[128,80792,80793],{"class":130,"line":330},[128,80794,80795],{"class":138},"      if (arr1[j] > arr1[j + 1]) {\n",[128,80797,80798],{"class":130,"line":335},[128,80799,80800],{"class":138},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[128,80802,80803],{"class":130,"line":340},[128,80804,80805],{"class":138},"       }\n",[128,80807,80808],{"class":130,"line":351},[128,80809,7875],{"class":138},[128,80811,80812],{"class":130,"line":384},[128,80813,2694],{"class":138},[128,80815,80816],{"class":130,"line":414},[128,80817,80818],{"class":138},"console.log(arr1)\n",[19,80820,80821],{},"数组解构的细节：",[19,80823,80824],{},"①变量多，单元值少",[19,80826,80827],{},[5074,80828],{"alt":112,"src":80829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,80831,80832],{},"防止出现undefined的方法：",[19,80834,80835],{},"const [a=0,b=0] =[1]",[19,80837,80838],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,80840,80841],{},"②变量少，单元值多",[19,80843,80844],{},[5074,80845],{"alt":112,"src":80846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,80848,80849],{},"此时可以使用剩余参数来接收多余的值",[19,80851,80852],{},"const [a,b,...c]=[1,2,3,4]",[19,80854,80855],{},"console.log(c) 输出[3,4]",[19,80857,80858],{},"③可以按需导入，忽略某些返回值",[19,80860,80861],{},[5074,80862],{"alt":112,"src":80863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,80865,80866],{},"④支持多维数组的结构",[106,80868,80872],{"className":80869,"code":80870,"language":80871,"meta":112,"style":112},"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",[114,80873,80874,80902,80918,80933,80948],{"__ignoreMap":112},[128,80875,80876,80878,80880,80882,80884,80886,80888,80890,80893,80895,80897,80899],{"class":130,"line":131},[128,80877,10349],{"class":134},[128,80879,55216],{"class":138},[128,80881,270],{"class":134},[128,80883,55608],{"class":138},[128,80885,2592],{"class":166},[128,80887,258],{"class":138},[128,80889,409],{"class":166},[128,80891,80892],{"class":138},", [",[128,80894,3827],{"class":166},[128,80896,258],{"class":138},[128,80898,4043],{"class":166},[128,80900,80901],{"class":138},"]]\n",[128,80903,80904,80907,80909,80911,80913,80915],{"class":130,"line":142},[128,80905,80906],{"class":138},"console.",[128,80908,61627],{"class":199},[128,80910,7418],{"class":138},[128,80912,2452],{"class":166},[128,80914,7782],{"class":138},[128,80916,80917],{"class":3814},"  \u002F\u002F1\n",[128,80919,80920,80922,80924,80926,80928,80930],{"class":130,"line":156},[128,80921,80906],{"class":138},[128,80923,61627],{"class":199},[128,80925,7418],{"class":138},[128,80927,2592],{"class":166},[128,80929,7782],{"class":138},[128,80931,80932],{"class":3814},"  \u002F\u002F2\n",[128,80934,80935,80937,80939,80941,80943,80945],{"class":130,"line":163},[128,80936,80906],{"class":138},[128,80938,61627],{"class":199},[128,80940,7418],{"class":138},[128,80942,409],{"class":166},[128,80944,7782],{"class":138},[128,80946,80947],{"class":3814},"  \u002F\u002F[3,4]\n",[128,80949,80950,80952,80954,80956,80958,80960,80962,80964],{"class":130,"line":183},[128,80951,80906],{"class":138},[128,80953,61627],{"class":199},[128,80955,7418],{"class":138},[128,80957,409],{"class":166},[128,80959,8464],{"class":138},[128,80961,2452],{"class":166},[128,80963,7782],{"class":138},[128,80965,80966],{"class":3814},"  \u002F\u002F3\n",[106,80968,80970],{"className":80869,"code":80969,"language":80871,"meta":112,"style":112},"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",[114,80971,80972,80999,81010,81021],{"__ignoreMap":112},[128,80973,80974,80976,80979,80981,80983,80985,80987,80989,80991,80993,80995,80997],{"class":130,"line":131},[128,80975,10349],{"class":134},[128,80977,80978],{"class":138}," [a, b, c] ",[128,80980,270],{"class":134},[128,80982,55608],{"class":138},[128,80984,2592],{"class":166},[128,80986,258],{"class":138},[128,80988,409],{"class":166},[128,80990,80892],{"class":138},[128,80992,3827],{"class":166},[128,80994,258],{"class":138},[128,80996,4043],{"class":166},[128,80998,80901],{"class":138},[128,81000,81001,81003,81005,81008],{"class":130,"line":142},[128,81002,80906],{"class":138},[128,81004,61627],{"class":199},[128,81006,81007],{"class":138},"(a)",[128,81009,80917],{"class":3814},[128,81011,81012,81014,81016,81019],{"class":130,"line":156},[128,81013,80906],{"class":138},[128,81015,61627],{"class":199},[128,81017,81018],{"class":138},"(b)",[128,81020,80932],{"class":3814},[128,81022,81023,81025,81027,81030],{"class":130,"line":163},[128,81024,80906],{"class":138},[128,81026,61627],{"class":199},[128,81028,81029],{"class":138},"(c)",[128,81031,80947],{"class":3814},[106,81033,81035],{"className":80869,"code":81034,"language":80871,"meta":112,"style":112},"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",[114,81036,81037,81064,81074,81084,81094],{"__ignoreMap":112},[128,81038,81039,81041,81044,81046,81048,81050,81052,81054,81056,81058,81060,81062],{"class":130,"line":131},[128,81040,10349],{"class":134},[128,81042,81043],{"class":138}," [a, b, [c, d]] ",[128,81045,270],{"class":134},[128,81047,55608],{"class":138},[128,81049,2592],{"class":166},[128,81051,258],{"class":138},[128,81053,409],{"class":166},[128,81055,80892],{"class":138},[128,81057,3827],{"class":166},[128,81059,258],{"class":138},[128,81061,4043],{"class":166},[128,81063,80901],{"class":138},[128,81065,81066,81068,81070,81072],{"class":130,"line":142},[128,81067,80906],{"class":138},[128,81069,61627],{"class":199},[128,81071,81007],{"class":138},[128,81073,80917],{"class":3814},[128,81075,81076,81078,81080,81082],{"class":130,"line":156},[128,81077,80906],{"class":138},[128,81079,61627],{"class":199},[128,81081,81018],{"class":138},[128,81083,80932],{"class":3814},[128,81085,81086,81088,81090,81092],{"class":130,"line":163},[128,81087,80906],{"class":138},[128,81089,61627],{"class":199},[128,81091,81029],{"class":138},[128,81093,80966],{"class":3814},[128,81095,81096,81098,81100,81103],{"class":130,"line":183},[128,81097,80906],{"class":138},[128,81099,61627],{"class":199},[128,81101,81102],{"class":138},"(d)",[128,81104,81105],{"class":3814},"  \u002F\u002F4\n",[72,81107,81109],{"id":81108},"_462-对象解构","4.6.2 对象解构",[19,81111,81112],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,81114,81115],{},"用的非常非常多！！！！！！",[25485,81117,81119],{"id":81118},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,81121,81122],{},"基本语法：",[26,81124,81125,81128,81131,81134],{},[29,81126,81127],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[29,81129,81130],{},"对象属性的值将被赋值给与属性名相同的变量",[29,81132,81133],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[29,81135,81136],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[106,81138,81140],{"className":54018,"code":81139,"language":54020,"meta":112,"style":112},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[114,81141,81142,81147,81152,81157,81161],{"__ignoreMap":112},[128,81143,81144],{"class":130,"line":131},[128,81145,81146],{"class":138},"const obj = {\n",[128,81148,81149],{"class":130,"line":142},[128,81150,81151],{"class":138},"   uname: 'pink老师',\n",[128,81153,81154],{"class":130,"line":156},[128,81155,81156],{"class":138},"   age: 18,\n",[128,81158,81159],{"class":130,"line":163},[128,81160,2694],{"class":138},[128,81162,81163],{"class":130,"line":183},[128,81164,81165],{"class":138},"const { uname, age } = obj\n",[19,81167,81168],{},"上方代码这样写等价于：",[19,81170,81171],{},"const uname等价于obj.uname",[19,81173,81174],{},"变量名可以重新改名：",[19,81176,81177],{},"const uname='red老师'",[19,81179,81180],{},"const user={",[19,81182,81183],{},"  uname:'pink老师',",[19,81185,81186],{},"  age:18",[19,81188,1453],{},[19,81190,81191],{},"const {uname,age}=user",[19,81193,81194],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,81196,81197],{},"const {旧变量名：新变量名}=对象",[19,81199,81200],{},"const {uname:username,age}=user",[25485,81202,81204],{"id":81203},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,81206,81207],{},[5074,81208],{"alt":112,"src":81209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[25485,81211,81213],{"id":81212},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,81215,81216],{},[5074,81217],{"alt":112,"src":81218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[106,81220,81222],{"className":56449,"code":81221,"language":56451,"meta":112,"style":112},"  \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",[114,81223,81224,81232,81237,81242,81247,81252,81257,81262,81267,81272,81276,81281,81286],{"__ignoreMap":112},[128,81225,81226,81228,81230],{"class":130,"line":131},[128,81227,55526],{"class":138},[128,81229,55196],{"class":54685},[128,81231,54692],{"class":138},[128,81233,81234],{"class":130,"line":142},[128,81235,81236],{"class":138},"    const pig = {\n",[128,81238,81239],{"class":130,"line":156},[128,81240,81241],{"class":138},"      name: '佩奇',\n",[128,81243,81244],{"class":130,"line":163},[128,81245,81246],{"class":138},"      family: {\n",[128,81248,81249],{"class":130,"line":183},[128,81250,81251],{"class":138},"        mother: '猪妈妈',\n",[128,81253,81254],{"class":130,"line":188},[128,81255,81256],{"class":138},"        father: '猪爸爸',\n",[128,81258,81259],{"class":130,"line":193},[128,81260,81261],{"class":138},"        sister: '乔治'\n",[128,81263,81264],{"class":130,"line":206},[128,81265,81266],{"class":138},"      },\n",[128,81268,81269],{"class":130,"line":221},[128,81270,81271],{"class":138},"      age: 6\n",[128,81273,81274],{"class":130,"line":230},[128,81275,5773],{"class":138},[128,81277,81278],{"class":130,"line":235},[128,81279,81280],{"class":138},"    \u002F\u002F 多级对象解构\n",[128,81282,81283],{"class":130,"line":244},[128,81284,81285],{"class":138},"    const { name, family: { mother, father, sister }, age } = pig\n",[128,81287,81288,81290,81292],{"class":130,"line":287},[128,81289,55799],{"class":138},[128,81291,55196],{"class":54685},[128,81293,54692],{"class":138},[19,81295,81296],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[106,81298,81301],{"className":81299,"code":81300,"language":79821,"meta":112,"style":112},"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",[114,81302,81303,81308,81319,81331,81343,81352,81356,81367,81379,81389,81394,81398,81408,81419,81428,81432,81436,81447,81458,81467,81471,81476],{"__ignoreMap":112},[128,81304,81305],{"class":130,"line":131},[128,81306,81307],{"class":3814},"    \u002F\u002F 这是后台传递过来的数据\n",[128,81309,81310,81312,81315,81317],{"class":130,"line":142},[128,81311,14748],{"class":134},[128,81313,81314],{"class":138}," msg ",[128,81316,270],{"class":134},[128,81318,1959],{"class":138},[128,81320,81321,81324,81326,81329],{"class":130,"line":156},[128,81322,81323],{"class":176},"      \"code\"",[128,81325,4607],{"class":134},[128,81327,81328],{"class":166}," 200",[128,81330,2665],{"class":138},[128,81332,81333,81336,81338,81341],{"class":130,"line":163},[128,81334,81335],{"class":176},"      \"msg\"",[128,81337,4607],{"class":134},[128,81339,81340],{"class":176}," \"获取新闻列表成功\"",[128,81342,2665],{"class":138},[128,81344,81345,81348,81350],{"class":130,"line":183},[128,81346,81347],{"class":176},"      \"data\"",[128,81349,4607],{"class":134},[128,81351,2246],{"class":138},[128,81353,81354],{"class":130,"line":188},[128,81355,6092],{"class":138},[128,81357,81358,81361,81363,81365],{"class":130,"line":193},[128,81359,81360],{"class":176},"          \"id\"",[128,81362,4607],{"class":134},[128,81364,28605],{"class":166},[128,81366,2665],{"class":138},[128,81368,81369,81372,81374,81377],{"class":130,"line":206},[128,81370,81371],{"class":176},"          \"title\"",[128,81373,4607],{"class":134},[128,81375,81376],{"class":176}," \"5G商用自己，三大运用商收入下降\"",[128,81378,2665],{"class":138},[128,81380,81381,81384,81386],{"class":130,"line":221},[128,81382,81383],{"class":176},"          \"count\"",[128,81385,4607],{"class":134},[128,81387,81388],{"class":166}," 58\n",[128,81390,81391],{"class":130,"line":230},[128,81392,81393],{"class":138},"        },\n",[128,81395,81396],{"class":130,"line":235},[128,81397,6092],{"class":138},[128,81399,81400,81402,81404,81406],{"class":130,"line":244},[128,81401,81360],{"class":176},[128,81403,4607],{"class":134},[128,81405,18277],{"class":166},[128,81407,2665],{"class":138},[128,81409,81410,81412,81414,81417],{"class":130,"line":287},[128,81411,81371],{"class":176},[128,81413,4607],{"class":134},[128,81415,81416],{"class":176}," \"国际媒体头条速览\"",[128,81418,2665],{"class":138},[128,81420,81421,81423,81425],{"class":130,"line":301},[128,81422,81383],{"class":176},[128,81424,4607],{"class":134},[128,81426,81427],{"class":166}," 56\n",[128,81429,81430],{"class":130,"line":310},[128,81431,81393],{"class":138},[128,81433,81434],{"class":130,"line":323},[128,81435,6092],{"class":138},[128,81437,81438,81440,81442,81445],{"class":130,"line":330},[128,81439,81360],{"class":176},[128,81441,4607],{"class":134},[128,81443,81444],{"class":166}," 3",[128,81446,2665],{"class":138},[128,81448,81449,81451,81453,81456],{"class":130,"line":335},[128,81450,81371],{"class":176},[128,81452,4607],{"class":134},[128,81454,81455],{"class":176}," \"乌克兰和俄罗斯持续冲突\"",[128,81457,2665],{"class":138},[128,81459,81460,81462,81464],{"class":130,"line":340},[128,81461,81383],{"class":176},[128,81463,4607],{"class":134},[128,81465,81466],{"class":166}," 1669\n",[128,81468,81469],{"class":130,"line":351},[128,81470,81393],{"class":138},[128,81472,81473],{"class":130,"line":384},[128,81474,81475],{"class":138},"      ]\n",[128,81477,81478],{"class":130,"line":414},[128,81479,5773],{"class":138},[19,81481,81482],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,81484,81485],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,81487,81488],{},"\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,81490,81491],{},"function({data}) {",[19,81493,81494],{},"console.log(data)",[19,81496,1453],{},[19,81498,81499],{},"render(msg)",[19,81501,81502],{},"实参传递给形参的时候解构了",[19,81504,81505],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,81507,81508],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,81510,81511],{},"function render({data:mydata}) {",[19,81513,81514],{},"  console.log(data)",[19,81516,1453],{},[72,81518,81520],{"id":81519},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,81522,81523],{},"有两种情况：一个是数组结构，一个是立即执行函数",[26,81525,81526],{},[29,81527,81528],{},"如果对一个数组进行遍历，有两种方式：",[19,81530,81531],{},"①法1",[19,81533,81534],{},"const arr=[1,2,3]",[19,81536,81537],{},"arr.map(function(item,index) {",[19,81539,81540],{},"  console.log(item)",[19,81542,55846],{},[19,81544,81545],{},[5074,81546],{"alt":112,"src":81547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,81549,81550],{},"②法2",[19,81552,81553],{},"const str='pink'",[19,81555,81556],{},"[1,2,3].map(function(item,index) {",[19,81558,81559],{},"console.log(item)",[19,81561,55846],{},[19,81563,81564],{},[5074,81565],{"alt":112,"src":81566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,81568,81569],{},"此时会报错",[19,81571,81572],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,81574,81559],{},[19,81576,55846],{},[19,81578,81579],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,81581,81583],{"id":81582},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,81585,81586],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,81588,81589],{},"可以理解为加强版的for循环",[19,81591,81592],{},[5074,81593],{"alt":112,"src":81594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,81596,81597],{},"里边不写return，不返回数组，只遍历不返回",[19,81599,81600],{},"map是返回数组",[19,81602,81603],{},"forEach主要用于遍历数组对象",[106,81605,81607],{"className":56449,"code":81606,"language":56451,"meta":112,"style":112},"  \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",[114,81608,81609,81617,81622,81627,81632,81637,81641,81646],{"__ignoreMap":112},[128,81610,81611,81613,81615],{"class":130,"line":131},[128,81612,55526],{"class":138},[128,81614,55196],{"class":54685},[128,81616,54692],{"class":138},[128,81618,81619],{"class":130,"line":142},[128,81620,81621],{"class":138},"    const arr = ['red', 'green', 'pink']\n",[128,81623,81624],{"class":130,"line":156},[128,81625,81626],{"class":138},"    const result = arr.forEach(function (item, index) {\n",[128,81628,81629],{"class":130,"line":163},[128,81630,81631],{"class":138},"      console.log(item)\n",[128,81633,81634],{"class":130,"line":183},[128,81635,81636],{"class":138},"      console.log(index)\n",[128,81638,81639],{"class":130,"line":188},[128,81640,917],{"class":138},[128,81642,81643],{"class":130,"line":193},[128,81644,81645],{"class":138},"    console.log(result)\n",[128,81647,81648,81650,81652],{"class":130,"line":206},[128,81649,55799],{"class":138},[128,81651,55196],{"class":54685},[128,81653,54692],{"class":138},[19,81655,81656],{},[5074,81657],{"alt":112,"src":81658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,81660,81662],{"id":81661},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,81664,81665],{},[5074,81666],{"alt":112,"src":81667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,81669,81670],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[106,81672,81674],{"className":56449,"code":81673,"language":56451,"meta":112,"style":112},"\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",[114,81675,81676,81684,81692,81697,81702,81706,81710,81715,81719,81724,81732],{"__ignoreMap":112},[128,81677,81678,81680,81682],{"class":130,"line":131},[128,81679,4657],{"class":138},[128,81681,55183],{"class":54685},[128,81683,54692],{"class":138},[128,81685,81686,81688,81690],{"class":130,"line":142},[128,81687,55526],{"class":138},[128,81689,55196],{"class":54685},[128,81691,54692],{"class":138},[128,81693,81694],{"class":130,"line":156},[128,81695,81696],{"class":138},"    const arr = [10, 20, 30]\n",[128,81698,81699],{"class":130,"line":163},[128,81700,81701],{"class":138},"    const newArr = arr.filter(function (item, index) {\n",[128,81703,81704],{"class":130,"line":183},[128,81705,81631],{"class":138},[128,81707,81708],{"class":130,"line":188},[128,81709,81636],{"class":138},[128,81711,81712],{"class":130,"line":193},[128,81713,81714],{"class":138},"      return item >= 20\n",[128,81716,81717],{"class":130,"line":206},[128,81718,917],{"class":138},[128,81720,81721],{"class":130,"line":221},[128,81722,81723],{"class":138},"    console.log(newArr)\n",[128,81725,81726,81728,81730],{"class":130,"line":230},[128,81727,55799],{"class":138},[128,81729,55196],{"class":54685},[128,81731,54692],{"class":138},[128,81733,81734,81736,81738],{"class":130,"line":235},[128,81735,55168],{"class":138},[128,81737,55183],{"class":54685},[128,81739,54692],{"class":138},[19,81741,81742],{},"这个也可以写成箭头函数：",[106,81744,81746],{"className":54018,"code":81745,"language":54020,"meta":112,"style":112},"const newArr = arr.filter(item => item >= 20)\n",[114,81747,81748],{"__ignoreMap":112},[128,81749,81750],{"class":130,"line":131},[128,81751,81745],{"class":138},[14,81753,81755],{"id":81754},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,81757,81758],{},[5074,81759],{"alt":112,"src":81760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,81762,81763],{},"步骤：",[19,81765,81766],{},"①：渲染页面模块",[4752,81768,81769,81772],{},[29,81770,81771],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[29,81773,81774],{},"用forEach+字符串的形式",[19,81776,81777],{},"②：点击不同需求，显示不同页面内容",[4752,81779,81780,81783,81786,81789,81792],{},[29,81781,81782],{},"点击采取事件委托方式 .filter",[29,81784,81785],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[29,81787,81788],{},"筛选条件是根据点击的 data-index 来判断",[29,81790,81791],{},"可以使用对象解构，把事件对象解构",[29,81793,81794],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[106,81796,81798],{"className":54018,"code":81797,"language":54020,"meta":112,"style":112},"\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",[114,81799,81800,81810,81824,81828,81836,81850,81870,81882,81890,81896,81906,81916,81926,81930,81934,81940,81953,81965,81975,81987,81991,81995,82002,82015,82027,82044,82062,82075,82079,82083,82095,82105,82109,82113,82120,82161,82188,82198,82202,82206,82214,82226,82230,82234,82242,82254,82266,82277,82281,82285,82294,82306,82317,82321,82325,82334,82346,82358,82362,82366,82373,82383,82395,82407,82422,82426,82430,82438,82454,82464,82474,82484,82496,82500,82504,82514,82525,82535,82539,82547,82555,82559,82567,82582,82608,82633,82658,82677,82685,82699,82704,82709,82714,82719,82724,82732,82740,82745,82756,82761,82771,82781,82791,82801,82805,82809,82818,82827,82836,82845,82849,82853,82862,82871,82880,82889,82893,82897,82906,82915,82924,82933,82937,82941,82950,82959,82968,82977,82981,82985,82994,83003,83012,83021,83025,83029,83038,83047,83056,83065,83069,83073,83082,83091,83099,83108,83112,83116,83120,83125,83137,83142,83154,83158,83175,83202,83211,83216,83226,83236,83245,83250,83255,83259,83264,83281,83285,83290,83298,83303,83330,83335,83355,83360,83372,83377,83382,83387,83398,83412,83449,83467,83500,83517,83541,83545,83550,83556,83560,83564,83568,83576,83584,83588],{"__ignoreMap":112},[128,81801,81802,81804,81806,81808],{"class":130,"line":131},[128,81803,54682],{"class":138},[128,81805,54686],{"class":54685},[128,81807,54689],{"class":199},[128,81809,54692],{"class":138},[128,81811,81812,81814,81816,81818,81820,81822],{"class":130,"line":142},[128,81813,4657],{"class":138},[128,81815,54020],{"class":54685},[128,81817,54701],{"class":199},[128,81819,270],{"class":138},[128,81821,54706],{"class":176},[128,81823,54692],{"class":138},[128,81825,81826],{"class":130,"line":156},[128,81827,160],{"emptyLinePlaceholder":159},[128,81829,81830,81832,81834],{"class":130,"line":163},[128,81831,4657],{"class":138},[128,81833,54719],{"class":54685},[128,81835,54692],{"class":138},[128,81837,81838,81840,81842,81844,81846,81848],{"class":130,"line":183},[128,81839,55526],{"class":138},[128,81841,54729],{"class":54685},[128,81843,54732],{"class":199},[128,81845,270],{"class":138},[128,81847,54737],{"class":176},[128,81849,54692],{"class":138},[128,81851,81852,81854,81856,81858,81860,81862,81864,81866,81868],{"class":130,"line":188},[128,81853,55526],{"class":138},[128,81855,54729],{"class":54685},[128,81857,18442],{"class":199},[128,81859,270],{"class":138},[128,81861,54776],{"class":176},[128,81863,54756],{"class":199},[128,81865,270],{"class":138},[128,81867,54783],{"class":176},[128,81869,54692],{"class":138},[128,81871,81872,81874,81876,81878,81880],{"class":130,"line":193},[128,81873,55526],{"class":138},[128,81875,2752],{"class":54685},[128,81877,54794],{"class":138},[128,81879,2752],{"class":54685},[128,81881,54692],{"class":138},[128,81883,81884,81886,81888],{"class":130,"line":206},[128,81885,55526],{"class":138},[128,81887,3659],{"class":54685},[128,81889,54692],{"class":138},[128,81891,81892,81894],{"class":130,"line":221},[128,81893,9960],{"class":54685},[128,81895,1959],{"class":138},[128,81897,81898,81900,81902,81904],{"class":130,"line":230},[128,81899,58076],{"class":166},[128,81901,1967],{"class":138},[128,81903,2452],{"class":166},[128,81905,4905],{"class":138},[128,81907,81908,81910,81912,81914],{"class":130,"line":235},[128,81909,58087],{"class":166},[128,81911,1967],{"class":138},[128,81913,2452],{"class":166},[128,81915,4905],{"class":138},[128,81917,81918,81920,81922,81924],{"class":130,"line":244},[128,81919,75971],{"class":166},[128,81921,1967],{"class":138},[128,81923,63885],{"class":166},[128,81925,4905],{"class":138},[128,81927,81928],{"class":130,"line":287},[128,81929,5773],{"class":138},[128,81931,81932],{"class":130,"line":301},[128,81933,160],{"emptyLinePlaceholder":159},[128,81935,81936,81938],{"class":130,"line":310},[128,81937,65502],{"class":199},[128,81939,1959],{"class":138},[128,81941,81942,81944,81946,81949,81951],{"class":130,"line":323},[128,81943,58152],{"class":166},[128,81945,1967],{"class":138},[128,81947,81948],{"class":166},"990",[128,81950,54875],{"class":134},[128,81952,4905],{"class":138},[128,81954,81955,81957,81959,81961,81963],{"class":130,"line":330},[128,81956,58087],{"class":166},[128,81958,1967],{"class":138},[128,81960,2452],{"class":166},[128,81962,54939],{"class":166},[128,81964,4905],{"class":138},[128,81966,81967,81969,81971,81973],{"class":130,"line":335},[128,81968,58390],{"class":166},[128,81970,1967],{"class":138},[128,81972,54860],{"class":166},[128,81974,4905],{"class":138},[128,81976,81977,81980,81982,81985],{"class":130,"line":340},[128,81978,81979],{"class":166},"      flex-wrap",[128,81981,1967],{"class":138},[128,81983,81984],{"class":166},"wrap",[128,81986,4905],{"class":138},[128,81988,81989],{"class":130,"line":351},[128,81990,5773],{"class":138},[128,81992,81993],{"class":130,"line":384},[128,81994,160],{"emptyLinePlaceholder":159},[128,81996,81997,82000],{"class":130,"line":414},[128,81998,81999],{"class":199},"    .item",[128,82001,1959],{"class":138},[128,82003,82004,82006,82008,82011,82013],{"class":130,"line":419},[128,82005,58152],{"class":166},[128,82007,1967],{"class":138},[128,82009,82010],{"class":166},"240",[128,82012,54875],{"class":134},[128,82014,4905],{"class":138},[128,82016,82017,82019,82021,82023,82025],{"class":130,"line":424},[128,82018,65379],{"class":166},[128,82020,1967],{"class":138},[128,82022,4196],{"class":166},[128,82024,54875],{"class":134},[128,82026,4905],{"class":138},[128,82028,82029,82031,82033,82035,82037,82040,82042],{"class":130,"line":434},[128,82030,58076],{"class":166},[128,82032,1967],{"class":138},[128,82034,4449],{"class":166},[128,82036,54875],{"class":134},[128,82038,82039],{"class":166}," 30",[128,82041,54875],{"class":134},[128,82043,4905],{"class":138},[128,82045,82046,82048,82050,82052,82055,82058,82060],{"class":130,"line":447},[128,82047,65239],{"class":166},[128,82049,1967],{"class":138},[128,82051,31606],{"class":166},[128,82053,82054],{"class":166}," ease",[128,82056,82057],{"class":166}," .5",[128,82059,4444],{"class":134},[128,82061,4905],{"class":138},[128,82063,82064,82067,82069,82071,82073],{"class":130,"line":459},[128,82065,82066],{"class":166},"      margin-bottom",[128,82068,1967],{"class":138},[128,82070,4449],{"class":166},[128,82072,54875],{"class":134},[128,82074,4905],{"class":138},[128,82076,82077],{"class":130,"line":471},[128,82078,5773],{"class":138},[128,82080,82081],{"class":130,"line":483},[128,82082,160],{"emptyLinePlaceholder":159},[128,82084,82085,82088,82090,82093],{"class":130,"line":495},[128,82086,82087],{"class":199},"    .item:nth-child",[128,82089,253],{"class":138},[128,82091,82092],{"class":166},"4n",[128,82094,15968],{"class":138},[128,82096,82097,82099,82101,82103],{"class":130,"line":507},[128,82098,65379],{"class":166},[128,82100,1967],{"class":138},[128,82102,2452],{"class":166},[128,82104,4905],{"class":138},[128,82106,82107],{"class":130,"line":519},[128,82108,5773],{"class":138},[128,82110,82111],{"class":130,"line":524},[128,82112,160],{"emptyLinePlaceholder":159},[128,82114,82115,82118],{"class":130,"line":529},[128,82116,82117],{"class":199},"    .item:hover",[128,82119,1959],{"class":138},[128,82121,82122,82125,82127,82129,82131,82133,82135,82137,82139,82142,82144,82146,82148,82150,82152,82154,82156,82159],{"class":130,"line":540},[128,82123,82124],{"class":166},"      box-shadow",[128,82126,1967],{"class":138},[128,82128,2452],{"class":166},[128,82130,54875],{"class":134},[128,82132,7659],{"class":166},[128,82134,54875],{"class":134},[128,82136,5734],{"class":166},[128,82138,54875],{"class":134},[128,82140,82141],{"class":166}," rgba",[128,82143,253],{"class":138},[128,82145,2452],{"class":166},[128,82147,258],{"class":138},[128,82149,2452],{"class":166},[128,82151,258],{"class":138},[128,82153,2452],{"class":166},[128,82155,258],{"class":138},[128,82157,82158],{"class":166},".2",[128,82160,6292],{"class":138},[128,82162,82163,82166,82168,82171,82173,82175,82177,82180,82182,82184,82186],{"class":130,"line":555},[128,82164,82165],{"class":166},"      transform",[128,82167,1967],{"class":138},[128,82169,82170],{"class":166},"translate3d",[128,82172,253],{"class":138},[128,82174,2452],{"class":166},[128,82176,258],{"class":138},[128,82178,82179],{"class":166},"-4",[128,82181,54875],{"class":134},[128,82183,258],{"class":138},[128,82185,2452],{"class":166},[128,82187,6292],{"class":138},[128,82189,82190,82192,82194,82196],{"class":130,"line":576},[128,82191,65404],{"class":166},[128,82193,1967],{"class":138},[128,82195,65409],{"class":166},[128,82197,4905],{"class":138},[128,82199,82200],{"class":130,"line":584},[128,82201,5773],{"class":138},[128,82203,82204],{"class":130,"line":593},[128,82205,160],{"emptyLinePlaceholder":159},[128,82207,82208,82210,82212],{"class":130,"line":598},[128,82209,81999],{"class":199},[128,82211,58995],{"class":54685},[128,82213,1959],{"class":138},[128,82215,82216,82218,82220,82222,82224],{"class":130,"line":603},[128,82217,58152],{"class":166},[128,82219,1967],{"class":138},[128,82221,4061],{"class":166},[128,82223,4078],{"class":134},[128,82225,4905],{"class":138},[128,82227,82228],{"class":130,"line":614},[128,82229,5773],{"class":138},[128,82231,82232],{"class":130,"line":625},[128,82233,160],{"emptyLinePlaceholder":159},[128,82235,82236,82238,82240],{"class":130,"line":633},[128,82237,81999],{"class":199},[128,82239,65683],{"class":199},[128,82241,1959],{"class":138},[128,82243,82244,82246,82248,82250,82252],{"class":130,"line":649},[128,82245,58303],{"class":166},[128,82247,1967],{"class":138},[128,82249,4399],{"class":166},[128,82251,54875],{"class":134},[128,82253,4905],{"class":138},[128,82255,82256,82258,82260,82262,82264],{"class":130,"line":660},[128,82257,82066],{"class":166},[128,82259,1967],{"class":138},[128,82261,4196],{"class":166},[128,82263,54875],{"class":134},[128,82265,4905],{"class":138},[128,82267,82268,82270,82272,82275],{"class":130,"line":673},[128,82269,60796],{"class":166},[128,82271,1967],{"class":138},[128,82273,82274],{"class":166},"#666",[128,82276,4905],{"class":138},[128,82278,82279],{"class":130,"line":678},[128,82280,5773],{"class":138},[128,82282,82283],{"class":130,"line":683},[128,82284,160],{"emptyLinePlaceholder":159},[128,82286,82287,82289,82292],{"class":130,"line":693},[128,82288,81999],{"class":199},[128,82290,82291],{"class":199}," .price",[128,82293,1959],{"class":138},[128,82295,82296,82298,82300,82302,82304],{"class":130,"line":702},[128,82297,58303],{"class":166},[128,82299,1967],{"class":138},[128,82301,4499],{"class":166},[128,82303,54875],{"class":134},[128,82305,4905],{"class":138},[128,82307,82308,82310,82312,82315],{"class":130,"line":709},[128,82309,60796],{"class":166},[128,82311,1967],{"class":138},[128,82313,82314],{"class":166},"firebrick",[128,82316,4905],{"class":138},[128,82318,82319],{"class":130,"line":723},[128,82320,5773],{"class":138},[128,82322,82323],{"class":130,"line":732},[128,82324,160],{"emptyLinePlaceholder":159},[128,82326,82327,82329,82332],{"class":130,"line":744},[128,82328,81999],{"class":199},[128,82330,82331],{"class":199}," .price::before",[128,82333,1959],{"class":138},[128,82335,82336,82339,82341,82344],{"class":130,"line":749},[128,82337,82338],{"class":166},"      content",[128,82340,1967],{"class":138},[128,82342,82343],{"class":176},"'￥'",[128,82345,4905],{"class":138},[128,82347,82348,82350,82352,82354,82356],{"class":130,"line":754},[128,82349,58303],{"class":166},[128,82351,1967],{"class":138},[128,82353,4298],{"class":166},[128,82355,54875],{"class":134},[128,82357,4905],{"class":138},[128,82359,82360],{"class":130,"line":764},[128,82361,5773],{"class":138},[128,82363,82364],{"class":130,"line":782},[128,82365,160],{"emptyLinePlaceholder":159},[128,82367,82368,82371],{"class":130,"line":787},[128,82369,82370],{"class":199},"    .filter",[128,82372,1959],{"class":138},[128,82374,82375,82377,82379,82381],{"class":130,"line":795},[128,82376,58390],{"class":166},[128,82378,1967],{"class":138},[128,82380,54860],{"class":166},[128,82382,4905],{"class":138},[128,82384,82385,82387,82389,82391,82393],{"class":130,"line":807},[128,82386,58152],{"class":166},[128,82388,1967],{"class":138},[128,82390,81948],{"class":166},[128,82392,54875],{"class":134},[128,82394,4905],{"class":138},[128,82396,82397,82399,82401,82403,82405],{"class":130,"line":813},[128,82398,58087],{"class":166},[128,82400,1967],{"class":138},[128,82402,2452],{"class":166},[128,82404,54939],{"class":166},[128,82406,4905],{"class":138},[128,82408,82409,82411,82413,82415,82417,82419],{"class":130,"line":818},[128,82410,58076],{"class":166},[128,82412,1967],{"class":138},[128,82414,4405],{"class":166},[128,82416,54875],{"class":134},[128,82418,82039],{"class":166},[128,82420,82421],{"class":134},"px\n",[128,82423,82424],{"class":130,"line":835},[128,82425,5773],{"class":138},[128,82427,82428],{"class":130,"line":851},[128,82429,160],{"emptyLinePlaceholder":159},[128,82431,82432,82434,82436],{"class":130,"line":867},[128,82433,82370],{"class":199},[128,82435,5010],{"class":54685},[128,82437,1959],{"class":138},[128,82439,82440,82442,82444,82446,82448,82450,82452],{"class":130,"line":872},[128,82441,58076],{"class":166},[128,82443,1967],{"class":138},[128,82445,4196],{"class":166},[128,82447,54875],{"class":134},[128,82449,12496],{"class":166},[128,82451,54875],{"class":134},[128,82453,4905],{"class":138},[128,82455,82456,82458,82460,82462],{"class":130,"line":878},[128,82457,65100],{"class":166},[128,82459,1967],{"class":138},[128,82461,65197],{"class":166},[128,82463,4905],{"class":138},[128,82465,82466,82468,82470,82472],{"class":130,"line":887},[128,82467,60796],{"class":166},[128,82469,1967],{"class":138},[128,82471,82274],{"class":166},[128,82473,4905],{"class":138},[128,82475,82476,82478,82480,82482],{"class":130,"line":896},[128,82477,67348],{"class":166},[128,82479,1967],{"class":138},[128,82481,58118],{"class":166},[128,82483,4905],{"class":138},[128,82485,82486,82488,82490,82492,82494],{"class":130,"line":905},[128,82487,65129],{"class":166},[128,82489,1967],{"class":138},[128,82491,4449],{"class":166},[128,82493,54875],{"class":134},[128,82495,4905],{"class":138},[128,82497,82498],{"class":130,"line":914},[128,82499,5773],{"class":138},[128,82501,82502],{"class":130,"line":920},[128,82503,160],{"emptyLinePlaceholder":159},[128,82505,82506,82508,82510,82512],{"class":130,"line":926},[128,82507,82370],{"class":199},[128,82509,5010],{"class":54685},[128,82511,65279],{"class":199},[128,82513,1959],{"class":138},[128,82515,82516,82518,82520,82523],{"class":130,"line":938},[128,82517,58265],{"class":166},[128,82519,1967],{"class":138},[128,82521,82522],{"class":166},"#05943c",[128,82524,4905],{"class":138},[128,82526,82527,82529,82531,82533],{"class":130,"line":943},[128,82528,60796],{"class":166},[128,82530,1967],{"class":138},[128,82532,64221],{"class":166},[128,82534,4905],{"class":138},[128,82536,82537],{"class":130,"line":948},[128,82538,5773],{"class":138},[128,82540,82541,82543,82545],{"class":130,"line":958},[128,82542,55799],{"class":138},[128,82544,3659],{"class":54685},[128,82546,54692],{"class":138},[128,82548,82549,82551,82553],{"class":130,"line":974},[128,82550,55168],{"class":138},[128,82552,54719],{"class":54685},[128,82554,54692],{"class":138},[128,82556,82557],{"class":130,"line":985},[128,82558,160],{"emptyLinePlaceholder":159},[128,82560,82561,82563,82565],{"class":130,"line":990},[128,82562,4657],{"class":138},[128,82564,55183],{"class":54685},[128,82566,54692],{"class":138},[128,82568,82569,82571,82573,82575,82577,82580],{"class":130,"line":1005},[128,82570,55526],{"class":138},[128,82572,54994],{"class":54685},[128,82574,56868],{"class":199},[128,82576,270],{"class":138},[128,82578,82579],{"class":176},"\"filter\"",[128,82581,54692],{"class":138},[128,82583,82584,82586,82588,82590,82592,82594,82597,82599,82601,82604,82606],{"class":130,"line":1017},[128,82585,54726],{"class":138},[128,82587,3989],{"class":54685},[128,82589,64436],{"class":199},[128,82591,270],{"class":138},[128,82593,64441],{"class":176},[128,82595,82596],{"class":199}," data-index",[128,82598,270],{"class":138},[128,82600,7246],{"class":176},[128,82602,82603],{"class":138},">0-100元\u003C\u002F",[128,82605,3989],{"class":54685},[128,82607,54692],{"class":138},[128,82609,82610,82612,82614,82616,82618,82620,82622,82624,82626,82629,82631],{"class":130,"line":1022},[128,82611,54726],{"class":138},[128,82613,3989],{"class":54685},[128,82615,64436],{"class":199},[128,82617,270],{"class":138},[128,82619,64441],{"class":176},[128,82621,82596],{"class":199},[128,82623,270],{"class":138},[128,82625,7269],{"class":176},[128,82627,82628],{"class":138},">100-300元\u003C\u002F",[128,82630,3989],{"class":54685},[128,82632,54692],{"class":138},[128,82634,82635,82637,82639,82641,82643,82645,82647,82649,82651,82654,82656],{"class":130,"line":1027},[128,82636,54726],{"class":138},[128,82638,3989],{"class":54685},[128,82640,64436],{"class":199},[128,82642,270],{"class":138},[128,82644,64441],{"class":176},[128,82646,82596],{"class":199},[128,82648,270],{"class":138},[128,82650,7282],{"class":176},[128,82652,82653],{"class":138},">300元以上\u003C\u002F",[128,82655,3989],{"class":54685},[128,82657,54692],{"class":138},[128,82659,82660,82662,82664,82666,82668,82670,82673,82675],{"class":130,"line":1033},[128,82661,54726],{"class":138},[128,82663,3989],{"class":54685},[128,82665,64436],{"class":199},[128,82667,270],{"class":138},[128,82669,64441],{"class":176},[128,82671,82672],{"class":138},">全部区间\u003C\u002F",[128,82674,3989],{"class":54685},[128,82676,54692],{"class":138},[128,82678,82679,82681,82683],{"class":130,"line":1038},[128,82680,55799],{"class":138},[128,82682,54994],{"class":54685},[128,82684,54692],{"class":138},[128,82686,82687,82689,82691,82693,82695,82697],{"class":130,"line":1050},[128,82688,55526],{"class":138},[128,82690,54994],{"class":54685},[128,82692,56868],{"class":199},[128,82694,270],{"class":138},[128,82696,65987],{"class":176},[128,82698,54692],{"class":138},[128,82700,82701],{"class":130,"line":1055},[128,82702,82703],{"class":3814},"    \u003C!-- \u003Cdiv class=\"item\">\n",[128,82705,82706],{"class":130,"line":1060},[128,82707,82708],{"class":3814},"      \u003Cimg src=\"\" alt=\"\">\n",[128,82710,82711],{"class":130,"line":1070},[128,82712,82713],{"class":3814},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[128,82715,82716],{"class":130,"line":1086},[128,82717,82718],{"class":3814},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[128,82720,82721],{"class":130,"line":1095},[128,82722,82723],{"class":3814},"    \u003C\u002Fdiv> -->\n",[128,82725,82726,82728,82730],{"class":130,"line":1100},[128,82727,55799],{"class":138},[128,82729,54994],{"class":54685},[128,82731,54692],{"class":138},[128,82733,82734,82736,82738],{"class":130,"line":1113},[128,82735,55526],{"class":138},[128,82737,55196],{"class":54685},[128,82739,54692],{"class":138},[128,82741,82742],{"class":130,"line":1124},[128,82743,82744],{"class":3814},"    \u002F\u002F 2. 初始化数据\n",[128,82746,82747,82749,82752,82754],{"class":130,"line":1129},[128,82748,14748],{"class":134},[128,82750,82751],{"class":166}," goodsList",[128,82753,170],{"class":134},[128,82755,2246],{"class":138},[128,82757,82758],{"class":130,"line":1134},[128,82759,82760],{"class":138},"      {\n",[128,82762,82763,82766,82769],{"class":130,"line":1150},[128,82764,82765],{"class":138},"        id: ",[128,82767,82768],{"class":176},"'4001172'",[128,82770,2665],{"class":138},[128,82772,82773,82776,82779],{"class":130,"line":1164},[128,82774,82775],{"class":138},"        name: ",[128,82777,82778],{"class":176},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[128,82780,2665],{"class":138},[128,82782,82783,82786,82789],{"class":130,"line":1178},[128,82784,82785],{"class":138},"        price: ",[128,82787,82788],{"class":176},"'289.00'",[128,82790,2665],{"class":138},[128,82792,82793,82796,82799],{"class":130,"line":1183},[128,82794,82795],{"class":138},"        picture: ",[128,82797,82798],{"class":176},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[128,82800,2665],{"class":138},[128,82802,82803],{"class":130,"line":1199},[128,82804,81266],{"class":138},[128,82806,82807],{"class":130,"line":1214},[128,82808,82760],{"class":138},[128,82810,82811,82813,82816],{"class":130,"line":1229},[128,82812,82765],{"class":138},[128,82814,82815],{"class":176},"'4001594'",[128,82817,2665],{"class":138},[128,82819,82820,82822,82825],{"class":130,"line":1234},[128,82821,82775],{"class":138},[128,82823,82824],{"class":176},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[128,82826,2665],{"class":138},[128,82828,82829,82831,82834],{"class":130,"line":1239},[128,82830,82785],{"class":138},[128,82832,82833],{"class":176},"'288.00'",[128,82835,2665],{"class":138},[128,82837,82838,82840,82843],{"class":130,"line":1251},[128,82839,82795],{"class":138},[128,82841,82842],{"class":176},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[128,82844,2665],{"class":138},[128,82846,82847],{"class":130,"line":1256},[128,82848,81266],{"class":138},[128,82850,82851],{"class":130,"line":1261},[128,82852,82760],{"class":138},[128,82854,82855,82857,82860],{"class":130,"line":1271},[128,82856,82765],{"class":138},[128,82858,82859],{"class":176},"'4001009'",[128,82861,2665],{"class":138},[128,82863,82864,82866,82869],{"class":130,"line":1287},[128,82865,82775],{"class":138},[128,82867,82868],{"class":176},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[128,82870,2665],{"class":138},[128,82872,82873,82875,82878],{"class":130,"line":1296},[128,82874,82785],{"class":138},[128,82876,82877],{"class":176},"'109.00'",[128,82879,2665],{"class":138},[128,82881,82882,82884,82887],{"class":130,"line":1301},[128,82883,82795],{"class":138},[128,82885,82886],{"class":176},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[128,82888,2665],{"class":138},[128,82890,82891],{"class":130,"line":1314},[128,82892,81266],{"class":138},[128,82894,82895],{"class":130,"line":1325},[128,82896,82760],{"class":138},[128,82898,82899,82901,82904],{"class":130,"line":1330},[128,82900,82765],{"class":138},[128,82902,82903],{"class":176},"'4001874'",[128,82905,2665],{"class":138},[128,82907,82908,82910,82913],{"class":130,"line":1335},[128,82909,82775],{"class":138},[128,82911,82912],{"class":176},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[128,82914,2665],{"class":138},[128,82916,82917,82919,82922],{"class":130,"line":1341},[128,82918,82785],{"class":138},[128,82920,82921],{"class":176},"'488.00'",[128,82923,2665],{"class":138},[128,82925,82926,82928,82931],{"class":130,"line":1346},[128,82927,82795],{"class":138},[128,82929,82930],{"class":176},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[128,82932,2665],{"class":138},[128,82934,82935],{"class":130,"line":1351},[128,82936,81266],{"class":138},[128,82938,82939],{"class":130,"line":1362},[128,82940,82760],{"class":138},[128,82942,82943,82945,82948],{"class":130,"line":1370},[128,82944,82765],{"class":138},[128,82946,82947],{"class":176},"'4001649'",[128,82949,2665],{"class":138},[128,82951,82952,82954,82957],{"class":130,"line":1397},[128,82953,82775],{"class":138},[128,82955,82956],{"class":176},"'大师监制龙泉青瓷茶叶罐'",[128,82958,2665],{"class":138},[128,82960,82961,82963,82966],{"class":130,"line":1417},[128,82962,82785],{"class":138},[128,82964,82965],{"class":176},"'139.00'",[128,82967,2665],{"class":138},[128,82969,82970,82972,82975],{"class":130,"line":1437},[128,82971,82795],{"class":138},[128,82973,82974],{"class":176},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[128,82976,2665],{"class":138},[128,82978,82979],{"class":130,"line":1458},[128,82980,81266],{"class":138},[128,82982,82983],{"class":130,"line":1464},[128,82984,82760],{"class":138},[128,82986,82987,82989,82992],{"class":130,"line":1469},[128,82988,82765],{"class":138},[128,82990,82991],{"class":176},"'3997185'",[128,82993,2665],{"class":138},[128,82995,82996,82998,83001],{"class":130,"line":1474},[128,82997,82775],{"class":138},[128,82999,83000],{"class":176},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[128,83002,2665],{"class":138},[128,83004,83005,83007,83010],{"class":130,"line":1484},[128,83006,82785],{"class":138},[128,83008,83009],{"class":176},"'108.00'",[128,83011,2665],{"class":138},[128,83013,83014,83016,83019],{"class":130,"line":1493},[128,83015,82795],{"class":138},[128,83017,83018],{"class":176},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[128,83020,2665],{"class":138},[128,83022,83023],{"class":130,"line":1505},[128,83024,81266],{"class":138},[128,83026,83027],{"class":130,"line":1510},[128,83028,82760],{"class":138},[128,83030,83031,83033,83036],{"class":130,"line":1515},[128,83032,82765],{"class":138},[128,83034,83035],{"class":176},"'3997403'",[128,83037,2665],{"class":138},[128,83039,83040,83042,83045],{"class":130,"line":1543},[128,83041,82775],{"class":138},[128,83043,83044],{"class":176},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[128,83046,2665],{"class":138},[128,83048,83049,83051,83054],{"class":130,"line":1554},[128,83050,82785],{"class":138},[128,83052,83053],{"class":176},"'100.00'",[128,83055,2665],{"class":138},[128,83057,83058,83060,83063],{"class":130,"line":1560},[128,83059,82795],{"class":138},[128,83061,83062],{"class":176},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[128,83064,2665],{"class":138},[128,83066,83067],{"class":130,"line":1565},[128,83068,81266],{"class":138},[128,83070,83071],{"class":130,"line":1570},[128,83072,82760],{"class":138},[128,83074,83075,83077,83080],{"class":130,"line":1580},[128,83076,82765],{"class":138},[128,83078,83079],{"class":176},"'3998274'",[128,83081,2665],{"class":138},[128,83083,83084,83086,83089],{"class":130,"line":1591},[128,83085,82775],{"class":138},[128,83087,83088],{"class":176},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[128,83090,2665],{"class":138},[128,83092,83093,83095,83097],{"class":130,"line":1596},[128,83094,82785],{"class":138},[128,83096,82965],{"class":176},[128,83098,2665],{"class":138},[128,83100,83101,83103,83106],{"class":130,"line":1605},[128,83102,82795],{"class":138},[128,83104,83105],{"class":176},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[128,83107,2665],{"class":138},[128,83109,83110],{"class":130,"line":1611},[128,83111,81266],{"class":138},[128,83113,83114],{"class":130,"line":1628},[128,83115,56491],{"class":138},[128,83117,83118],{"class":130,"line":1633},[128,83119,160],{"emptyLinePlaceholder":159},[128,83121,83122],{"class":130,"line":1648},[128,83123,83124],{"class":3814},"    \u002F\u002F 1.渲染函数\n",[128,83126,83127,83129,83131,83133,83135],{"class":130,"line":1654},[128,83128,73459],{"class":134},[128,83130,73462],{"class":199},[128,83132,253],{"class":138},[128,83134,7447],{"class":266},[128,83136,15968],{"class":138},[128,83138,83139],{"class":130,"line":1669},[128,83140,83141],{"class":3814},"      \u002F\u002F 声明空字符串\n",[128,83143,83144,83147,83150,83152],{"class":130,"line":1675},[128,83145,83146],{"class":134},"      let",[128,83148,83149],{"class":138}," str ",[128,83151,270],{"class":134},[128,83153,73479],{"class":176},[128,83155,83156],{"class":130,"line":1689},[128,83157,73484],{"class":3814},[128,83159,83160,83162,83165,83167,83170,83173],{"class":130,"line":1695},[128,83161,61387],{"class":138},[128,83163,83164],{"class":199},"forEach",[128,83166,253],{"class":138},[128,83168,83169],{"class":266},"item",[128,83171,83172],{"class":134}," =>",[128,83174,1959],{"class":138},[128,83176,83177,83179,83182,83184,83186,83189,83191,83194,83197,83199],{"class":130,"line":1709},[128,83178,64649],{"class":134},[128,83180,83181],{"class":138}," { ",[128,83183,2773],{"class":166},[128,83185,258],{"class":138},[128,83187,83188],{"class":166},"price",[128,83190,258],{"class":138},[128,83192,83193],{"class":166},"picture",[128,83195,83196],{"class":138}," } ",[128,83198,270],{"class":134},[128,83200,83201],{"class":138}," item\n",[128,83203,83204,83207,83209],{"class":130,"line":1715},[128,83205,83206],{"class":138},"        str ",[128,83208,13023],{"class":134},[128,83210,73543],{"class":176},[128,83212,83213],{"class":130,"line":1729},[128,83214,83215],{"class":176},"          \u003Cdiv class=\"item\">\n",[128,83217,83218,83221,83223],{"class":130,"line":1735},[128,83219,83220],{"class":176},"            \u003Cimg src=\"${",[128,83222,83193],{"class":138},[128,83224,83225],{"class":176},"}\" alt=\"\">\n",[128,83227,83228,83231,83233],{"class":130,"line":1749},[128,83229,83230],{"class":176},"            \u003Cp class=\"name\">${",[128,83232,2773],{"class":138},[128,83234,83235],{"class":176},"}\u003C\u002Fp>\n",[128,83237,83238,83241,83243],{"class":130,"line":1761},[128,83239,83240],{"class":176},"            \u003Cp class=\"price\">${",[128,83242,83188],{"class":138},[128,83244,83235],{"class":176},[128,83246,83247],{"class":130,"line":1767},[128,83248,83249],{"class":176},"          \u003C\u002Fdiv>\n",[128,83251,83252],{"class":130,"line":1775},[128,83253,83254],{"class":176},"        `\n",[128,83256,83257],{"class":130,"line":1787},[128,83258,68193],{"class":138},[128,83260,83261],{"class":130,"line":1792},[128,83262,83263],{"class":3814},"      \u002F\u002F 追加给List\n",[128,83265,83266,83268,83270,83272,83275,83277,83279],{"class":130,"line":1797},[128,83267,59151],{"class":138},[128,83269,57780],{"class":199},[128,83271,253],{"class":138},[128,83273,83274],{"class":176},"'.list'",[128,83276,77623],{"class":138},[128,83278,270],{"class":134},[128,83280,77359],{"class":138},[128,83282,83283],{"class":130,"line":1814},[128,83284,5773],{"class":138},[128,83286,83287],{"class":130,"line":36751},[128,83288,83289],{"class":3814},"    \u002F\u002F 页面一打开就需要渲染\n",[128,83291,83292,83295],{"class":130,"line":36757},[128,83293,83294],{"class":199},"    render",[128,83296,83297],{"class":138},"(goodsList)\n",[128,83299,83300],{"class":130,"line":36768},[128,83301,83302],{"class":3814},"    \u002F\u002F 2.过滤筛选\n",[128,83304,83305,83307,83309,83311,83314,83316,83318,83320,83322,83324,83326,83328],{"class":130,"line":36774},[128,83306,55789],{"class":138},[128,83308,57780],{"class":199},[128,83310,253],{"class":138},[128,83312,83313],{"class":176},"'.filter'",[128,83315,34300],{"class":138},[128,83317,61193],{"class":199},[128,83319,253],{"class":138},[128,83321,61198],{"class":176},[128,83323,258],{"class":138},[128,83325,3830],{"class":266},[128,83327,83172],{"class":134},[128,83329,1959],{"class":138},[128,83331,83332],{"class":130,"line":36780},[128,83333,83334],{"class":3814},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[128,83336,83337,83339,83341,83344,83346,83348,83350,83352],{"class":130,"line":36786},[128,83338,61608],{"class":134},[128,83340,83181],{"class":138},[128,83342,83343],{"class":166},"tagName",[128,83345,258],{"class":138},[128,83347,35006],{"class":166},[128,83349,83196],{"class":138},[128,83351,270],{"class":134},[128,83353,83354],{"class":138}," e.target\n",[128,83356,83357],{"class":130,"line":36804},[128,83358,83359],{"class":3814},"      \u002F\u002F 判断\n",[128,83361,83362,83364,83366,83368,83370],{"class":130,"line":36818},[128,83363,57861],{"class":134},[128,83365,70412],{"class":138},[128,83367,57867],{"class":134},[128,83369,71634],{"class":176},[128,83371,15968],{"class":138},[128,83373,83374],{"class":130,"line":36827},[128,83375,83376],{"class":3814},"        \u002F\u002F console.log(11)\n",[128,83378,83379],{"class":130,"line":36836},[128,83380,83381],{"class":3814},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[128,83383,83384],{"class":130,"line":36845},[128,83385,83386],{"class":3814},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[128,83388,83389,83391,83393,83395],{"class":130,"line":36854},[128,83390,55213],{"class":134},[128,83392,55216],{"class":138},[128,83394,270],{"class":134},[128,83396,83397],{"class":138}," goodsList\n",[128,83399,83400,83402,83405,83407,83410],{"class":130,"line":36859},[128,83401,558],{"class":134},[128,83403,83404],{"class":138}," (dataset.index ",[128,83406,57867],{"class":134},[128,83408,83409],{"class":176}," '1'",[128,83411,15968],{"class":138},[128,83413,83414,83417,83419,83422,83425,83427,83429,83431,83434,83436,83438,83441,83443,83445,83447],{"class":130,"line":36865},[128,83415,83416],{"class":138},"          arr ",[128,83418,270],{"class":134},[128,83420,83421],{"class":138}," goodsList.",[128,83423,83424],{"class":199},"filter",[128,83426,253],{"class":138},[128,83428,83169],{"class":266},[128,83430,83172],{"class":134},[128,83432,83433],{"class":138}," item.price ",[128,83435,5308],{"class":134},[128,83437,7659],{"class":166},[128,83439,83440],{"class":134}," &&",[128,83442,83433],{"class":138},[128,83444,5197],{"class":134},[128,83446,9312],{"class":166},[128,83448,180],{"class":138},[128,83450,83451,83454,83456,83458,83460,83462,83465],{"class":130,"line":36873},[128,83452,83453],{"class":138},"        } ",[128,83455,5299],{"class":134},[128,83457,5302],{"class":134},[128,83459,83404],{"class":138},[128,83461,57867],{"class":134},[128,83463,83464],{"class":176}," '2'",[128,83466,15968],{"class":138},[128,83468,83469,83471,83473,83475,83477,83479,83481,83483,83485,83487,83489,83491,83493,83495,83498],{"class":130,"line":36878},[128,83470,83416],{"class":138},[128,83472,270],{"class":134},[128,83474,83421],{"class":138},[128,83476,83424],{"class":199},[128,83478,253],{"class":138},[128,83480,83169],{"class":266},[128,83482,83172],{"class":134},[128,83484,83433],{"class":138},[128,83486,5308],{"class":134},[128,83488,9312],{"class":166},[128,83490,83440],{"class":134},[128,83492,83433],{"class":138},[128,83494,5197],{"class":134},[128,83496,83497],{"class":166}," 300",[128,83499,180],{"class":138},[128,83501,83502,83504,83506,83508,83510,83512,83515],{"class":130,"line":36884},[128,83503,83453],{"class":138},[128,83505,5299],{"class":134},[128,83507,5302],{"class":134},[128,83509,83404],{"class":138},[128,83511,57867],{"class":134},[128,83513,83514],{"class":176}," '3'",[128,83516,15968],{"class":138},[128,83518,83519,83521,83523,83525,83527,83529,83531,83533,83535,83537,83539],{"class":130,"line":36895},[128,83520,83416],{"class":138},[128,83522,270],{"class":134},[128,83524,83421],{"class":138},[128,83526,83424],{"class":199},[128,83528,253],{"class":138},[128,83530,83169],{"class":266},[128,83532,83172],{"class":134},[128,83534,83433],{"class":138},[128,83536,5308],{"class":134},[128,83538,83497],{"class":166},[128,83540,180],{"class":138},[128,83542,83543],{"class":130,"line":36901},[128,83544,2014],{"class":138},[128,83546,83547],{"class":130,"line":36921},[128,83548,83549],{"class":3814},"        \u002F\u002F 渲染函数\n",[128,83551,83552,83554],{"class":130,"line":36927},[128,83553,73783],{"class":199},[128,83555,55794],{"class":138},[128,83557,83558],{"class":130,"line":36933},[128,83559,55780],{"class":138},[128,83561,83562],{"class":130,"line":36939},[128,83563,160],{"emptyLinePlaceholder":159},[128,83565,83566],{"class":130,"line":36956},[128,83567,917],{"class":138},[128,83569,83570,83572,83574],{"class":130,"line":36962},[128,83571,55799],{"class":138},[128,83573,55196],{"class":54685},[128,83575,54692],{"class":138},[128,83577,83578,83580,83582],{"class":130,"line":36968},[128,83579,55168],{"class":138},[128,83581,55183],{"class":54685},[128,83583,54692],{"class":138},[128,83585,83586],{"class":130,"line":36974},[128,83587,160],{"emptyLinePlaceholder":159},[128,83589,83590,83592,83594],{"class":130,"line":36980},[128,83591,55168],{"class":138},[128,83593,54020],{"class":54685},[128,83595,54692],{"class":138},[14,83597,83599],{"id":83598},"_410-深入了解对象","4.10 深入了解对象",[72,83601,83603],{"id":83602},"_4101-创建对象","4.10.1 创建对象",[19,83605,83606],{},[5074,83607],{"alt":112,"src":83608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,83610,83611],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[72,83613,83615],{"id":83614},"_4102-构造函数","4.10.2 构造函数",[19,83617,83618,83621],{},[3903,83619,83620],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,83623,83624,83627],{},[3903,83625,83626],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[106,83629,83631],{"className":54018,"code":83630,"language":54020,"meta":112,"style":112},"\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",[114,83632,83633,83641,83646,83667,83680,83692,83704,83708,83713,83740,83745,83772],{"__ignoreMap":112},[128,83634,83635,83637,83639],{"class":130,"line":131},[128,83636,4657],{"class":138},[128,83638,55196],{"class":54685},[128,83640,54692],{"class":138},[128,83642,83643],{"class":130,"line":142},[128,83644,83645],{"class":3814},"\u002F\u002F例：\n",[128,83647,83648,83650,83653,83655,83657,83659,83661,83663,83665],{"class":130,"line":156},[128,83649,57830],{"class":134},[128,83651,83652],{"class":199}," Pig",[128,83654,253],{"class":138},[128,83656,2773],{"class":266},[128,83658,4128],{"class":138},[128,83660,73596],{"class":266},[128,83662,4128],{"class":138},[128,83664,73613],{"class":266},[128,83666,15968],{"class":138},[128,83668,83669,83672,83675,83677],{"class":130,"line":163},[128,83670,83671],{"class":166},"    this",[128,83673,83674],{"class":138},".name",[128,83676,270],{"class":134},[128,83678,83679],{"class":138},"name\n",[128,83681,83682,83684,83687,83689],{"class":130,"line":183},[128,83683,83671],{"class":166},[128,83685,83686],{"class":138},".age",[128,83688,270],{"class":134},[128,83690,83691],{"class":138},"age\n",[128,83693,83694,83696,83699,83701],{"class":130,"line":188},[128,83695,83671],{"class":166},[128,83697,83698],{"class":138},".gender",[128,83700,270],{"class":134},[128,83702,83703],{"class":138},"gender    \n",[128,83705,83706],{"class":130,"line":193},[128,83707,2694],{"class":138},[128,83709,83710],{"class":130,"line":206},[128,83711,83712],{"class":3814},"\u002F\u002F创建佩奇对象\n",[128,83714,83715,83717,83720,83722,83724,83726,83729,83731,83733,83735,83738],{"class":130,"line":221},[128,83716,10349],{"class":134},[128,83718,83719],{"class":166}," Peppa",[128,83721,15244],{"class":134},[128,83723,83652],{"class":199},[128,83725,253],{"class":138},[128,83727,83728],{"class":176},"'佩奇'",[128,83730,4128],{"class":138},[128,83732,4094],{"class":166},[128,83734,4128],{"class":138},[128,83736,83737],{"class":176},"'女'",[128,83739,180],{"class":138},[128,83741,83742],{"class":130,"line":230},[128,83743,83744],{"class":3814},"\u002F\u002F创建乔治对象\n",[128,83746,83747,83749,83752,83754,83756,83758,83761,83763,83765,83767,83770],{"class":130,"line":235},[128,83748,10349],{"class":134},[128,83750,83751],{"class":166}," George",[128,83753,15244],{"class":134},[128,83755,83652],{"class":199},[128,83757,253],{"class":138},[128,83759,83760],{"class":176},"'乔治'",[128,83762,4128],{"class":138},[128,83764,3827],{"class":166},[128,83766,4128],{"class":138},[128,83768,83769],{"class":176},"'男'",[128,83771,180],{"class":138},[128,83773,83774,83776,83778],{"class":130,"line":244},[128,83775,55168],{"class":138},[128,83777,55196],{"class":54685},[128,83779,54692],{"class":138},[19,83781,83782],{},[5074,83783],{"alt":112,"src":83784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,83786,83787],{},[5074,83788],{"alt":112,"src":83789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,83791,83792],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,83794,83795],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,83797,83798],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,83800,83801],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,83803,83804],{},"这里用等号是因为：对象.属性=值",[19,83806,83807],{},"①利用对象字面量创建对象",[19,83809,83810],{},"const o={",[19,83812,83813],{},"name:'pink'",[19,83815,83816],{},"} ②利用new Object创建对象",[19,83818,83819],{},"const o=new Object({name:'pink'})",[19,83821,83822],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,83824,83825],{},"构造函数创建对象的执行过程：",[19,83827,83828],{},[5074,83829],{"alt":112,"src":83830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[72,83832,83834],{"id":83833},"_4103-实例成员","4.10.3 实例成员",[19,83836,83837],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[26,83839,83840,83843,83846],{},[29,83841,83842],{},"实例对象的属性和方法即为实例成员",[29,83844,83845],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[29,83847,83848],{},"构造函数创建的实例对象彼此独立互不影响",[72,83850,83852],{"id":83851},"_4104-静态成员","4.10.4 静态成员",[19,83854,83855],{},[5074,83856],{"alt":112,"src":83857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,83859,83860],{},"静态成员有Date.now() Math.PI Math.random()",[19,83862,83863],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,83865,83866],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,83868,83869],{},"function Pig(name) n {",[19,83871,83872],{},"this.name=name",[19,83874,1453],{},[19,83876,83877],{},"Pig.eyes=2",[19,83879,83880],{},"Pig.sayHai=function () { console.log(this) }",[19,83882,83883],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,83885,83886],{},"console.log(Pig.eyes) \u002F\u002F2",[19,83888,14859],{},[26,83890,83891,83894,83897,83900,83903],{},[29,83892,83893],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[29,83895,83896],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[29,83898,83899],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[29,83901,83902],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[29,83904,83905],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,83907,83908],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[72,83910,83912],{"id":83911},"_4105-内置构造函数","4.10.5 内置构造函数",[19,83914,83915],{},"内置构造函数包含：",[19,83917,83918],{},[5074,83919],{"alt":112,"src":83920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,83922,83923],{},[5074,83924],{"alt":112,"src":83925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,83927,83928],{},"这些基本数据类型，js对他们进行了包装",[55196,83930,83931],{},"\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",[25485,83933,83935],{"id":83934},"_41051-object","4.10.5.1 Object",[19,83937,83938],{},"Object 是内置的构造函数，用于创建普通对象",[19,83940,83941],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[106,83943,83945],{"className":54018,"code":83944,"language":54020,"meta":112,"style":112},"const user=new Object({name:'小明',age:15})\n",[114,83946,83947],{"__ignoreMap":112},[128,83948,83949],{"class":130,"line":131},[128,83950,83944],{"class":138},[19,83952,83953],{},"三个常用的静态方法：",[26397,83955,83957],{"id":83956},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,83959,83960],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,83962,83963],{},[5074,83964],{"alt":112,"src":83965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,83967,83968],{},[5074,83969],{"alt":112,"src":83970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[106,83972,83974],{"className":56449,"code":83973,"language":56451,"meta":112,"style":112},"\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",[114,83975,83976,83984,83992,83997,84002,84007,84012,84017,84022,84030],{"__ignoreMap":112},[128,83977,83978,83980,83982],{"class":130,"line":131},[128,83979,4657],{"class":138},[128,83981,55183],{"class":54685},[128,83983,54692],{"class":138},[128,83985,83986,83988,83990],{"class":130,"line":142},[128,83987,55526],{"class":138},[128,83989,55196],{"class":54685},[128,83991,54692],{"class":138},[128,83993,83994],{"class":130,"line":156},[128,83995,83996],{"class":138},"    const o = { name: 'pink', age: 6 }\n",[128,83998,83999],{"class":130,"line":163},[128,84000,84001],{"class":138},"    \u002F\u002F 获得所有属性名\n",[128,84003,84004],{"class":130,"line":183},[128,84005,84006],{"class":138},"    const arr = Object.keys(o)\n",[128,84008,84009],{"class":130,"line":188},[128,84010,84011],{"class":138},"    console.log(arr)\n",[128,84013,84014],{"class":130,"line":193},[128,84015,84016],{"class":138},"    \u002F\u002F 获得所有属性值\n",[128,84018,84019],{"class":130,"line":206},[128,84020,84021],{"class":138},"    console.log(Object.values(o))\n",[128,84023,84024,84026,84028],{"class":130,"line":221},[128,84025,55799],{"class":138},[128,84027,55196],{"class":54685},[128,84029,54692],{"class":138},[128,84031,84032,84034,84036],{"class":130,"line":230},[128,84033,55168],{"class":138},[128,84035,55183],{"class":54685},[128,84037,54692],{"class":138},[26397,84039,84041],{"id":84040},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,84043,84044],{},"Object.assign(oo,o)",[19,84046,84047],{},"后的东西添加给前 是追加",[19,84049,84050],{},[5074,84051],{"alt":112,"src":84052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,84054,84055],{},[5074,84056],{"alt":112,"src":84057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[106,84059,84061],{"className":56449,"code":84060,"language":56451,"meta":112,"style":112},"\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",[114,84062,84063,84071,84079,84083,84087,84091,84095,84099,84103,84108,84113,84118,84123,84128,84136],{"__ignoreMap":112},[128,84064,84065,84067,84069],{"class":130,"line":131},[128,84066,4657],{"class":138},[128,84068,55183],{"class":54685},[128,84070,54692],{"class":138},[128,84072,84073,84075,84077],{"class":130,"line":142},[128,84074,55526],{"class":138},[128,84076,55196],{"class":54685},[128,84078,54692],{"class":138},[128,84080,84081],{"class":130,"line":156},[128,84082,83996],{"class":138},[128,84084,84085],{"class":130,"line":163},[128,84086,84001],{"class":138},[128,84088,84089],{"class":130,"line":183},[128,84090,84006],{"class":138},[128,84092,84093],{"class":130,"line":188},[128,84094,84011],{"class":138},[128,84096,84097],{"class":130,"line":193},[128,84098,84016],{"class":138},[128,84100,84101],{"class":130,"line":206},[128,84102,84021],{"class":138},[128,84104,84105],{"class":130,"line":221},[128,84106,84107],{"class":138},"    const oo = {}\n",[128,84109,84110],{"class":130,"line":230},[128,84111,84112],{"class":138},"    Object.assign(oo, o)\n",[128,84114,84115],{"class":130,"line":235},[128,84116,84117],{"class":138},"    console.log(oo)\n",[128,84119,84120],{"class":130,"line":244},[128,84121,84122],{"class":138},"    Object.assign(o, { gender: '女' })\n",[128,84124,84125],{"class":130,"line":287},[128,84126,84127],{"class":138},"    console.log(o)\n",[128,84129,84130,84132,84134],{"class":130,"line":301},[128,84131,55799],{"class":138},[128,84133,55196],{"class":54685},[128,84135,54692],{"class":138},[128,84137,84138,84140,84142],{"class":130,"line":310},[128,84139,55168],{"class":138},[128,84141,55183],{"class":54685},[128,84143,54692],{"class":138},[19,84145,84146],{},[5074,84147],{"alt":112,"src":84148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[25485,84150,84152],{"id":84151},"_41052-array","4.10.5.2 Array",[19,84154,84155],{},"Array 是内置的构造函数，用于创建数组",[19,84157,84158],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[106,84160,84162],{"className":54018,"code":84161,"language":54020,"meta":112,"style":112},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[114,84163,84164,84169],{"__ignoreMap":112},[128,84165,84166],{"class":130,"line":131},[128,84167,84168],{"class":138},"const arr=new Array(3,5)\n",[128,84170,84171],{"class":130,"line":142},[128,84172,84173],{"class":138},"console.log(arr)  \u002F\u002F[3,5]\n",[19,84175,84176],{},"Array的实例方法，这个方法是实例成员",[19,84178,84179],{},[5074,84180],{"alt":112,"src":84181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[26397,84183,84185],{"id":84184},"_410521-reduce","4.10.5.2.1 reduce",[19,84187,84188],{},[5074,84189],{"alt":112,"src":84190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[106,84192,84194],{"className":56449,"code":84193,"language":56451,"meta":112,"style":112},"\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",[114,84195,84196,84204,84212,84217,84222,84227,84232,84236,84241,84246,84251,84255,84260,84265,84269,84274,84279,84284,84292],{"__ignoreMap":112},[128,84197,84198,84200,84202],{"class":130,"line":131},[128,84199,4657],{"class":138},[128,84201,55183],{"class":54685},[128,84203,54692],{"class":138},[128,84205,84206,84208,84210],{"class":130,"line":142},[128,84207,55526],{"class":138},[128,84209,55196],{"class":54685},[128,84211,54692],{"class":138},[128,84213,84214],{"class":130,"line":156},[128,84215,84216],{"class":138},"    const arr = [1, 5, 8]\n",[128,84218,84219],{"class":130,"line":163},[128,84220,84221],{"class":138},"    \u002F\u002F 1.没有初始值\n",[128,84223,84224],{"class":130,"line":183},[128,84225,84226],{"class":138},"    const total = arr.reduce(function (prev, current) {\n",[128,84228,84229],{"class":130,"line":188},[128,84230,84231],{"class":138},"      return prev + current\n",[128,84233,84234],{"class":130,"line":193},[128,84235,917],{"class":138},[128,84237,84238],{"class":130,"line":206},[128,84239,84240],{"class":138},"    console.log(total)   \u002F\u002F14\n",[128,84242,84243],{"class":130,"line":221},[128,84244,84245],{"class":138},"    \u002F\u002F 2.有初始值\n",[128,84247,84248],{"class":130,"line":230},[128,84249,84250],{"class":138},"    const total1 = arr.reduce(function (prev, current) {\n",[128,84252,84253],{"class":130,"line":235},[128,84254,84231],{"class":138},[128,84256,84257],{"class":130,"line":244},[128,84258,84259],{"class":138},"    }, 10)\n",[128,84261,84262],{"class":130,"line":287},[128,84263,84264],{"class":138},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[128,84266,84267],{"class":130,"line":301},[128,84268,160],{"emptyLinePlaceholder":159},[128,84270,84271],{"class":130,"line":310},[128,84272,84273],{"class":138},"    \u002F\u002F 3.箭头函数写法\n",[128,84275,84276],{"class":130,"line":323},[128,84277,84278],{"class":138},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[128,84280,84281],{"class":130,"line":330},[128,84282,84283],{"class":138},"    console.log(total2)   \u002F\u002F24\n",[128,84285,84286,84288,84290],{"class":130,"line":335},[128,84287,55799],{"class":138},[128,84289,55196],{"class":54685},[128,84291,54692],{"class":138},[128,84293,84294,84296,84298],{"class":130,"line":340},[128,84295,55168],{"class":138},[128,84297,55183],{"class":54685},[128,84299,54692],{"class":138},[19,84301,84302],{},"执行过程：",[26,84304,84305,84308,84311],{},[29,84306,84307],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[29,84309,84310],{},"每一次循环，把返回值给作为下一次循环的上一次值",[29,84312,84313],{},"如果有起始值，则起始值作为上一次值",[106,84315,84317],{"className":56449,"code":84316,"language":56451,"meta":112,"style":112},"\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",[114,84318,84319,84327,84335,84339,84343,84347,84351,84355,84359,84364,84369,84374,84379,84384,84388,84392,84396,84400,84404,84408,84413,84417,84422,84426,84431,84436,84440,84444,84448,84456],{"__ignoreMap":112},[128,84320,84321,84323,84325],{"class":130,"line":131},[128,84322,4657],{"class":138},[128,84324,55183],{"class":54685},[128,84326,54692],{"class":138},[128,84328,84329,84331,84333],{"class":130,"line":142},[128,84330,55526],{"class":138},[128,84332,55196],{"class":54685},[128,84334,54692],{"class":138},[128,84336,84337],{"class":130,"line":156},[128,84338,84216],{"class":138},[128,84340,84341],{"class":130,"line":163},[128,84342,84221],{"class":138},[128,84344,84345],{"class":130,"line":183},[128,84346,84226],{"class":138},[128,84348,84349],{"class":130,"line":188},[128,84350,84231],{"class":138},[128,84352,84353],{"class":130,"line":193},[128,84354,917],{"class":138},[128,84356,84357],{"class":130,"line":206},[128,84358,84240],{"class":138},[128,84360,84361],{"class":130,"line":221},[128,84362,84363],{"class":138},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[128,84365,84366],{"class":130,"line":230},[128,84367,84368],{"class":138},"    \u002F\u002F     1              5                    6\n",[128,84370,84371],{"class":130,"line":235},[128,84372,84373],{"class":138},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[128,84375,84376],{"class":130,"line":244},[128,84377,84378],{"class":138},"    \u002F\u002F     6              8                    14\n",[128,84380,84381],{"class":130,"line":287},[128,84382,84383],{"class":138},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[128,84385,84386],{"class":130,"line":301},[128,84387,84245],{"class":138},[128,84389,84390],{"class":130,"line":310},[128,84391,84250],{"class":138},[128,84393,84394],{"class":130,"line":323},[128,84395,84231],{"class":138},[128,84397,84398],{"class":130,"line":330},[128,84399,84259],{"class":138},[128,84401,84402],{"class":130,"line":335},[128,84403,84264],{"class":138},[128,84405,84406],{"class":130,"line":340},[128,84407,84363],{"class":138},[128,84409,84410],{"class":130,"line":351},[128,84411,84412],{"class":138},"    \u002F\u002F     10             1                     11\n",[128,84414,84415],{"class":130,"line":384},[128,84416,84373],{"class":138},[128,84418,84419],{"class":130,"line":414},[128,84420,84421],{"class":138},"    \u002F\u002F     11             5                    16\n",[128,84423,84424],{"class":130,"line":419},[128,84425,84373],{"class":138},[128,84427,84428],{"class":130,"line":424},[128,84429,84430],{"class":138},"    \u002F\u002F     16             8                    24\n",[128,84432,84433],{"class":130,"line":434},[128,84434,84435],{"class":138},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[128,84437,84438],{"class":130,"line":447},[128,84439,84273],{"class":138},[128,84441,84442],{"class":130,"line":459},[128,84443,84278],{"class":138},[128,84445,84446],{"class":130,"line":471},[128,84447,84283],{"class":138},[128,84449,84450,84452,84454],{"class":130,"line":483},[128,84451,55799],{"class":138},[128,84453,55196],{"class":54685},[128,84455,54692],{"class":138},[128,84457,84458,84460,84462],{"class":130,"line":495},[128,84459,55168],{"class":138},[128,84461,55183],{"class":54685},[128,84463,54692],{"class":138},[26397,84465,84467],{"id":84466},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,84469,84470],{},[5074,84471],{"alt":112,"src":84472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[106,84474,84476],{"className":56449,"code":84475,"language":56451,"meta":112,"style":112},"\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",[114,84477,84478,84486,84494,84499,84504,84509,84514,84518,84523,84528,84533,84538,84543,84548,84552,84557,84561,84566,84574],{"__ignoreMap":112},[128,84479,84480,84482,84484],{"class":130,"line":131},[128,84481,4657],{"class":138},[128,84483,55183],{"class":54685},[128,84485,54692],{"class":138},[128,84487,84488,84490,84492],{"class":130,"line":142},[128,84489,55526],{"class":138},[128,84491,55196],{"class":54685},[128,84493,54692],{"class":138},[128,84495,84496],{"class":130,"line":156},[128,84497,84498],{"class":138},"    const arr = [\n",[128,84500,84501],{"class":130,"line":163},[128,84502,84503],{"class":138},"      { name: '张三', salary: 10000 },\n",[128,84505,84506],{"class":130,"line":183},[128,84507,84508],{"class":138},"      { name: '李四', salary: 10000 },\n",[128,84510,84511],{"class":130,"line":188},[128,84512,84513],{"class":138},"      { name: '王五', salary: 10000 }\n",[128,84515,84516],{"class":130,"line":193},[128,84517,56491],{"class":138},[128,84519,84520],{"class":130,"line":206},[128,84521,84522],{"class":138},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[128,84524,84525],{"class":130,"line":221},[128,84526,84527],{"class":138},"    \u002F\u002F prev是累计值\n",[128,84529,84530],{"class":130,"line":230},[128,84531,84532],{"class":138},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[128,84534,84535],{"class":130,"line":235},[128,84536,84537],{"class":138},"    console.log(total)\n",[128,84539,84540],{"class":130,"line":244},[128,84541,84542],{"class":138},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[128,84544,84545],{"class":130,"line":287},[128,84546,84547],{"class":138},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[128,84549,84550],{"class":130,"line":301},[128,84551,84542],{"class":138},[128,84553,84554],{"class":130,"line":310},[128,84555,84556],{"class":138},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[128,84558,84559],{"class":130,"line":323},[128,84560,84542],{"class":138},[128,84562,84563],{"class":130,"line":330},[128,84564,84565],{"class":138},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[128,84567,84568,84570,84572],{"class":130,"line":335},[128,84569,55799],{"class":138},[128,84571,55196],{"class":54685},[128,84573,54692],{"class":138},[128,84575,84576,84578,84580],{"class":130,"line":340},[128,84577,55168],{"class":138},[128,84579,55183],{"class":54685},[128,84581,54692],{"class":138},[26397,84583,84585],{"id":84584},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,84587,84588],{},[5074,84589],{"alt":112,"src":84590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,84592,84593],{},[5074,84594],{"alt":112,"src":84595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[26,84597,84598],{},[29,84599,84600],{},"find()",[19,84602,84603],{},"循环查找，找到第一个就ok",[19,84605,84606],{},[3989,84607,84610],{"href":84608,"rel":84609},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[27352],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[106,84612,84614],{"className":54018,"code":84613,"language":54020,"meta":112,"style":112},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[114,84615,84616,84621,84626],{"__ignoreMap":112},[128,84617,84618],{"class":130,"line":131},[128,84619,84620],{"class":138},"const array1 = [5, 12, 8, 130, 44]\n",[128,84622,84623],{"class":130,"line":142},[128,84624,84625],{"class":138},"const found = array1.find((element) => element > 10)\n",[128,84627,84628],{"class":130,"line":156},[128,84629,84630],{"class":138},"console.log(found)  \u002F\u002F12\n",[19,84632,84633,84635,84636,84641,84642,84645,84646,84648,84649,84654,84655,84657,84658,84660,84661,84663,84664],{},[114,84634,84600],{}," 方法是一个",[3989,84637,84640],{"href":84638,"rel":84639},"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",[27352],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[114,84643,84644],{},"callbackFn"," 函数，直到 ",[114,84647,84644],{}," 返回一个",[3989,84650,84653],{"href":84651,"rel":84652},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[27352],"真值","。然后 ",[114,84656,84600],{}," 返回该元素并停止迭代数组。如果 ",[114,84659,84644],{}," 从未返回真值，则 ",[114,84662,84600],{}," 返回 ",[114,84665,84666],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[106,84668,84670],{"className":56449,"code":84669,"language":56451,"meta":112,"style":112},"\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",[114,84671,84672,84680,84688,84693,84698,84703,84707,84712,84717,84721,84726,84731,84735,84739,84744,84749,84753,84757,84762,84767,84772,84777,84782,84786,84791,84796,84801,84806,84810,84815,84823],{"__ignoreMap":112},[128,84673,84674,84676,84678],{"class":130,"line":131},[128,84675,4657],{"class":138},[128,84677,55183],{"class":54685},[128,84679,54692],{"class":138},[128,84681,84682,84684,84686],{"class":130,"line":142},[128,84683,55526],{"class":138},[128,84685,55196],{"class":54685},[128,84687,54692],{"class":138},[128,84689,84690],{"class":130,"line":156},[128,84691,84692],{"class":138},"    const arr = ['red', 'blue', 'green']\n",[128,84694,84695],{"class":130,"line":163},[128,84696,84697],{"class":138},"    const found = arr.find(item => item === 'pink')\n",[128,84699,84700],{"class":130,"line":183},[128,84701,84702],{"class":138},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[128,84704,84705],{"class":130,"line":188},[128,84706,160],{"emptyLinePlaceholder":159},[128,84708,84709],{"class":130,"line":193},[128,84710,84711],{"class":138},"    \u002F\u002F 使用场景，用于查找数据\n",[128,84713,84714],{"class":130,"line":206},[128,84715,84716],{"class":138},"    const arr1 = [\n",[128,84718,84719],{"class":130,"line":221},[128,84720,82760],{"class":138},[128,84722,84723],{"class":130,"line":230},[128,84724,84725],{"class":138},"        name: '小米',\n",[128,84727,84728],{"class":130,"line":235},[128,84729,84730],{"class":138},"        price: 1999\n",[128,84732,84733],{"class":130,"line":244},[128,84734,81266],{"class":138},[128,84736,84737],{"class":130,"line":287},[128,84738,82760],{"class":138},[128,84740,84741],{"class":130,"line":301},[128,84742,84743],{"class":138},"        name: '华为',\n",[128,84745,84746],{"class":130,"line":310},[128,84747,84748],{"class":138},"        price: 3999\n",[128,84750,84751],{"class":130,"line":323},[128,84752,55780],{"class":138},[128,84754,84755],{"class":130,"line":330},[128,84756,56491],{"class":138},[128,84758,84759],{"class":130,"line":335},[128,84760,84761],{"class":138},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[128,84763,84764],{"class":130,"line":340},[128,84765,84766],{"class":138},"    \u002F\u002F const found1 = arr1.find(item => {\n",[128,84768,84769],{"class":130,"line":351},[128,84770,84771],{"class":138},"    \u002F\u002F   if (item.name === '小米') {\n",[128,84773,84774],{"class":130,"line":384},[128,84775,84776],{"class":138},"    \u002F\u002F     return item\n",[128,84778,84779],{"class":130,"line":414},[128,84780,84781],{"class":138},"    \u002F\u002F   }\n",[128,84783,84784],{"class":130,"line":419},[128,84785,66668],{"class":138},[128,84787,84788],{"class":130,"line":424},[128,84789,84790],{"class":138},"    \u002F\u002F 另一种写法\n",[128,84792,84793],{"class":130,"line":434},[128,84794,84795],{"class":138},"    const found1 = arr1.find(item => {\n",[128,84797,84798],{"class":130,"line":447},[128,84799,84800],{"class":138},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[128,84802,84803],{"class":130,"line":459},[128,84804,84805],{"class":138},"      return item.name = '小米'\n",[128,84807,84808],{"class":130,"line":471},[128,84809,917],{"class":138},[128,84811,84812],{"class":130,"line":483},[128,84813,84814],{"class":138},"    console.log(found1)\n",[128,84816,84817,84819,84821],{"class":130,"line":495},[128,84818,55799],{"class":138},[128,84820,55196],{"class":54685},[128,84822,54692],{"class":138},[128,84824,84825,84827,84829],{"class":130,"line":507},[128,84826,55168],{"class":138},[128,84828,55183],{"class":54685},[128,84830,54692],{"class":138},[19,84832,84833],{},[5074,84834],{"alt":112,"src":84835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,84837,84838],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[26,84840,84841],{"start":142},[29,84842,84843],{},"every()返回的是布尔值",[19,84845,84846],{},[3989,84847,84850],{"href":84848,"rel":84849},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[27352],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,84852,84853],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,84855,84856],{},"some是只有有一个就没问题",[19,84858,84859],{},"every是必须全是才行",[106,84861,84865],{"className":84862,"code":84863,"language":84864,"meta":112,"style":112},"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",[114,84866,84867,84883,84897,84901,84910],{"__ignoreMap":112},[128,84868,84869,84871,84874,84876,84878,84881],{"class":130,"line":131},[128,84870,57830],{"class":134},[128,84872,84873],{"class":138}," isBigEnough(element, ",[128,84875,77432],{"class":134},[128,84877,258],{"class":138},[128,84879,84880],{"class":134},"array",[128,84882,15968],{"class":138},[128,84884,84885,84888,84891,84893,84895],{"class":130,"line":142},[128,84886,84887],{"class":134},"  return",[128,84889,84890],{"class":138}," element ",[128,84892,5308],{"class":134},[128,84894,5625],{"class":166},[128,84896,4905],{"class":138},[128,84898,84899],{"class":130,"line":156},[128,84900,2694],{"class":138},[128,84902,84903,84906,84908],{"class":130,"line":163},[128,84904,84905],{"class":138},"[12, 5, 8, 130, 44].every(isBigEnough); ",[128,84907,36727],{"class":134},[128,84909,57897],{"class":138},[128,84911,84912,84915,84917],{"class":130,"line":183},[128,84913,84914],{"class":138},"[12, 54, 18, 130, 44].every(isBigEnough); ",[128,84916,36727],{"class":134},[128,84918,61320],{"class":138},[106,84920,84922],{"className":56449,"code":84921,"language":56451,"meta":112,"style":112},"\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",[114,84923,84924,84932,84940,84945,84949,84954,84959,84967],{"__ignoreMap":112},[128,84925,84926,84928,84930],{"class":130,"line":131},[128,84927,4657],{"class":138},[128,84929,55183],{"class":54685},[128,84931,54692],{"class":138},[128,84933,84934,84936,84938],{"class":130,"line":142},[128,84935,55526],{"class":138},[128,84937,55196],{"class":54685},[128,84939,54692],{"class":138},[128,84941,84942],{"class":130,"line":156},[128,84943,84944],{"class":138},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[128,84946,84947],{"class":130,"line":163},[128,84948,81696],{"class":138},[128,84950,84951],{"class":130,"line":183},[128,84952,84953],{"class":138},"    const flag = arr.every(item => item >= 10)\n",[128,84955,84956],{"class":130,"line":188},[128,84957,84958],{"class":138},"    console.log(flag)    \u002F\u002Ftrue\n",[128,84960,84961,84963,84965],{"class":130,"line":193},[128,84962,55799],{"class":138},[128,84964,55196],{"class":54685},[128,84966,54692],{"class":138},[128,84968,84969,84971,84973],{"class":130,"line":206},[128,84970,55168],{"class":138},[128,84972,55183],{"class":54685},[128,84974,54692],{"class":138},[106,84976,84978],{"className":56449,"code":84977,"language":56451,"meta":112,"style":112},"\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",[114,84979,84980,84988,84996,85000,85005,85010,85015,85023],{"__ignoreMap":112},[128,84981,84982,84984,84986],{"class":130,"line":131},[128,84983,4657],{"class":138},[128,84985,55183],{"class":54685},[128,84987,54692],{"class":138},[128,84989,84990,84992,84994],{"class":130,"line":142},[128,84991,55526],{"class":138},[128,84993,55196],{"class":54685},[128,84995,54692],{"class":138},[128,84997,84998],{"class":130,"line":156},[128,84999,84944],{"class":138},[128,85001,85002],{"class":130,"line":163},[128,85003,85004],{"class":138},"    const arr = [10, 0, 5]\n",[128,85006,85007],{"class":130,"line":183},[128,85008,85009],{"class":138},"    const flag = arr.some(item => item >= 10)\n",[128,85011,85012],{"class":130,"line":188},[128,85013,85014],{"class":138},"    console.log(flag)   \u002F\u002Ftrue\n",[128,85016,85017,85019,85021],{"class":130,"line":193},[128,85018,55799],{"class":138},[128,85020,55196],{"class":54685},[128,85022,54692],{"class":138},[128,85024,85025,85027,85029],{"class":130,"line":206},[128,85026,55168],{"class":138},[128,85028,55183],{"class":54685},[128,85030,54692],{"class":138},[26397,85032,85034],{"id":85033},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,85036,85037],{},[5074,85038],{"alt":112,"src":85039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[106,85041,85043],{"className":54018,"code":85042,"language":54020,"meta":112,"style":112},"\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",[114,85044,85045,85055,85069,85073,85081,85095,85115,85127,85135,85142,85154,85166,85178,85190,85200,85210,85214,85222,85230,85234,85242,85254,85262,85284,85289,85294,85327,85335,85343,85347],{"__ignoreMap":112},[128,85046,85047,85049,85051,85053],{"class":130,"line":131},[128,85048,54682],{"class":138},[128,85050,54686],{"class":54685},[128,85052,54689],{"class":199},[128,85054,54692],{"class":138},[128,85056,85057,85059,85061,85063,85065,85067],{"class":130,"line":142},[128,85058,4657],{"class":138},[128,85060,54020],{"class":54685},[128,85062,54701],{"class":199},[128,85064,270],{"class":138},[128,85066,54706],{"class":176},[128,85068,54692],{"class":138},[128,85070,85071],{"class":130,"line":156},[128,85072,160],{"emptyLinePlaceholder":159},[128,85074,85075,85077,85079],{"class":130,"line":163},[128,85076,4657],{"class":138},[128,85078,54719],{"class":54685},[128,85080,54692],{"class":138},[128,85082,85083,85085,85087,85089,85091,85093],{"class":130,"line":183},[128,85084,55526],{"class":138},[128,85086,54729],{"class":54685},[128,85088,54732],{"class":199},[128,85090,270],{"class":138},[128,85092,54737],{"class":176},[128,85094,54692],{"class":138},[128,85096,85097,85099,85101,85103,85105,85107,85109,85111,85113],{"class":130,"line":188},[128,85098,55526],{"class":138},[128,85100,54729],{"class":54685},[128,85102,18442],{"class":199},[128,85104,270],{"class":138},[128,85106,54776],{"class":176},[128,85108,54756],{"class":199},[128,85110,270],{"class":138},[128,85112,54783],{"class":176},[128,85114,54692],{"class":138},[128,85116,85117,85119,85121,85123,85125],{"class":130,"line":193},[128,85118,55526],{"class":138},[128,85120,2752],{"class":54685},[128,85122,54794],{"class":138},[128,85124,2752],{"class":54685},[128,85126,54692],{"class":138},[128,85128,85129,85131,85133],{"class":130,"line":206},[128,85130,55526],{"class":138},[128,85132,3659],{"class":54685},[128,85134,54692],{"class":138},[128,85136,85137,85140],{"class":130,"line":221},[128,85138,85139],{"class":54685},"    div",[128,85141,1959],{"class":138},[128,85143,85144,85146,85148,85150,85152],{"class":130,"line":230},[128,85145,58152],{"class":166},[128,85147,1967],{"class":138},[128,85149,3143],{"class":166},[128,85151,54875],{"class":134},[128,85153,4905],{"class":138},[128,85155,85156,85158,85160,85162,85164],{"class":130,"line":235},[128,85157,58166],{"class":166},[128,85159,1967],{"class":138},[128,85161,4151],{"class":166},[128,85163,54875],{"class":134},[128,85165,4905],{"class":138},[128,85167,85168,85170,85172,85174,85176],{"class":130,"line":244},[128,85169,60739],{"class":166},[128,85171,1967],{"class":138},[128,85173,4151],{"class":166},[128,85175,54875],{"class":134},[128,85177,4905],{"class":138},[128,85179,85180,85182,85184,85186,85188],{"class":130,"line":287},[128,85181,68511],{"class":166},[128,85183,1967],{"class":138},[128,85185,4247],{"class":166},[128,85187,54875],{"class":134},[128,85189,4905],{"class":138},[128,85191,85192,85194,85196,85198],{"class":130,"line":301},[128,85193,60666],{"class":166},[128,85195,1967],{"class":138},[128,85197,54975],{"class":166},[128,85199,4905],{"class":138},[128,85201,85202,85204,85206,85208],{"class":130,"line":310},[128,85203,58265],{"class":166},[128,85205,1967],{"class":138},[128,85207,55028],{"class":166},[128,85209,4905],{"class":138},[128,85211,85212],{"class":130,"line":323},[128,85213,5773],{"class":138},[128,85215,85216,85218,85220],{"class":130,"line":330},[128,85217,55799],{"class":138},[128,85219,3659],{"class":54685},[128,85221,54692],{"class":138},[128,85223,85224,85226,85228],{"class":130,"line":335},[128,85225,55168],{"class":138},[128,85227,54719],{"class":54685},[128,85229,54692],{"class":138},[128,85231,85232],{"class":130,"line":340},[128,85233,160],{"emptyLinePlaceholder":159},[128,85235,85236,85238,85240],{"class":130,"line":351},[128,85237,4657],{"class":138},[128,85239,55183],{"class":54685},[128,85241,54692],{"class":138},[128,85243,85244,85246,85248,85250,85252],{"class":130,"line":384},[128,85245,55526],{"class":138},[128,85247,54994],{"class":54685},[128,85249,58695],{"class":138},[128,85251,54994],{"class":54685},[128,85253,54692],{"class":138},[128,85255,85256,85258,85260],{"class":130,"line":414},[128,85257,55526],{"class":138},[128,85259,55196],{"class":54685},[128,85261,54692],{"class":138},[128,85263,85264,85266,85269,85271,85274,85277,85279,85282],{"class":130,"line":419},[128,85265,14748],{"class":134},[128,85267,85268],{"class":166}," spec",[128,85270,170],{"class":134},[128,85272,85273],{"class":138}," { size: ",[128,85275,85276],{"class":176},"'40cm*40cm'",[128,85278,58844],{"class":138},[128,85280,85281],{"class":176},"'黑色'",[128,85283,58984],{"class":138},[128,85285,85286],{"class":130,"line":424},[128,85287,85288],{"class":3814},"    \u002F\u002F const arr = Object.values(spec)\n",[128,85290,85291],{"class":130,"line":434},[128,85292,85293],{"class":3814},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[128,85295,85296,85298,85300,85302,85305,85307,85309,85312,85315,85318,85320,85322,85325],{"class":130,"line":447},[128,85297,55789],{"class":138},[128,85299,57780],{"class":199},[128,85301,253],{"class":138},[128,85303,85304],{"class":176},"'div'",[128,85306,77623],{"class":138},[128,85308,270],{"class":134},[128,85310,85311],{"class":138}," Object.",[128,85313,85314],{"class":199},"values",[128,85316,85317],{"class":138},"(spec).",[128,85319,77597],{"class":199},[128,85321,253],{"class":138},[128,85323,85324],{"class":176},"'\u002F'",[128,85326,180],{"class":138},[128,85328,85329,85331,85333],{"class":130,"line":459},[128,85330,55799],{"class":138},[128,85332,55196],{"class":54685},[128,85334,54692],{"class":138},[128,85336,85337,85339,85341],{"class":130,"line":471},[128,85338,55168],{"class":138},[128,85340,55183],{"class":54685},[128,85342,54692],{"class":138},[128,85344,85345],{"class":130,"line":483},[128,85346,160],{"emptyLinePlaceholder":159},[128,85348,85349,85351,85353],{"class":130,"line":495},[128,85350,55168],{"class":138},[128,85352,54020],{"class":54685},[128,85354,54692],{"class":138},[19,85356,85357],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[26397,85359,85361],{"id":85360},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,85363,85364],{},"静态方法，将伪数组转换为真数组",[19,85366,85367],{},[5074,85368],{"alt":112,"src":85369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[106,85371,85373],{"className":56449,"code":85372,"language":56451,"meta":112,"style":112},"\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",[114,85374,85375,85383,85391,85403,85415,85427,85435,85443,85448,85453,85458,85463,85471],{"__ignoreMap":112},[128,85376,85377,85379,85381],{"class":130,"line":131},[128,85378,4657],{"class":138},[128,85380,55183],{"class":54685},[128,85382,54692],{"class":138},[128,85384,85385,85387,85389],{"class":130,"line":142},[128,85386,55526],{"class":138},[128,85388,4752],{"class":54685},[128,85390,54692],{"class":138},[128,85392,85393,85395,85397,85399,85401],{"class":130,"line":156},[128,85394,54726],{"class":138},[128,85396,29],{"class":54685},[128,85398,58695],{"class":138},[128,85400,29],{"class":54685},[128,85402,54692],{"class":138},[128,85404,85405,85407,85409,85411,85413],{"class":130,"line":163},[128,85406,54726],{"class":138},[128,85408,29],{"class":54685},[128,85410,58695],{"class":138},[128,85412,29],{"class":54685},[128,85414,54692],{"class":138},[128,85416,85417,85419,85421,85423,85425],{"class":130,"line":183},[128,85418,54726],{"class":138},[128,85420,29],{"class":54685},[128,85422,58695],{"class":138},[128,85424,29],{"class":54685},[128,85426,54692],{"class":138},[128,85428,85429,85431,85433],{"class":130,"line":188},[128,85430,55799],{"class":138},[128,85432,4752],{"class":54685},[128,85434,54692],{"class":138},[128,85436,85437,85439,85441],{"class":130,"line":193},[128,85438,55526],{"class":138},[128,85440,55196],{"class":54685},[128,85442,54692],{"class":138},[128,85444,85445],{"class":130,"line":206},[128,85446,85447],{"class":138},"    const lis = document.querySelectorAll('li')\n",[128,85449,85450],{"class":130,"line":221},[128,85451,85452],{"class":138},"    const liss = Array.from(lis)\n",[128,85454,85455],{"class":130,"line":230},[128,85456,85457],{"class":138},"    liss.pop()\n",[128,85459,85460],{"class":130,"line":235},[128,85461,85462],{"class":138},"    console.log(liss)\n",[128,85464,85465,85467,85469],{"class":130,"line":244},[128,85466,55799],{"class":138},[128,85468,55196],{"class":54685},[128,85470,54692],{"class":138},[128,85472,85473,85475,85477],{"class":130,"line":287},[128,85474,55168],{"class":138},[128,85476,55183],{"class":54685},[128,85478,54692],{"class":138},[19,85480,85481],{},[5074,85482],{"alt":112,"src":85483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[25485,85485,85487],{"id":85486},"_41053-string","4.10.5.3 String",[19,85489,85490],{},[5074,85491],{"alt":112,"src":85492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[26397,85494,85496],{"id":85495},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[106,85498,85500],{"className":56449,"code":85499,"language":56451,"meta":112,"style":112},"\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",[114,85501,85502,85510,85518,85523,85528,85533,85537,85542,85547,85552,85560],{"__ignoreMap":112},[128,85503,85504,85506,85508],{"class":130,"line":131},[128,85505,4657],{"class":138},[128,85507,55183],{"class":54685},[128,85509,54692],{"class":138},[128,85511,85512,85514,85516],{"class":130,"line":142},[128,85513,55526],{"class":138},[128,85515,55196],{"class":54685},[128,85517,54692],{"class":138},[128,85519,85520],{"class":130,"line":156},[128,85521,85522],{"class":138},"    \u002F\u002F 把字符串转化为数组\n",[128,85524,85525],{"class":130,"line":163},[128,85526,85527],{"class":138},"    const str = 'pink,red'\n",[128,85529,85530],{"class":130,"line":183},[128,85531,85532],{"class":138},"    const arr = str.split(',')\n",[128,85534,85535],{"class":130,"line":188},[128,85536,84011],{"class":138},[128,85538,85539],{"class":130,"line":193},[128,85540,85541],{"class":138},"    const str1 = '2025-8-25'\n",[128,85543,85544],{"class":130,"line":206},[128,85545,85546],{"class":138},"    const arr1 = str1.split('-')\n",[128,85548,85549],{"class":130,"line":221},[128,85550,85551],{"class":138},"    console.log(arr1)\n",[128,85553,85554,85556,85558],{"class":130,"line":230},[128,85555,55799],{"class":138},[128,85557,55196],{"class":54685},[128,85559,54692],{"class":138},[128,85561,85562,85564,85566],{"class":130,"line":235},[128,85563,55168],{"class":138},[128,85565,55183],{"class":54685},[128,85567,54692],{"class":138},[26397,85569,85571],{"id":85570},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,85573,8743],{},[19,85575,85576],{},"substring(indexStart)",[19,85578,85579],{},"substring(indexStart, indexEnd)",[4752,85581,85582,85593,85605,85615],{},[29,85583,85584,85585,85588,85589,85592],{},"如果省略了 ",[114,85586,85587],{},"indexEnd","，则 ",[114,85590,85591],{},"substring()"," 提取字符直到字符串的末尾",[29,85594,85595,85596,85599,85600,85588,85602,85604],{},"如果 ",[114,85597,85598],{},"indexStart"," 等于 ",[114,85601,85587],{},[114,85603,85591],{}," 返回一个空字符串",[29,85606,85595,85607,85609,85610,85588,85612,85614],{},[114,85608,85598],{}," 大于 ",[114,85611,85587],{},[114,85613,85591],{}," 的效果就像交换了这两个参数一样",[29,85616,85617],{},"结束的索引号不包含想要截取的部分",[106,85619,85621],{"className":84862,"code":85620,"language":84864,"meta":112,"style":112},"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",[114,85622,85623,85635,85639,85673,85703,85707,85738,85742,85769,85799,85829,85833,85864],{"__ignoreMap":112},[128,85624,85625,85628,85630,85633],{"class":130,"line":131},[128,85626,85627],{"class":138},"const anyString ",[128,85629,270],{"class":134},[128,85631,85632],{"class":176}," \"Mozilla\"",[128,85634,4905],{"class":138},[128,85636,85637],{"class":130,"line":142},[128,85638,160],{"emptyLinePlaceholder":159},[128,85640,85641,85644,85646,85648,85650,85653,85655,85658,85660,85662,85664,85666,85668,85670],{"class":130,"line":156},[128,85642,85643],{"class":166},"console",[128,85645,4307],{"class":138},[128,85647,61627],{"class":166},[128,85649,253],{"class":138},[128,85651,85652],{"class":166},"anyString",[128,85654,4307],{"class":138},[128,85656,85657],{"class":166},"substring",[128,85659,253],{"class":138},[128,85661,2452],{"class":166},[128,85663,258],{"class":138},[128,85665,2592],{"class":166},[128,85667,78627],{"class":138},[128,85669,36727],{"class":134},[128,85671,85672],{"class":176}," 'M'\n",[128,85674,85675,85677,85679,85681,85683,85685,85687,85689,85691,85693,85695,85697,85699,85701],{"class":130,"line":163},[128,85676,85643],{"class":166},[128,85678,4307],{"class":138},[128,85680,61627],{"class":166},[128,85682,253],{"class":138},[128,85684,85652],{"class":166},[128,85686,4307],{"class":138},[128,85688,85657],{"class":166},[128,85690,253],{"class":138},[128,85692,2592],{"class":166},[128,85694,258],{"class":138},[128,85696,2452],{"class":166},[128,85698,78627],{"class":138},[128,85700,36727],{"class":134},[128,85702,85672],{"class":176},[128,85704,85705],{"class":130,"line":183},[128,85706,160],{"emptyLinePlaceholder":159},[128,85708,85709,85711,85713,85715,85717,85719,85721,85723,85725,85727,85729,85731,85733,85735],{"class":130,"line":188},[128,85710,85643],{"class":166},[128,85712,4307],{"class":138},[128,85714,61627],{"class":166},[128,85716,253],{"class":138},[128,85718,85652],{"class":166},[128,85720,4307],{"class":138},[128,85722,85657],{"class":166},[128,85724,253],{"class":138},[128,85726,2452],{"class":166},[128,85728,258],{"class":138},[128,85730,4094],{"class":166},[128,85732,78627],{"class":138},[128,85734,36727],{"class":134},[128,85736,85737],{"class":176}," 'Mozill'\n",[128,85739,85740],{"class":130,"line":193},[128,85741,160],{"emptyLinePlaceholder":159},[128,85743,85744,85746,85748,85750,85752,85754,85756,85758,85760,85762,85764,85766],{"class":130,"line":206},[128,85745,85643],{"class":166},[128,85747,4307],{"class":138},[128,85749,61627],{"class":166},[128,85751,253],{"class":138},[128,85753,85652],{"class":166},[128,85755,4307],{"class":138},[128,85757,85657],{"class":166},[128,85759,253],{"class":138},[128,85761,4043],{"class":166},[128,85763,78627],{"class":138},[128,85765,36727],{"class":134},[128,85767,85768],{"class":176}," 'lla'\n",[128,85770,85771,85773,85775,85777,85779,85781,85783,85785,85787,85789,85791,85793,85795,85797],{"class":130,"line":221},[128,85772,85643],{"class":166},[128,85774,4307],{"class":138},[128,85776,61627],{"class":166},[128,85778,253],{"class":138},[128,85780,85652],{"class":166},[128,85782,4307],{"class":138},[128,85784,85657],{"class":166},[128,85786,253],{"class":138},[128,85788,4043],{"class":166},[128,85790,258],{"class":138},[128,85792,4119],{"class":166},[128,85794,78683],{"class":138},[128,85796,36727],{"class":134},[128,85798,85768],{"class":176},[128,85800,85801,85803,85805,85807,85809,85811,85813,85815,85817,85819,85821,85823,85825,85827],{"class":130,"line":230},[128,85802,85643],{"class":166},[128,85804,4307],{"class":138},[128,85806,61627],{"class":166},[128,85808,253],{"class":138},[128,85810,85652],{"class":166},[128,85812,4307],{"class":138},[128,85814,85657],{"class":166},[128,85816,253],{"class":138},[128,85818,4119],{"class":166},[128,85820,258],{"class":138},[128,85822,4043],{"class":166},[128,85824,78627],{"class":138},[128,85826,36727],{"class":134},[128,85828,85768],{"class":176},[128,85830,85831],{"class":130,"line":235},[128,85832,160],{"emptyLinePlaceholder":159},[128,85834,85835,85837,85839,85841,85843,85845,85847,85849,85851,85853,85855,85857,85859,85861],{"class":130,"line":244},[128,85836,85643],{"class":166},[128,85838,4307],{"class":138},[128,85840,61627],{"class":166},[128,85842,253],{"class":138},[128,85844,85652],{"class":166},[128,85846,4307],{"class":138},[128,85848,85657],{"class":166},[128,85850,253],{"class":138},[128,85852,2452],{"class":166},[128,85854,258],{"class":138},[128,85856,4119],{"class":166},[128,85858,78627],{"class":138},[128,85860,36727],{"class":134},[128,85862,85863],{"class":176}," 'Mozilla'\n",[128,85865,85866,85868,85870,85872,85874,85876,85878,85880,85882,85884,85886,85888,85890,85892],{"class":130,"line":287},[128,85867,85643],{"class":166},[128,85869,4307],{"class":138},[128,85871,61627],{"class":166},[128,85873,253],{"class":138},[128,85875,85652],{"class":166},[128,85877,4307],{"class":138},[128,85879,85657],{"class":166},[128,85881,253],{"class":138},[128,85883,2452],{"class":166},[128,85885,258],{"class":138},[128,85887,4196],{"class":166},[128,85889,78627],{"class":138},[128,85891,36727],{"class":134},[128,85893,85863],{"class":176},[26397,85895,85897],{"id":85896},"_410533-startswith","4.10.5.3.3 startsWith",[19,85899,85900,85903,85904,85909,85910,85912,85913],{},[114,85901,85902],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[3903,85905,85906],{},[114,85907,85908],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[114,85911,4974],{}," 或 ",[114,85914,69398],{},[106,85916,85918],{"className":80869,"code":85917,"language":80871,"meta":112,"style":112},"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",[114,85919,85920,85932,85951,85956,85976],{"__ignoreMap":112},[128,85921,85922,85924,85927,85929],{"class":130,"line":131},[128,85923,10349],{"class":134},[128,85925,85926],{"class":138}," str1 ",[128,85928,270],{"class":134},[128,85930,85931],{"class":176}," \"Saturday night plans\"\n",[128,85933,85934,85936,85938,85941,85944,85946,85949],{"class":130,"line":142},[128,85935,80906],{"class":138},[128,85937,61627],{"class":199},[128,85939,85940],{"class":138},"(str1.",[128,85942,85943],{"class":199},"startsWith",[128,85945,253],{"class":138},[128,85947,85948],{"class":176},"\"Sat\"",[128,85950,3034],{"class":138},[128,85952,85953],{"class":130,"line":156},[128,85954,85955],{"class":3814},"\u002F\u002F Expected output: true\n",[128,85957,85958,85960,85962,85964,85966,85968,85970,85972,85974],{"class":130,"line":163},[128,85959,80906],{"class":138},[128,85961,61627],{"class":199},[128,85963,85940],{"class":138},[128,85965,85943],{"class":199},[128,85967,253],{"class":138},[128,85969,85948],{"class":176},[128,85971,258],{"class":138},[128,85973,3827],{"class":166},[128,85975,3034],{"class":138},[128,85977,85978],{"class":130,"line":183},[128,85979,85980],{"class":3814},"\u002F\u002F Expected output: false\n",[106,85982,85984],{"className":54018,"code":85983,"language":54020,"meta":112,"style":112},"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",[114,85985,85986,85991,85996,86000,86005,86010],{"__ignoreMap":112},[128,85987,85988],{"class":130,"line":131},[128,85989,85990],{"class":138},"startsWith(searchString)\n",[128,85992,85993],{"class":130,"line":142},[128,85994,85995],{"class":138},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[128,85997,85998],{"class":130,"line":156},[128,85999,160],{"emptyLinePlaceholder":159},[128,86001,86002],{"class":130,"line":163},[128,86003,86004],{"class":138},"const str3 = 'pink老师上课中'\n",[128,86006,86007],{"class":130,"line":183},[128,86008,86009],{"class":138},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[128,86011,86012],{"class":130,"line":188},[128,86013,86014],{"class":138},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[26397,86016,86018],{"id":86017},"_410534-includes","4.10.5.3.4 includes",[19,86020,86021],{},"includes(searchString) includes(searchString, position)",[26,86023,86024],{},[29,86025,86026],{},"searchString:",[19,86028,86029,86030,86032,86033,86038,86039,86044,86045,24987,86048,86051,86052,86055],{},"一个要在 ",[114,86031,4914],{}," 中查找的字符串。",[3989,86034,86037],{"href":86035,"rel":86036},"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",[27352],"不能是正则表达式","。所有非正则表达式的值都会被",[3989,86040,86043],{"href":86041,"rel":86042},"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",[27352],"强制转换为字符串","，因此如果该参数被省略或传入 ",[114,86046,86047],{},"undefined",[114,86049,86050],{},"includes()"," 方法会在字符串中搜索 ",[114,86053,86054],{},"\"undefined\"","，这通常不是你想要的",[26,86057,86058],{"start":142},[29,86059,86060,4607],{},[114,86061,86062],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,86064,86065,86066,86069,86070],{},"在字符串中开始搜索 ",[114,86067,86068],{},"searchString"," 的位置。默认值为 ",[114,86071,2452],{},[26,86073,86074],{"start":156},[29,86075,86076],{},"返回值：",[19,86078,86079,86080,86082,86083,86087,86088],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[114,86081,86068],{}," 为空字符串的情况），则返回 ",[3903,86084,86085],{},[114,86086,4974],{}," ，否则返回 ",[3903,86089,86090],{},[114,86091,69398],{},[26,86093,86094],{"start":163},[29,86095,86096],{},"异常：",[19,86098,85595,86099,17319,86101,86105],{},[114,86100,86068],{},[3989,86102,86104],{"href":86035,"rel":86103},[27352],"是一个正则表达式","，则会抛出",[19,86107,86108],{},"只要是有就是true，不需要非得以谁开头结尾",[106,86110,86112],{"className":80869,"code":86111,"language":80871,"meta":112,"style":112},"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",[114,86113,86114,86125,86148,86167,86187,86209,86228],{"__ignoreMap":112},[128,86115,86116,86118,86120,86122],{"class":130,"line":131},[128,86117,10349],{"class":134},[128,86119,83149],{"class":138},[128,86121,270],{"class":134},[128,86123,86124],{"class":176}," \"To be, or not to be, that is the question.\"\n",[128,86126,86127,86129,86131,86134,86137,86139,86142,86145],{"class":130,"line":142},[128,86128,80906],{"class":138},[128,86130,61627],{"class":199},[128,86132,86133],{"class":138},"(str.",[128,86135,86136],{"class":199},"includes",[128,86138,253],{"class":138},[128,86140,86141],{"class":176},"\"To be\"",[128,86143,86144],{"class":138},"))",[128,86146,86147],{"class":3814},"  \u002F\u002F true\n",[128,86149,86150,86152,86154,86156,86158,86160,86163,86165],{"class":130,"line":156},[128,86151,80906],{"class":138},[128,86153,61627],{"class":199},[128,86155,86133],{"class":138},[128,86157,86136],{"class":199},[128,86159,253],{"class":138},[128,86161,86162],{"class":176},"\"question\"",[128,86164,86144],{"class":138},[128,86166,86147],{"class":3814},[128,86168,86169,86171,86173,86175,86177,86179,86182,86184],{"class":130,"line":163},[128,86170,80906],{"class":138},[128,86172,61627],{"class":199},[128,86174,86133],{"class":138},[128,86176,86136],{"class":199},[128,86178,253],{"class":138},[128,86180,86181],{"class":176},"\"nonexistent\"",[128,86183,86144],{"class":138},[128,86185,86186],{"class":3814},"  \u002F\u002F false\n",[128,86188,86189,86191,86193,86195,86197,86199,86201,86203,86205,86207],{"class":130,"line":183},[128,86190,80906],{"class":138},[128,86192,61627],{"class":199},[128,86194,86133],{"class":138},[128,86196,86136],{"class":199},[128,86198,253],{"class":138},[128,86200,86141],{"class":176},[128,86202,258],{"class":138},[128,86204,2592],{"class":166},[128,86206,86144],{"class":138},[128,86208,86186],{"class":3814},[128,86210,86211,86213,86215,86217,86219,86221,86224,86226],{"class":130,"line":188},[128,86212,80906],{"class":138},[128,86214,61627],{"class":199},[128,86216,86133],{"class":138},[128,86218,86136],{"class":199},[128,86220,253],{"class":138},[128,86222,86223],{"class":176},"\"TO BE\"",[128,86225,86144],{"class":138},[128,86227,86186],{"class":3814},[128,86229,86230,86232,86234,86236,86238,86240,86242,86244],{"class":130,"line":193},[128,86231,80906],{"class":138},[128,86233,61627],{"class":199},[128,86235,86133],{"class":138},[128,86237,86136],{"class":199},[128,86239,253],{"class":138},[128,86241,11209],{"class":176},[128,86243,86144],{"class":138},[128,86245,86147],{"class":3814},[26397,86247,86249],{"id":86248},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[106,86251,86253],{"className":56449,"code":86252,"language":56451,"meta":112,"style":112},"\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",[114,86254,86255,86263,86271,86276,86281,86286,86291,86296,86304],{"__ignoreMap":112},[128,86256,86257,86259,86261],{"class":130,"line":131},[128,86258,4657],{"class":138},[128,86260,55183],{"class":54685},[128,86262,54692],{"class":138},[128,86264,86265,86267,86269],{"class":130,"line":142},[128,86266,55526],{"class":138},[128,86268,55196],{"class":54685},[128,86270,54692],{"class":138},[128,86272,86273],{"class":130,"line":156},[128,86274,86275],{"class":138},"    const num = 10\n",[128,86277,86278],{"class":130,"line":163},[128,86279,86280],{"class":138},"    \u002F\u002F 强制转换\n",[128,86282,86283],{"class":130,"line":183},[128,86284,86285],{"class":138},"    console.log(String(num))\n",[128,86287,86288],{"class":130,"line":188},[128,86289,86290],{"class":138},"    \u002F\u002F toString()方法转换\n",[128,86292,86293],{"class":130,"line":193},[128,86294,86295],{"class":138},"    console.log(num.toString())\n",[128,86297,86298,86300,86302],{"class":130,"line":206},[128,86299,55799],{"class":138},[128,86301,55196],{"class":54685},[128,86303,54692],{"class":138},[128,86305,86306,86308,86310],{"class":130,"line":221},[128,86307,55168],{"class":138},[128,86309,55183],{"class":54685},[128,86311,54692],{"class":138},[26397,86313,86315],{"id":86314},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,86317,86318],{},[5074,86319],{"alt":112,"src":86320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[106,86322,86324],{"className":54018,"code":86323,"language":54020,"meta":112,"style":112},"\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",[114,86325,86326,86336,86350,86354,86362,86376,86396,86408,86416,86420,86428,86440,86448,86460,86465,86470,86475,86522,86538,86546,86554,86558],{"__ignoreMap":112},[128,86327,86328,86330,86332,86334],{"class":130,"line":131},[128,86329,54682],{"class":138},[128,86331,54686],{"class":54685},[128,86333,54689],{"class":199},[128,86335,54692],{"class":138},[128,86337,86338,86340,86342,86344,86346,86348],{"class":130,"line":142},[128,86339,4657],{"class":138},[128,86341,54020],{"class":54685},[128,86343,54701],{"class":199},[128,86345,270],{"class":138},[128,86347,54706],{"class":176},[128,86349,54692],{"class":138},[128,86351,86352],{"class":130,"line":156},[128,86353,160],{"emptyLinePlaceholder":159},[128,86355,86356,86358,86360],{"class":130,"line":163},[128,86357,4657],{"class":138},[128,86359,54719],{"class":54685},[128,86361,54692],{"class":138},[128,86363,86364,86366,86368,86370,86372,86374],{"class":130,"line":183},[128,86365,55526],{"class":138},[128,86367,54729],{"class":54685},[128,86369,54732],{"class":199},[128,86371,270],{"class":138},[128,86373,54737],{"class":176},[128,86375,54692],{"class":138},[128,86377,86378,86380,86382,86384,86386,86388,86390,86392,86394],{"class":130,"line":188},[128,86379,55526],{"class":138},[128,86381,54729],{"class":54685},[128,86383,18442],{"class":199},[128,86385,270],{"class":138},[128,86387,54776],{"class":176},[128,86389,54756],{"class":199},[128,86391,270],{"class":138},[128,86393,54783],{"class":176},[128,86395,54692],{"class":138},[128,86397,86398,86400,86402,86404,86406],{"class":130,"line":193},[128,86399,55526],{"class":138},[128,86401,2752],{"class":54685},[128,86403,54794],{"class":138},[128,86405,2752],{"class":54685},[128,86407,54692],{"class":138},[128,86409,86410,86412,86414],{"class":130,"line":206},[128,86411,55168],{"class":138},[128,86413,54719],{"class":54685},[128,86415,54692],{"class":138},[128,86417,86418],{"class":130,"line":221},[128,86419,160],{"emptyLinePlaceholder":159},[128,86421,86422,86424,86426],{"class":130,"line":230},[128,86423,4657],{"class":138},[128,86425,55183],{"class":54685},[128,86427,54692],{"class":138},[128,86429,86430,86432,86434,86436,86438],{"class":130,"line":235},[128,86431,55526],{"class":138},[128,86433,54994],{"class":54685},[128,86435,58695],{"class":138},[128,86437,54994],{"class":54685},[128,86439,54692],{"class":138},[128,86441,86442,86444,86446],{"class":130,"line":244},[128,86443,55526],{"class":138},[128,86445,55196],{"class":54685},[128,86447,54692],{"class":138},[128,86449,86450,86452,86455,86457],{"class":130,"line":287},[128,86451,14748],{"class":134},[128,86453,86454],{"class":166}," gift",[128,86456,170],{"class":134},[128,86458,86459],{"class":176}," '50g的茶叶，清洗球'\n",[128,86461,86462],{"class":130,"line":301},[128,86463,86464],{"class":3814},"    \u002F\u002F 1.把字符串拆分为数组\n",[128,86466,86467],{"class":130,"line":310},[128,86468,86469],{"class":3814},"    \u002F\u002F console.log(gift.split(','))\n",[128,86471,86472],{"class":130,"line":323},[128,86473,86474],{"class":3814},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[128,86476,86477,86479,86481,86483,86486,86489,86491,86494,86496,86498,86500,86502,86504,86507,86509,86512,86514,86516,86518,86520],{"class":130,"line":330},[128,86478,14748],{"class":134},[128,86480,77294],{"class":166},[128,86482,170],{"class":134},[128,86484,86485],{"class":138}," gift.",[128,86487,86488],{"class":199},"split",[128,86490,253],{"class":138},[128,86492,86493],{"class":176},"'，'",[128,86495,34300],{"class":138},[128,86497,77418],{"class":199},[128,86499,253],{"class":138},[128,86501,83169],{"class":266},[128,86503,83172],{"class":134},[128,86505,86506],{"class":176}," `\u003Cspan>【赠品】${",[128,86508,83169],{"class":138},[128,86510,86511],{"class":176},"}\u003C\u002Fspan>\u003Cbr>`",[128,86513,34300],{"class":138},[128,86515,77597],{"class":199},[128,86517,253],{"class":138},[128,86519,77602],{"class":176},[128,86521,180],{"class":138},[128,86523,86524,86526,86528,86530,86532,86534,86536],{"class":130,"line":335},[128,86525,55789],{"class":138},[128,86527,57780],{"class":199},[128,86529,253],{"class":138},[128,86531,85304],{"class":176},[128,86533,77623],{"class":138},[128,86535,270],{"class":134},[128,86537,77359],{"class":138},[128,86539,86540,86542,86544],{"class":130,"line":340},[128,86541,55799],{"class":138},[128,86543,55196],{"class":54685},[128,86545,54692],{"class":138},[128,86547,86548,86550,86552],{"class":130,"line":351},[128,86549,55168],{"class":138},[128,86551,55183],{"class":54685},[128,86553,54692],{"class":138},[128,86555,86556],{"class":130,"line":384},[128,86557,160],{"emptyLinePlaceholder":159},[128,86559,86560,86562,86564],{"class":130,"line":414},[128,86561,55168],{"class":138},[128,86563,54020],{"class":54685},[128,86565,54692],{"class":138},[25485,86567,86569],{"id":86568},"_41054-number","4.10.5.4 Number",[19,86571,86572],{},[5074,86573],{"alt":112,"src":86574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,86576,86577],{},"整数也可以进行toFixed来保留小数",[19,86579,86580],{},"比如：",[19,86582,86583],{},"const price=10",[19,86585,86586],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[25485,86588,86590],{"id":86589},"_41055-购物车展示","4.10.5.5 购物车展示",[19,86592,86593],{},[5074,86594],{"alt":112,"src":86595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[106,86597,86599],{"className":54018,"code":86598,"language":54020,"meta":112,"style":112},"\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",[114,86600,86601,86611,86625,86629,86637,86651,86671,86683,86691,86697,86707,86717,86727,86731,86735,86741,86753,86767,86771,86775,86781,86793,86809,86819,86835,86839,86843,86849,86859,86869,86873,86877,86885,86897,86909,86921,86925,86929,86937,86949,86953,86957,86968,86978,86990,87002,87012,87016,87020,87028,87037,87049,87059,87069,87073,87077,87085,87094,87101,87111,87123,87127,87131,87140,87150,87161,87173,87185,87189,87193,87202,87212,87223,87227,87231,87237,87249,87261,87271,87281,87299,87311,87315,87319,87328,87340,87350,87360,87372,87376,87384,87392,87396,87404,87418,87426,87440,87467,87475,87483,87493,87497,87505,87513,87522,87530,87539,87549,87553,87557,87565,87573,87582,87590,87598,87611,87615,87619,87627,87635,87644,87652,87660,87675,87679,87683,87691,87699,87708,87716,87724,87738,87746,87750,87754,87759,87785,87790,87827,87832,87855,87860,87914,87919,87955,87959,87965,87970,87979,87993,88002,88021,88030,88040,88045,88050,88063,88068,88122,88148,88156,88164,88168],{"__ignoreMap":112},[128,86602,86603,86605,86607,86609],{"class":130,"line":131},[128,86604,54682],{"class":138},[128,86606,54686],{"class":54685},[128,86608,54689],{"class":199},[128,86610,54692],{"class":138},[128,86612,86613,86615,86617,86619,86621,86623],{"class":130,"line":142},[128,86614,4657],{"class":138},[128,86616,54020],{"class":54685},[128,86618,54701],{"class":199},[128,86620,270],{"class":138},[128,86622,54706],{"class":176},[128,86624,54692],{"class":138},[128,86626,86627],{"class":130,"line":156},[128,86628,160],{"emptyLinePlaceholder":159},[128,86630,86631,86633,86635],{"class":130,"line":163},[128,86632,4657],{"class":138},[128,86634,54719],{"class":54685},[128,86636,54692],{"class":138},[128,86638,86639,86641,86643,86645,86647,86649],{"class":130,"line":183},[128,86640,55526],{"class":138},[128,86642,54729],{"class":54685},[128,86644,54732],{"class":199},[128,86646,270],{"class":138},[128,86648,54737],{"class":176},[128,86650,54692],{"class":138},[128,86652,86653,86655,86657,86659,86661,86663,86665,86667,86669],{"class":130,"line":188},[128,86654,55526],{"class":138},[128,86656,54729],{"class":54685},[128,86658,18442],{"class":199},[128,86660,270],{"class":138},[128,86662,54776],{"class":176},[128,86664,54756],{"class":199},[128,86666,270],{"class":138},[128,86668,54783],{"class":176},[128,86670,54692],{"class":138},[128,86672,86673,86675,86677,86679,86681],{"class":130,"line":193},[128,86674,55526],{"class":138},[128,86676,2752],{"class":54685},[128,86678,54794],{"class":138},[128,86680,2752],{"class":54685},[128,86682,54692],{"class":138},[128,86684,86685,86687,86689],{"class":130,"line":206},[128,86686,55526],{"class":138},[128,86688,3659],{"class":54685},[128,86690,54692],{"class":138},[128,86692,86693,86695],{"class":130,"line":221},[128,86694,9960],{"class":54685},[128,86696,1959],{"class":138},[128,86698,86699,86701,86703,86705],{"class":130,"line":230},[128,86700,58076],{"class":166},[128,86702,1967],{"class":138},[128,86704,2452],{"class":166},[128,86706,4905],{"class":138},[128,86708,86709,86711,86713,86715],{"class":130,"line":235},[128,86710,58087],{"class":166},[128,86712,1967],{"class":138},[128,86714,2452],{"class":166},[128,86716,4905],{"class":138},[128,86718,86719,86721,86723,86725],{"class":130,"line":244},[128,86720,75971],{"class":166},[128,86722,1967],{"class":138},[128,86724,63885],{"class":166},[128,86726,4905],{"class":138},[128,86728,86729],{"class":130,"line":287},[128,86730,5773],{"class":138},[128,86732,86733],{"class":130,"line":301},[128,86734,160],{"emptyLinePlaceholder":159},[128,86736,86737,86739],{"class":130,"line":310},[128,86738,65502],{"class":199},[128,86740,1959],{"class":138},[128,86742,86743,86745,86747,86749,86751],{"class":130,"line":323},[128,86744,58152],{"class":166},[128,86746,1967],{"class":138},[128,86748,81948],{"class":166},[128,86750,54875],{"class":134},[128,86752,4905],{"class":138},[128,86754,86755,86757,86759,86761,86763,86765],{"class":130,"line":330},[128,86756,58087],{"class":166},[128,86758,1967],{"class":138},[128,86760,4061],{"class":166},[128,86762,54875],{"class":134},[128,86764,54939],{"class":166},[128,86766,4905],{"class":138},[128,86768,86769],{"class":130,"line":335},[128,86770,5773],{"class":138},[128,86772,86773],{"class":130,"line":340},[128,86774,160],{"emptyLinePlaceholder":159},[128,86776,86777,86779],{"class":130,"line":351},[128,86778,81999],{"class":199},[128,86780,1959],{"class":138},[128,86782,86783,86785,86787,86789,86791],{"class":130,"line":384},[128,86784,58076],{"class":166},[128,86786,1967],{"class":138},[128,86788,4324],{"class":166},[128,86790,54875],{"class":134},[128,86792,4905],{"class":138},[128,86794,86795,86797,86799,86801,86803,86805,86807],{"class":130,"line":414},[128,86796,65239],{"class":166},[128,86798,1967],{"class":138},[128,86800,31606],{"class":166},[128,86802,82054],{"class":166},[128,86804,82057],{"class":166},[128,86806,4444],{"class":134},[128,86808,4905],{"class":138},[128,86810,86811,86813,86815,86817],{"class":130,"line":419},[128,86812,58390],{"class":166},[128,86814,1967],{"class":138},[128,86816,54860],{"class":166},[128,86818,4905],{"class":138},[128,86820,86821,86823,86825,86827,86829,86831,86833],{"class":130,"line":424},[128,86822,65356],{"class":166},[128,86824,1967],{"class":138},[128,86826,2592],{"class":166},[128,86828,54875],{"class":134},[128,86830,54904],{"class":166},[128,86832,65623],{"class":166},[128,86834,4905],{"class":138},[128,86836,86837],{"class":130,"line":434},[128,86838,5773],{"class":138},[128,86840,86841],{"class":130,"line":447},[128,86842,160],{"emptyLinePlaceholder":159},[128,86844,86845,86847],{"class":130,"line":459},[128,86846,82117],{"class":199},[128,86848,1959],{"class":138},[128,86850,86851,86853,86855,86857],{"class":130,"line":471},[128,86852,65404],{"class":166},[128,86854,1967],{"class":138},[128,86856,65409],{"class":166},[128,86858,4905],{"class":138},[128,86860,86861,86863,86865,86867],{"class":130,"line":483},[128,86862,58265],{"class":166},[128,86864,1967],{"class":138},[128,86866,65197],{"class":166},[128,86868,4905],{"class":138},[128,86870,86871],{"class":130,"line":495},[128,86872,5773],{"class":138},[128,86874,86875],{"class":130,"line":507},[128,86876,160],{"emptyLinePlaceholder":159},[128,86878,86879,86881,86883],{"class":130,"line":519},[128,86880,81999],{"class":199},[128,86882,58995],{"class":54685},[128,86884,1959],{"class":138},[128,86886,86887,86889,86891,86893,86895],{"class":130,"line":524},[128,86888,58152],{"class":166},[128,86890,1967],{"class":138},[128,86892,4361],{"class":166},[128,86894,54875],{"class":134},[128,86896,4905],{"class":138},[128,86898,86899,86901,86903,86905,86907],{"class":130,"line":529},[128,86900,58166],{"class":166},[128,86902,1967],{"class":138},[128,86904,4361],{"class":166},[128,86906,54875],{"class":134},[128,86908,4905],{"class":138},[128,86910,86911,86913,86915,86917,86919],{"class":130,"line":540},[128,86912,65129],{"class":166},[128,86914,1967],{"class":138},[128,86916,4069],{"class":166},[128,86918,54875],{"class":134},[128,86920,4905],{"class":138},[128,86922,86923],{"class":130,"line":555},[128,86924,5773],{"class":138},[128,86926,86927],{"class":130,"line":576},[128,86928,160],{"emptyLinePlaceholder":159},[128,86930,86931,86933,86935],{"class":130,"line":584},[128,86932,81999],{"class":199},[128,86934,65683],{"class":199},[128,86936,1959],{"class":138},[128,86938,86939,86941,86943,86945,86947],{"class":130,"line":593},[128,86940,58152],{"class":166},[128,86942,1967],{"class":138},[128,86944,3143],{"class":166},[128,86946,54875],{"class":134},[128,86948,4905],{"class":138},[128,86950,86951],{"class":130,"line":598},[128,86952,5773],{"class":138},[128,86954,86955],{"class":130,"line":603},[128,86956,160],{"emptyLinePlaceholder":159},[128,86958,86959,86961,86963,86966],{"class":130,"line":614},[128,86960,81999],{"class":199},[128,86962,65683],{"class":199},[128,86964,86965],{"class":199}," .tag",[128,86967,1959],{"class":138},[128,86969,86970,86972,86974,86976],{"class":130,"line":625},[128,86971,58390],{"class":166},[128,86973,1967],{"class":138},[128,86975,64248],{"class":166},[128,86977,4905],{"class":138},[128,86979,86980,86982,86984,86986,86988],{"class":130,"line":633},[128,86981,58076],{"class":166},[128,86983,1967],{"class":138},[128,86985,409],{"class":166},[128,86987,54875],{"class":134},[128,86989,4905],{"class":138},[128,86991,86992,86994,86996,86998,87000],{"class":130,"line":649},[128,86993,58303],{"class":166},[128,86995,1967],{"class":138},[128,86997,4247],{"class":166},[128,86999,54875],{"class":134},[128,87001,4905],{"class":138},[128,87003,87004,87006,87008,87010],{"class":130,"line":660},[128,87005,60796],{"class":166},[128,87007,1967],{"class":138},[128,87009,65449],{"class":166},[128,87011,4905],{"class":138},[128,87013,87014],{"class":130,"line":673},[128,87015,5773],{"class":138},[128,87017,87018],{"class":130,"line":678},[128,87019,160],{"emptyLinePlaceholder":159},[128,87021,87022,87024,87026],{"class":130,"line":683},[128,87023,81999],{"class":199},[128,87025,82291],{"class":199},[128,87027,2665],{"class":138},[128,87029,87030,87032,87035],{"class":130,"line":693},[128,87031,81999],{"class":199},[128,87033,87034],{"class":199}," .sub-total",[128,87036,1959],{"class":138},[128,87038,87039,87041,87043,87045,87047],{"class":130,"line":702},[128,87040,58303],{"class":166},[128,87042,1967],{"class":138},[128,87044,4399],{"class":166},[128,87046,54875],{"class":134},[128,87048,4905],{"class":138},[128,87050,87051,87053,87055,87057],{"class":130,"line":709},[128,87052,60796],{"class":166},[128,87054,1967],{"class":138},[128,87056,82314],{"class":166},[128,87058,4905],{"class":138},[128,87060,87061,87063,87065,87067],{"class":130,"line":723},[128,87062,65216],{"class":166},[128,87064,1967],{"class":138},[128,87066,2592],{"class":166},[128,87068,4905],{"class":138},[128,87070,87071],{"class":130,"line":732},[128,87072,5773],{"class":138},[128,87074,87075],{"class":130,"line":744},[128,87076,160],{"emptyLinePlaceholder":159},[128,87078,87079,87081,87083],{"class":130,"line":749},[128,87080,81999],{"class":199},[128,87082,82331],{"class":199},[128,87084,2665],{"class":138},[128,87086,87087,87089,87092],{"class":130,"line":754},[128,87088,81999],{"class":199},[128,87090,87091],{"class":199}," .sub-total::before",[128,87093,2665],{"class":138},[128,87095,87096,87099],{"class":130,"line":764},[128,87097,87098],{"class":199},"    .amount::before",[128,87100,1959],{"class":138},[128,87102,87103,87105,87107,87109],{"class":130,"line":782},[128,87104,82338],{"class":166},[128,87106,1967],{"class":138},[128,87108,82343],{"class":176},[128,87110,4905],{"class":138},[128,87112,87113,87115,87117,87119,87121],{"class":130,"line":787},[128,87114,58303],{"class":166},[128,87116,1967],{"class":138},[128,87118,4247],{"class":166},[128,87120,54875],{"class":134},[128,87122,4905],{"class":138},[128,87124,87125],{"class":130,"line":795},[128,87126,5773],{"class":138},[128,87128,87129],{"class":130,"line":807},[128,87130,160],{"emptyLinePlaceholder":159},[128,87132,87133,87135,87138],{"class":130,"line":813},[128,87134,81999],{"class":199},[128,87136,87137],{"class":199}," .spec",[128,87139,1959],{"class":138},[128,87141,87142,87144,87146,87148],{"class":130,"line":818},[128,87143,65216],{"class":166},[128,87145,1967],{"class":138},[128,87147,409],{"class":166},[128,87149,4905],{"class":138},[128,87151,87152,87154,87156,87159],{"class":130,"line":835},[128,87153,60796],{"class":166},[128,87155,1967],{"class":138},[128,87157,87158],{"class":166},"#888",[128,87160,4905],{"class":138},[128,87162,87163,87165,87167,87169,87171],{"class":130,"line":851},[128,87164,58303],{"class":166},[128,87166,1967],{"class":138},[128,87168,4298],{"class":166},[128,87170,54875],{"class":134},[128,87172,4905],{"class":138},[128,87174,87175,87177,87179,87181,87183],{"class":130,"line":867},[128,87176,65379],{"class":166},[128,87178,1967],{"class":138},[128,87180,4449],{"class":166},[128,87182,54875],{"class":134},[128,87184,4905],{"class":138},[128,87186,87187],{"class":130,"line":872},[128,87188,5773],{"class":138},[128,87190,87191],{"class":130,"line":878},[128,87192,160],{"emptyLinePlaceholder":159},[128,87194,87195,87197,87200],{"class":130,"line":887},[128,87196,81999],{"class":199},[128,87198,87199],{"class":199}," .count",[128,87201,1959],{"class":138},[128,87203,87204,87206,87208,87210],{"class":130,"line":896},[128,87205,65216],{"class":166},[128,87207,1967],{"class":138},[128,87209,2592],{"class":166},[128,87211,4905],{"class":138},[128,87213,87214,87216,87218,87221],{"class":130,"line":905},[128,87215,60796],{"class":166},[128,87217,1967],{"class":138},[128,87219,87220],{"class":166},"#aaa",[128,87222,4905],{"class":138},[128,87224,87225],{"class":130,"line":914},[128,87226,5773],{"class":138},[128,87228,87229],{"class":130,"line":920},[128,87230,160],{"emptyLinePlaceholder":159},[128,87232,87233,87235],{"class":130,"line":926},[128,87234,75850],{"class":199},[128,87236,1959],{"class":138},[128,87238,87239,87241,87243,87245,87247],{"class":130,"line":938},[128,87240,58152],{"class":166},[128,87242,1967],{"class":138},[128,87244,81948],{"class":166},[128,87246,54875],{"class":134},[128,87248,4905],{"class":138},[128,87250,87251,87253,87255,87257,87259],{"class":130,"line":943},[128,87252,58087],{"class":166},[128,87254,1967],{"class":138},[128,87256,2452],{"class":166},[128,87258,54939],{"class":166},[128,87260,4905],{"class":138},[128,87262,87263,87265,87267,87269],{"class":130,"line":948},[128,87264,58390],{"class":166},[128,87266,1967],{"class":138},[128,87268,54860],{"class":166},[128,87270,4905],{"class":138},[128,87272,87273,87275,87277,87279],{"class":130,"line":958},[128,87274,58401],{"class":166},[128,87276,1967],{"class":138},[128,87278,54963],{"class":166},[128,87280,4905],{"class":138},[128,87282,87283,87286,87288,87290,87292,87294,87297],{"class":130,"line":974},[128,87284,87285],{"class":166},"      border-top",[128,87287,1967],{"class":138},[128,87289,2592],{"class":166},[128,87291,54875],{"class":134},[128,87293,54904],{"class":166},[128,87295,87296],{"class":166}," #4e4e4e",[128,87298,4905],{"class":138},[128,87300,87301,87303,87305,87307,87309],{"class":130,"line":985},[128,87302,58076],{"class":166},[128,87304,1967],{"class":138},[128,87306,4449],{"class":166},[128,87308,54875],{"class":134},[128,87310,4905],{"class":138},[128,87312,87313],{"class":130,"line":990},[128,87314,5773],{"class":138},[128,87316,87317],{"class":130,"line":1005},[128,87318,160],{"emptyLinePlaceholder":159},[128,87320,87321,87323,87326],{"class":130,"line":1017},[128,87322,75850],{"class":199},[128,87324,87325],{"class":199}," .amount",[128,87327,1959],{"class":138},[128,87329,87330,87332,87334,87336,87338],{"class":130,"line":1022},[128,87331,58303],{"class":166},[128,87333,1967],{"class":138},[128,87335,4399],{"class":166},[128,87337,54875],{"class":134},[128,87339,4905],{"class":138},[128,87341,87342,87344,87346,87348],{"class":130,"line":1027},[128,87343,60796],{"class":166},[128,87345,1967],{"class":138},[128,87347,82314],{"class":166},[128,87349,4905],{"class":138},[128,87351,87352,87354,87356,87358],{"class":130,"line":1033},[128,87353,65713],{"class":166},[128,87355,1967],{"class":138},[128,87357,54872],{"class":166},[128,87359,4905],{"class":138},[128,87361,87362,87364,87366,87368,87370],{"class":130,"line":1038},[128,87363,65129],{"class":166},[128,87365,1967],{"class":138},[128,87367,4405],{"class":166},[128,87369,54875],{"class":134},[128,87371,4905],{"class":138},[128,87373,87374],{"class":130,"line":1050},[128,87375,5773],{"class":138},[128,87377,87378,87380,87382],{"class":130,"line":1055},[128,87379,55799],{"class":138},[128,87381,3659],{"class":54685},[128,87383,54692],{"class":138},[128,87385,87386,87388,87390],{"class":130,"line":1060},[128,87387,55168],{"class":138},[128,87389,54719],{"class":54685},[128,87391,54692],{"class":138},[128,87393,87394],{"class":130,"line":1070},[128,87395,160],{"emptyLinePlaceholder":159},[128,87397,87398,87400,87402],{"class":130,"line":1086},[128,87399,4657],{"class":138},[128,87401,55183],{"class":54685},[128,87403,54692],{"class":138},[128,87405,87406,87408,87410,87412,87414,87416],{"class":130,"line":1095},[128,87407,55526],{"class":138},[128,87409,54994],{"class":54685},[128,87411,56868],{"class":199},[128,87413,270],{"class":138},[128,87415,65987],{"class":176},[128,87417,54692],{"class":138},[128,87419,87420,87422,87424],{"class":130,"line":1100},[128,87421,55799],{"class":138},[128,87423,54994],{"class":54685},[128,87425,54692],{"class":138},[128,87427,87428,87430,87432,87434,87436,87438],{"class":130,"line":1113},[128,87429,55526],{"class":138},[128,87431,54994],{"class":54685},[128,87433,56868],{"class":199},[128,87435,270],{"class":138},[128,87437,65959],{"class":176},[128,87439,54692],{"class":138},[128,87441,87442,87444,87446,87449,87451,87453,87455,87457,87459,87461,87463,87465],{"class":130,"line":1124},[128,87443,54726],{"class":138},[128,87445,54994],{"class":54685},[128,87447,87448],{"class":138},">合计：\u003C",[128,87450,128],{"class":54685},[128,87452,56868],{"class":199},[128,87454,270],{"class":138},[128,87456,2274],{"class":176},[128,87458,58695],{"class":138},[128,87460,128],{"class":54685},[128,87462,58695],{"class":138},[128,87464,54994],{"class":54685},[128,87466,54692],{"class":138},[128,87468,87469,87471,87473],{"class":130,"line":1129},[128,87470,55799],{"class":138},[128,87472,54994],{"class":54685},[128,87474,54692],{"class":138},[128,87476,87477,87479,87481],{"class":130,"line":1134},[128,87478,55526],{"class":138},[128,87480,55196],{"class":54685},[128,87482,54692],{"class":138},[128,87484,87485,87487,87489,87491],{"class":130,"line":1150},[128,87486,14748],{"class":134},[128,87488,82751],{"class":166},[128,87490,170],{"class":134},[128,87492,2246],{"class":138},[128,87494,87495],{"class":130,"line":1164},[128,87496,82760],{"class":138},[128,87498,87499,87501,87503],{"class":130,"line":1178},[128,87500,82765],{"class":138},[128,87502,82768],{"class":176},[128,87504,2665],{"class":138},[128,87506,87507,87509,87511],{"class":130,"line":1183},[128,87508,82775],{"class":138},[128,87510,82778],{"class":176},[128,87512,2665],{"class":138},[128,87514,87515,87517,87520],{"class":130,"line":1199},[128,87516,82785],{"class":138},[128,87518,87519],{"class":166},"289.9",[128,87521,2665],{"class":138},[128,87523,87524,87526,87528],{"class":130,"line":1214},[128,87525,82795],{"class":138},[128,87527,82798],{"class":176},[128,87529,2665],{"class":138},[128,87531,87532,87535,87537],{"class":130,"line":1229},[128,87533,87534],{"class":138},"        count: ",[128,87536,409],{"class":166},[128,87538,2665],{"class":138},[128,87540,87541,87544,87547],{"class":130,"line":1234},[128,87542,87543],{"class":138},"        spec: { color: ",[128,87545,87546],{"class":176},"'白色'",[128,87548,58984],{"class":138},[128,87550,87551],{"class":130,"line":1239},[128,87552,81266],{"class":138},[128,87554,87555],{"class":130,"line":1251},[128,87556,82760],{"class":138},[128,87558,87559,87561,87563],{"class":130,"line":1256},[128,87560,82765],{"class":138},[128,87562,82859],{"class":176},[128,87564,2665],{"class":138},[128,87566,87567,87569,87571],{"class":130,"line":1261},[128,87568,82775],{"class":138},[128,87570,82868],{"class":176},[128,87572,2665],{"class":138},[128,87574,87575,87577,87580],{"class":130,"line":1271},[128,87576,82785],{"class":138},[128,87578,87579],{"class":166},"109.8",[128,87581,2665],{"class":138},[128,87583,87584,87586,87588],{"class":130,"line":1287},[128,87585,82795],{"class":138},[128,87587,82886],{"class":176},[128,87589,2665],{"class":138},[128,87591,87592,87594,87596],{"class":130,"line":1296},[128,87593,87534],{"class":138},[128,87595,3827],{"class":166},[128,87597,2665],{"class":138},[128,87599,87600,87603,87605,87607,87609],{"class":130,"line":1301},[128,87601,87602],{"class":138},"        spec: { size: ",[128,87604,85276],{"class":176},[128,87606,58844],{"class":138},[128,87608,85281],{"class":176},[128,87610,58984],{"class":138},[128,87612,87613],{"class":130,"line":1314},[128,87614,81266],{"class":138},[128,87616,87617],{"class":130,"line":1325},[128,87618,82760],{"class":138},[128,87620,87621,87623,87625],{"class":130,"line":1330},[128,87622,82765],{"class":138},[128,87624,82903],{"class":176},[128,87626,2665],{"class":138},[128,87628,87629,87631,87633],{"class":130,"line":1335},[128,87630,82775],{"class":138},[128,87632,82912],{"class":176},[128,87634,2665],{"class":138},[128,87636,87637,87639,87642],{"class":130,"line":1341},[128,87638,82785],{"class":138},[128,87640,87641],{"class":166},"488",[128,87643,2665],{"class":138},[128,87645,87646,87648,87650],{"class":130,"line":1346},[128,87647,82795],{"class":138},[128,87649,82930],{"class":176},[128,87651,2665],{"class":138},[128,87653,87654,87656,87658],{"class":130,"line":1351},[128,87655,87534],{"class":138},[128,87657,2592],{"class":166},[128,87659,2665],{"class":138},[128,87661,87662,87664,87667,87670,87673],{"class":130,"line":1362},[128,87663,87543],{"class":138},[128,87665,87666],{"class":176},"'青色'",[128,87668,87669],{"class":138},", sum: ",[128,87671,87672],{"class":176},"'一大四小'",[128,87674,58984],{"class":138},[128,87676,87677],{"class":130,"line":1370},[128,87678,81266],{"class":138},[128,87680,87681],{"class":130,"line":1397},[128,87682,82760],{"class":138},[128,87684,87685,87687,87689],{"class":130,"line":1417},[128,87686,82765],{"class":138},[128,87688,82947],{"class":176},[128,87690,2665],{"class":138},[128,87692,87693,87695,87697],{"class":130,"line":1437},[128,87694,82775],{"class":138},[128,87696,82956],{"class":176},[128,87698,2665],{"class":138},[128,87700,87701,87703,87706],{"class":130,"line":1458},[128,87702,82785],{"class":138},[128,87704,87705],{"class":166},"139",[128,87707,2665],{"class":138},[128,87709,87710,87712,87714],{"class":130,"line":1464},[128,87711,82795],{"class":138},[128,87713,82974],{"class":176},[128,87715,2665],{"class":138},[128,87717,87718,87720,87722],{"class":130,"line":1469},[128,87719,87534],{"class":138},[128,87721,2592],{"class":166},[128,87723,2665],{"class":138},[128,87725,87726,87728,87731,87733,87736],{"class":130,"line":1474},[128,87727,87602],{"class":138},[128,87729,87730],{"class":176},"'小号'",[128,87732,58844],{"class":138},[128,87734,87735],{"class":176},"'紫色'",[128,87737,58850],{"class":138},[128,87739,87740,87743],{"class":130,"line":1484},[128,87741,87742],{"class":138},"        gift: ",[128,87744,87745],{"class":176},"'50g茶叶,清洗球'\n",[128,87747,87748],{"class":130,"line":1493},[128,87749,55780],{"class":138},[128,87751,87752],{"class":130,"line":1505},[128,87753,56491],{"class":138},[128,87755,87756],{"class":130,"line":1510},[128,87757,87758],{"class":3814},"    \u002F\u002F  1.根据数据渲染页面\n",[128,87760,87761,87763,87765,87767,87769,87771,87773,87775,87777,87779,87781,87783],{"class":130,"line":1515},[128,87762,55789],{"class":138},[128,87764,57780],{"class":199},[128,87766,253],{"class":138},[128,87768,83274],{"class":176},[128,87770,77623],{"class":138},[128,87772,270],{"class":134},[128,87774,83421],{"class":138},[128,87776,77418],{"class":199},[128,87778,253],{"class":138},[128,87780,83169],{"class":266},[128,87782,83172],{"class":134},[128,87784,1959],{"class":138},[128,87786,87787],{"class":130,"line":1543},[128,87788,87789],{"class":3814},"      \u002F\u002F 对象解构\n",[128,87791,87792,87794,87796,87798,87800,87802,87804,87807,87809,87811,87813,87816,87818,87821,87823,87825],{"class":130,"line":1554},[128,87793,61608],{"class":134},[128,87795,83181],{"class":138},[128,87797,83193],{"class":166},[128,87799,258],{"class":138},[128,87801,2773],{"class":166},[128,87803,258],{"class":138},[128,87805,87806],{"class":166},"count",[128,87808,258],{"class":138},[128,87810,83188],{"class":166},[128,87812,258],{"class":138},[128,87814,87815],{"class":166},"spec",[128,87817,258],{"class":138},[128,87819,87820],{"class":166},"gift",[128,87822,83196],{"class":138},[128,87824,270],{"class":134},[128,87826,83201],{"class":138},[128,87828,87829],{"class":130,"line":1560},[128,87830,87831],{"class":3814},"      \u002F\u002F 规格文字模块处理\n",[128,87833,87834,87836,87839,87841,87843,87845,87847,87849,87851,87853],{"class":130,"line":1565},[128,87835,61608],{"class":134},[128,87837,87838],{"class":166}," text",[128,87840,170],{"class":134},[128,87842,85311],{"class":138},[128,87844,85314],{"class":199},[128,87846,85317],{"class":138},[128,87848,77597],{"class":199},[128,87850,253],{"class":138},[128,87852,85324],{"class":176},[128,87854,180],{"class":138},[128,87856,87857],{"class":130,"line":1570},[128,87858,87859],{"class":3814},"      \u002F\u002F 处理赠品模块\n",[128,87861,87862,87864,87866,87868,87871,87873,87875,87877,87879,87882,87884,87886,87888,87890,87892,87895,87897,87900,87902,87904,87906,87908,87910,87912],{"class":130,"line":1580},[128,87863,61608],{"class":134},[128,87865,77294],{"class":166},[128,87867,170],{"class":134},[128,87869,87870],{"class":138}," gift ",[128,87872,4731],{"class":134},[128,87874,86485],{"class":138},[128,87876,86488],{"class":199},[128,87878,253],{"class":138},[128,87880,87881],{"class":176},"','",[128,87883,34300],{"class":138},[128,87885,77418],{"class":199},[128,87887,253],{"class":138},[128,87889,83169],{"class":266},[128,87891,83172],{"class":134},[128,87893,87894],{"class":176}," `\u003Cspan class=\"tag\">【赠品】${",[128,87896,83169],{"class":138},[128,87898,87899],{"class":176},"}\u003C\u002Fspan>`",[128,87901,34300],{"class":138},[128,87903,77597],{"class":199},[128,87905,253],{"class":138},[128,87907,77602],{"class":176},[128,87909,276],{"class":138},[128,87911,4607],{"class":134},[128,87913,73479],{"class":176},[128,87915,87916],{"class":130,"line":1591},[128,87917,87918],{"class":3814},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[128,87920,87921,87923,87926,87928,87931,87933,87935,87937,87940,87942,87944,87946,87949,87951,87953],{"class":130,"line":1596},[128,87922,61608],{"class":134},[128,87924,87925],{"class":166}," subtotal",[128,87927,170],{"class":134},[128,87929,87930],{"class":138}," ((price ",[128,87932,4205],{"class":134},[128,87934,9312],{"class":166},[128,87936,10075],{"class":134},[128,87938,87939],{"class":138}," count) ",[128,87941,4333],{"class":134},[128,87943,9312],{"class":166},[128,87945,34300],{"class":138},[128,87947,87948],{"class":199},"toFixed",[128,87950,253],{"class":138},[128,87952,409],{"class":166},[128,87954,180],{"class":138},[128,87956,87957],{"class":130,"line":1605},[128,87958,160],{"emptyLinePlaceholder":159},[128,87960,87961,87963],{"class":130,"line":1611},[128,87962,77356],{"class":134},[128,87964,73543],{"class":176},[128,87966,87967],{"class":130,"line":1628},[128,87968,87969],{"class":176},"        \u003Cdiv class=\"item\">\n",[128,87971,87972,87975,87977],{"class":130,"line":1633},[128,87973,87974],{"class":176},"          \u003Cimg src=\"${",[128,87976,83193],{"class":138},[128,87978,83225],{"class":176},[128,87980,87981,87984,87986,87989,87991],{"class":130,"line":1648},[128,87982,87983],{"class":176},"          \u003Cp class=\"name\">${",[128,87985,2773],{"class":138},[128,87987,87988],{"class":176},"}${",[128,87990,4914],{"class":138},[128,87992,83235],{"class":176},[128,87994,87995,87998,88000],{"class":130,"line":1654},[128,87996,87997],{"class":176},"          \u003Cp class=\"spec\">${",[128,87999,111],{"class":138},[128,88001,83235],{"class":176},[128,88003,88004,88007,88009,88011,88013,88015,88017,88019],{"class":130,"line":1669},[128,88005,88006],{"class":176},"          \u003Cp class=\"price\">${",[128,88008,83188],{"class":138},[128,88010,4307],{"class":176},[128,88012,87948],{"class":199},[128,88014,253],{"class":176},[128,88016,409],{"class":166},[128,88018,4179],{"class":176},[128,88020,83235],{"class":176},[128,88022,88023,88026,88028],{"class":130,"line":1675},[128,88024,88025],{"class":176},"          \u003Cp class=\"count\">x${",[128,88027,87806],{"class":138},[128,88029,83235],{"class":176},[128,88031,88032,88035,88038],{"class":130,"line":1689},[128,88033,88034],{"class":176},"          \u003Cp class=\"sub-total\">${",[128,88036,88037],{"class":138},"subtotal",[128,88039,83235],{"class":176},[128,88041,88042],{"class":130,"line":1695},[128,88043,88044],{"class":176},"        \u003C\u002Fdiv> \n",[128,88046,88047],{"class":130,"line":1709},[128,88048,88049],{"class":176},"             `\n",[128,88051,88052,88055,88057,88059,88061],{"class":130,"line":1715},[128,88053,88054],{"class":138},"    }).",[128,88056,77597],{"class":199},[128,88058,253],{"class":138},[128,88060,77602],{"class":176},[128,88062,180],{"class":138},[128,88064,88065],{"class":130,"line":1729},[128,88066,88067],{"class":3814},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[128,88069,88070,88072,88074,88076,88078,88081,88083,88086,88088,88090,88092,88095,88098,88100,88103,88105,88107,88109,88112,88114,88116,88118,88120],{"class":130,"line":1735},[128,88071,14748],{"class":134},[128,88073,66163],{"class":166},[128,88075,170],{"class":134},[128,88077,83421],{"class":138},[128,88079,88080],{"class":199},"reduce",[128,88082,5961],{"class":138},[128,88084,88085],{"class":266},"prev",[128,88087,258],{"class":138},[128,88089,83169],{"class":266},[128,88091,276],{"class":138},[128,88093,88094],{"class":134},"=>",[128,88096,88097],{"class":138}," prev ",[128,88099,2457],{"class":134},[128,88101,88102],{"class":138}," (item.price ",[128,88104,4205],{"class":134},[128,88106,9312],{"class":166},[128,88108,10075],{"class":134},[128,88110,88111],{"class":138}," item.count) ",[128,88113,4333],{"class":134},[128,88115,9312],{"class":166},[128,88117,258],{"class":138},[128,88119,2452],{"class":166},[128,88121,180],{"class":138},[128,88123,88124,88126,88128,88130,88133,88135,88137,88140,88142,88144,88146],{"class":130,"line":1749},[128,88125,55789],{"class":138},[128,88127,57780],{"class":199},[128,88129,253],{"class":138},[128,88131,88132],{"class":176},"'.amount'",[128,88134,77623],{"class":138},[128,88136,270],{"class":134},[128,88138,88139],{"class":138}," total.",[128,88141,87948],{"class":199},[128,88143,253],{"class":138},[128,88145,409],{"class":166},[128,88147,180],{"class":138},[128,88149,88150,88152,88154],{"class":130,"line":1761},[128,88151,55799],{"class":138},[128,88153,55196],{"class":54685},[128,88155,54692],{"class":138},[128,88157,88158,88160,88162],{"class":130,"line":1767},[128,88159,55168],{"class":138},[128,88161,55183],{"class":54685},[128,88163,54692],{"class":138},[128,88165,88166],{"class":130,"line":1775},[128,88167,160],{"emptyLinePlaceholder":159},[128,88169,88170,88172,88174],{"class":130,"line":1787},[128,88171,55168],{"class":138},[128,88173,54020],{"class":54685},[128,88175,54692],{"class":138},[14,88177,88179],{"id":88178},"_411-编程思想","4.11 编程思想",[72,88181,88183],{"id":88182},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,88185,88186,88189],{},[3903,88187,88188],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,88191,88192],{},"调用就可以了",[19,88194,88195],{},[5074,88196],{"alt":112,"src":88197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[72,88199,88201],{"id":88200},"_4112-面向对象","4.11.2 面向对象",[19,88203,88204],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,88206,88207],{},[5074,88208],{"alt":112,"src":88209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,88211,88212],{},"面向对象的特性：",[4752,88214,88215,88218,88221],{},[29,88216,88217],{},"封装性",[29,88219,88220],{},"继承性",[29,88222,88223],{},"多态性",[72,88225,88227],{"id":88226},"_4113-两者比较","4.11.3 两者比较",[19,88229,88230],{},[5074,88231],{"alt":112,"src":88232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,88234,88236],{"id":88235},"_412-构造函数回顾","4.12 构造函数回顾",[19,88238,88239],{},[5074,88240],{"alt":112,"src":88241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,88243,88244],{},[5074,88245],{"alt":112,"src":88246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,88248,88249],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,88251,88252],{},[5074,88253],{"alt":112,"src":88254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,88256,88258],{"id":88257},"_413-原型","4.13 原型",[72,88260,88262],{"id":88261},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,88264,88265],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,88267,88268],{},[5074,88269],{"alt":112,"src":88270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,88272,88273],{},[5074,88274],{"alt":112,"src":88275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,88277,88278],{},"原型是构造函数的属性，它也是一个对象",[19,88280,88281],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,88283,88284],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[106,88286,88288],{"className":56449,"code":88287,"language":56451,"meta":112,"style":112},"\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",[114,88289,88290,88298,88303,88311,88316,88321,88326,88331,88336,88340,88344,88348,88353,88358,88362,88367,88372,88377,88382,88387,88391,88399],{"__ignoreMap":112},[128,88291,88292,88294,88296],{"class":130,"line":131},[128,88293,4657],{"class":138},[128,88295,55183],{"class":54685},[128,88297,54692],{"class":138},[128,88299,88300],{"class":130,"line":142},[128,88301,88302],{"class":3814},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[128,88304,88305,88307,88309],{"class":130,"line":156},[128,88306,55526],{"class":138},[128,88308,55196],{"class":54685},[128,88310,54692],{"class":138},[128,88312,88313],{"class":130,"line":163},[128,88314,88315],{"class":138},"    function Star(uname, age) {\n",[128,88317,88318],{"class":130,"line":183},[128,88319,88320],{"class":138},"      this.uname = uname,\n",[128,88322,88323],{"class":130,"line":188},[128,88324,88325],{"class":138},"        this.age = age\n",[128,88327,88328],{"class":130,"line":193},[128,88329,88330],{"class":138},"      \u002F\u002F this.sing = function () {\n",[128,88332,88333],{"class":130,"line":206},[128,88334,88335],{"class":138},"      \u002F\u002F   console.log('唱歌')\n",[128,88337,88338],{"class":130,"line":221},[128,88339,160],{"emptyLinePlaceholder":159},[128,88341,88342],{"class":130,"line":230},[128,88343,63417],{"class":138},[128,88345,88346],{"class":130,"line":235},[128,88347,5773],{"class":138},[128,88349,88350],{"class":130,"line":244},[128,88351,88352],{"class":138},"    Star.prototype.sing = function () {\n",[128,88354,88355],{"class":130,"line":287},[128,88356,88357],{"class":138},"      console.log('唱歌')\n",[128,88359,88360],{"class":130,"line":301},[128,88361,5773],{"class":138},[128,88363,88364],{"class":130,"line":310},[128,88365,88366],{"class":138},"    \u002F\u002F console.dir(Star.prototype)\n",[128,88368,88369],{"class":130,"line":323},[128,88370,88371],{"class":138},"    const pink = new Star('pink', 18)\n",[128,88373,88374],{"class":130,"line":330},[128,88375,88376],{"class":138},"    const red = new Star('red', 20)\n",[128,88378,88379],{"class":130,"line":335},[128,88380,88381],{"class":138},"    pink.sing()\n",[128,88383,88384],{"class":130,"line":340},[128,88385,88386],{"class":138},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[128,88388,88389],{"class":130,"line":351},[128,88390,160],{"emptyLinePlaceholder":159},[128,88392,88393,88395,88397],{"class":130,"line":384},[128,88394,55799],{"class":138},[128,88396,55196],{"class":54685},[128,88398,54692],{"class":138},[128,88400,88401,88403,88405],{"class":130,"line":414},[128,88402,55168],{"class":138},[128,88404,55183],{"class":54685},[128,88406,54692],{"class":138},[19,88408,88409],{},[5074,88410],{"alt":112,"src":88411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[106,88413,88415],{"className":56449,"code":88414,"language":56451,"meta":112,"style":112},"\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",[114,88416,88417,88425,88433,88438,88443,88448,88453,88457,88462,88467,88472,88476,88481,88485,88489,88494,88498,88506],{"__ignoreMap":112},[128,88418,88419,88421,88423],{"class":130,"line":131},[128,88420,4657],{"class":138},[128,88422,55183],{"class":54685},[128,88424,54692],{"class":138},[128,88426,88427,88429,88431],{"class":130,"line":142},[128,88428,55526],{"class":138},[128,88430,55196],{"class":54685},[128,88432,54692],{"class":138},[128,88434,88435],{"class":130,"line":156},[128,88436,88437],{"class":138},"    let that\n",[128,88439,88440],{"class":130,"line":163},[128,88441,88442],{"class":138},"    function Star(uname) {\n",[128,88444,88445],{"class":130,"line":183},[128,88446,88447],{"class":138},"      this.uname = uname\n",[128,88449,88450],{"class":130,"line":188},[128,88451,88452],{"class":138},"      that = this\n",[128,88454,88455],{"class":130,"line":193},[128,88456,5773],{"class":138},[128,88458,88459],{"class":130,"line":206},[128,88460,88461],{"class":138},"    \u002F\u002F 实例对象是 ldh\n",[128,88463,88464],{"class":130,"line":221},[128,88465,88466],{"class":138},"    const ldh = new Star('刘德华')\n",[128,88468,88469],{"class":130,"line":230},[128,88470,88471],{"class":138},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[128,88473,88474],{"class":130,"line":235},[128,88475,160],{"emptyLinePlaceholder":159},[128,88477,88478],{"class":130,"line":244},[128,88479,88480],{"class":138},"    Star.sing = function () {\n",[128,88482,88483],{"class":130,"line":287},[128,88484,88357],{"class":138},[128,88486,88487],{"class":130,"line":301},[128,88488,5773],{"class":138},[128,88490,88491],{"class":130,"line":310},[128,88492,88493],{"class":138},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[128,88495,88496],{"class":130,"line":323},[128,88497,160],{"emptyLinePlaceholder":159},[128,88499,88500,88502,88504],{"class":130,"line":330},[128,88501,55799],{"class":138},[128,88503,55196],{"class":54685},[128,88505,54692],{"class":138},[128,88507,88508,88510,88512],{"class":130,"line":335},[128,88509,55168],{"class":138},[128,88511,55183],{"class":54685},[128,88513,54692],{"class":138},[19,88515,88516],{},"构造函数的this指向的是实例对象；",[19,88518,88519],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[72,88521,88523],{"id":88522},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,88525,88526],{},[5074,88527],{"alt":112,"src":88528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[106,88530,88532],{"className":56449,"code":88531,"language":56451,"meta":112,"style":112},"\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",[114,88533,88534,88542,88550,88555,88560,88565,88570,88575,88580,88585,88590,88595,88600,88604,88609,88614,88619,88624,88628,88633,88638,88643,88648,88652,88657,88662,88667,88672,88676,88681,88685,88693],{"__ignoreMap":112},[128,88535,88536,88538,88540],{"class":130,"line":131},[128,88537,4657],{"class":138},[128,88539,55183],{"class":54685},[128,88541,54692],{"class":138},[128,88543,88544,88546,88548],{"class":130,"line":142},[128,88545,55526],{"class":138},[128,88547,55196],{"class":54685},[128,88549,54692],{"class":138},[128,88551,88552],{"class":130,"line":156},[128,88553,88554],{"class":138},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[128,88556,88557],{"class":130,"line":163},[128,88558,88559],{"class":138},"    const arr = [1, 2, 3]\n",[128,88561,88562],{"class":130,"line":183},[128,88563,88564],{"class":138},"    \u002F\u002F 自己定义数组的扩展方法\n",[128,88566,88567],{"class":130,"line":188},[128,88568,88569],{"class":138},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[128,88571,88572],{"class":130,"line":193},[128,88573,88574],{"class":138},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[128,88576,88577],{"class":130,"line":206},[128,88578,88579],{"class":138},"    \u002F\u002F ①.最大值\n",[128,88581,88582],{"class":130,"line":221},[128,88583,88584],{"class":138},"    Array.prototype.max = function () {\n",[128,88586,88587],{"class":130,"line":230},[128,88588,88589],{"class":138},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[128,88591,88592],{"class":130,"line":235},[128,88593,88594],{"class":138},"      return Math.max(...this)\n",[128,88596,88597],{"class":130,"line":244},[128,88598,88599],{"class":138},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[128,88601,88602],{"class":130,"line":287},[128,88603,5773],{"class":138},[128,88605,88606],{"class":130,"line":301},[128,88607,88608],{"class":138},"    console.log(arr.max())\n",[128,88610,88611],{"class":130,"line":310},[128,88612,88613],{"class":138},"    \u002F\u002F ②最小值\n",[128,88615,88616],{"class":130,"line":323},[128,88617,88618],{"class":138},"    Array.prototype.min = function () {\n",[128,88620,88621],{"class":130,"line":330},[128,88622,88623],{"class":138},"      return Math.min(...this)\n",[128,88625,88626],{"class":130,"line":335},[128,88627,5773],{"class":138},[128,88629,88630],{"class":130,"line":340},[128,88631,88632],{"class":138},"    console.log(arr.min())\n",[128,88634,88635],{"class":130,"line":351},[128,88636,88637],{"class":138},"    \u002F\u002F③求和\n",[128,88639,88640],{"class":130,"line":384},[128,88641,88642],{"class":138},"    Array.prototype.sum = function () {\n",[128,88644,88645],{"class":130,"line":414},[128,88646,88647],{"class":138},"      return this.reduce((prev, current) => prev + current, 0)\n",[128,88649,88650],{"class":130,"line":419},[128,88651,5773],{"class":138},[128,88653,88654],{"class":130,"line":424},[128,88655,88656],{"class":138},"    console.log(arr.sum())\n",[128,88658,88659],{"class":130,"line":434},[128,88660,88661],{"class":138},"    \u002F\u002F ③排序\n",[128,88663,88664],{"class":130,"line":447},[128,88665,88666],{"class":138},"    Array.prototype.rever = function () {\n",[128,88668,88669],{"class":130,"line":459},[128,88670,88671],{"class":138},"      return this.reverse()\n",[128,88673,88674],{"class":130,"line":471},[128,88675,5773],{"class":138},[128,88677,88678],{"class":130,"line":483},[128,88679,88680],{"class":138},"    console.log(arr.rever())\n",[128,88682,88683],{"class":130,"line":495},[128,88684,160],{"emptyLinePlaceholder":159},[128,88686,88687,88689,88691],{"class":130,"line":507},[128,88688,55799],{"class":138},[128,88690,55196],{"class":54685},[128,88692,54692],{"class":138},[128,88694,88695,88697,88699],{"class":130,"line":519},[128,88696,55168],{"class":138},[128,88698,55183],{"class":54685},[128,88700,54692],{"class":138},[19,88702,88703],{},[5074,88704],{"alt":112,"src":88705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[72,88707,88709],{"id":88708},"_4133-constructor-属性","4.13.3 constructor 属性",[19,88711,88712],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,88714,88715],{},[5074,88716],{"alt":112,"src":88717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[106,88719,88721],{"className":56449,"code":88720,"language":56451,"meta":112,"style":112},"\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",[114,88722,88723,88731,88739,88744,88749,88753,88758,88763,88768,88776],{"__ignoreMap":112},[128,88724,88725,88727,88729],{"class":130,"line":131},[128,88726,4657],{"class":138},[128,88728,55183],{"class":54685},[128,88730,54692],{"class":138},[128,88732,88733,88735,88737],{"class":130,"line":142},[128,88734,55526],{"class":138},[128,88736,55196],{"class":54685},[128,88738,54692],{"class":138},[128,88740,88741],{"class":130,"line":156},[128,88742,88743],{"class":138},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[128,88745,88746],{"class":130,"line":163},[128,88747,88748],{"class":138},"    function Star() {\n",[128,88750,88751],{"class":130,"line":183},[128,88752,5773],{"class":138},[128,88754,88755],{"class":130,"line":188},[128,88756,88757],{"class":138},"    const ldh = new Star()\n",[128,88759,88760],{"class":130,"line":193},[128,88761,88762],{"class":138},"    console.log(Star.prototype)\n",[128,88764,88765],{"class":130,"line":206},[128,88766,88767],{"class":138},"    console.log(Star.prototype.constructor === Star)\n",[128,88769,88770,88772,88774],{"class":130,"line":221},[128,88771,55799],{"class":138},[128,88773,55196],{"class":54685},[128,88775,54692],{"class":138},[128,88777,88778,88780,88782],{"class":130,"line":230},[128,88779,55168],{"class":138},[128,88781,55183],{"class":54685},[128,88783,54692],{"class":138},[19,88785,88786],{},[5074,88787],{"alt":112,"src":88788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,88790,88791],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[106,88793,88795],{"className":56449,"code":88794,"language":56451,"meta":112,"style":112},"  \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",[114,88796,88797,88805,88809,88813,88817,88822,88827,88832,88836,88841,88846,88851,88856,88861,88866,88870,88874,88879,88884,88889,88893,88898,88903,88907,88911,88915],{"__ignoreMap":112},[128,88798,88799,88801,88803],{"class":130,"line":131},[128,88800,55526],{"class":138},[128,88802,55196],{"class":54685},[128,88804,54692],{"class":138},[128,88806,88807],{"class":130,"line":142},[128,88808,88743],{"class":138},[128,88810,88811],{"class":130,"line":156},[128,88812,88748],{"class":138},[128,88814,88815],{"class":130,"line":163},[128,88816,5773],{"class":138},[128,88818,88819],{"class":130,"line":183},[128,88820,88821],{"class":138},"    \u002F\u002F const ldh = new Star()\n",[128,88823,88824],{"class":130,"line":188},[128,88825,88826],{"class":138},"    \u002F\u002F console.log(Star.prototype)\n",[128,88828,88829],{"class":130,"line":193},[128,88830,88831],{"class":138},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[128,88833,88834],{"class":130,"line":206},[128,88835,160],{"emptyLinePlaceholder":159},[128,88837,88838],{"class":130,"line":221},[128,88839,88840],{"class":138},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[128,88842,88843],{"class":130,"line":230},[128,88844,88845],{"class":138},"    \u002F\u002F Star.prototype.sing = function () {\n",[128,88847,88848],{"class":130,"line":235},[128,88849,88850],{"class":138},"    \u002F\u002F   console.log('唱歌')\n",[128,88852,88853],{"class":130,"line":244},[128,88854,88855],{"class":138},"    \u002F\u002F }\n",[128,88857,88858],{"class":130,"line":287},[128,88859,88860],{"class":138},"    \u002F\u002F Star.prototype.dance = function () {\n",[128,88862,88863],{"class":130,"line":301},[128,88864,88865],{"class":138},"    \u002F\u002F   console.log('跳舞')\n",[128,88867,88868],{"class":130,"line":310},[128,88869,88855],{"class":138},[128,88871,88872],{"class":130,"line":323},[128,88873,88762],{"class":138},[128,88875,88876],{"class":130,"line":330},[128,88877,88878],{"class":138},"    Star.prototype = {\n",[128,88880,88881],{"class":130,"line":335},[128,88882,88883],{"class":138},"      sing: function () {\n",[128,88885,88886],{"class":130,"line":340},[128,88887,88888],{"class":138},"        console.log('唱歌')\n",[128,88890,88891],{"class":130,"line":351},[128,88892,81266],{"class":138},[128,88894,88895],{"class":130,"line":384},[128,88896,88897],{"class":138},"      dance: function () {\n",[128,88899,88900],{"class":130,"line":414},[128,88901,88902],{"class":138},"        console.log('跳舞')\n",[128,88904,88905],{"class":130,"line":419},[128,88906,55780],{"class":138},[128,88908,88909],{"class":130,"line":424},[128,88910,5773],{"class":138},[128,88912,88913],{"class":130,"line":434},[128,88914,88762],{"class":138},[128,88916,88917,88919,88921],{"class":130,"line":447},[128,88918,55799],{"class":138},[128,88920,55196],{"class":54685},[128,88922,54692],{"class":138},[19,88924,88925],{},"进行输出结果后会发现：",[19,88927,88928],{},[5074,88929],{"alt":112,"src":88930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,88932,88933],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,88935,88936],{},"所以，要重新指回创造这个原型对象的构造函数",[106,88938,88940],{"className":74588,"code":88939,"language":74590,"meta":112,"style":112},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[114,88941,88942,88956,88961,88966,88977,88990,88995,89006,89020,89024],{"__ignoreMap":112},[128,88943,88944,88947,88949,88952,88954],{"class":130,"line":131},[128,88945,88946],{"class":166},"Star",[128,88948,4307],{"class":138},[128,88950,88951],{"class":166},"prototype",[128,88953,170],{"class":134},[128,88955,1959],{"class":138},[128,88957,88958],{"class":130,"line":142},[128,88959,88960],{"class":3814},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[128,88962,88963],{"class":130,"line":156},[128,88964,88965],{"class":138},"  constructor: Star,\n",[128,88967,88968,88971,88973,88975],{"class":130,"line":163},[128,88969,88970],{"class":199},"  sing",[128,88972,1967],{"class":138},[128,88974,57830],{"class":134},[128,88976,57833],{"class":138},[128,88978,88979,88981,88983,88985,88988],{"class":130,"line":183},[128,88980,77128],{"class":138},[128,88982,61627],{"class":199},[128,88984,253],{"class":138},[128,88986,88987],{"class":176},"'唱歌'",[128,88989,180],{"class":138},[128,88991,88992],{"class":130,"line":188},[128,88993,88994],{"class":138},"   },\n",[128,88996,88997,89000,89002,89004],{"class":130,"line":193},[128,88998,88999],{"class":199},"   dance",[128,89001,1967],{"class":138},[128,89003,57830],{"class":134},[128,89005,57833],{"class":138},[128,89007,89008,89011,89013,89015,89018],{"class":130,"line":206},[128,89009,89010],{"class":138},"     console.",[128,89012,61627],{"class":199},[128,89014,253],{"class":138},[128,89016,89017],{"class":176},"'跳舞'",[128,89019,180],{"class":138},[128,89021,89022],{"class":130,"line":221},[128,89023,7875],{"class":138},[128,89025,89026],{"class":130,"line":230},[128,89027,2694],{"class":138},[19,89029,89030],{},[5074,89031],{"alt":112,"src":89032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,89034,89035],{},"总结1：",[19,89037,89038],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,89040,89041],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,89043,89044],{},"constructor指的是他的来源",[19,89046,89047],{},[5074,89048],{"alt":112,"src":89049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,89051,89052],{},[5074,89053],{"alt":112,"src":89054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,89056,89057],{},"总结2：",[19,89059,89060],{},[5074,89061],{"alt":112,"src":89062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,89064,89065],{},[5074,89066],{"alt":112,"src":89067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,89069,89070],{},[5074,89071],{"alt":112,"src":89072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[72,89074,89076],{"id":89075},"_4134-对象原型","4.13.4 对象原型",[19,89078,89079],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,89081,89082],{},"对象原型就是__proto__这个属性",[19,89084,89085],{},[5074,89086],{"alt":112,"src":89087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,89089,89090],{},[5074,89091],{"alt":112,"src":89092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,89094,89095],{},[5074,89096],{"alt":112,"src":89097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,89099,89100],{},[5074,89101],{"alt":112,"src":89102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[106,89104,89106],{"className":56449,"code":89105,"language":56451,"meta":112,"style":112},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[114,89107,89108,89116,89124,89128,89132,89136,89141,89149],{"__ignoreMap":112},[128,89109,89110,89112,89114],{"class":130,"line":131},[128,89111,4657],{"class":138},[128,89113,55183],{"class":54685},[128,89115,54692],{"class":138},[128,89117,89118,89120,89122],{"class":130,"line":142},[128,89119,55526],{"class":138},[128,89121,55196],{"class":54685},[128,89123,54692],{"class":138},[128,89125,89126],{"class":130,"line":156},[128,89127,88748],{"class":138},[128,89129,89130],{"class":130,"line":163},[128,89131,5773],{"class":138},[128,89133,89134],{"class":130,"line":183},[128,89135,88757],{"class":138},[128,89137,89138],{"class":130,"line":188},[128,89139,89140],{"class":138},"    console.log(ldh)\n",[128,89142,89143,89145,89147],{"class":130,"line":193},[128,89144,55799],{"class":138},[128,89146,55196],{"class":54685},[128,89148,54692],{"class":138},[128,89150,89151,89153,89155],{"class":130,"line":206},[128,89152,55168],{"class":138},[128,89154,55183],{"class":54685},[128,89156,54692],{"class":138},[19,89158,89159],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,89161,89162],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,89164,89165],{},[5074,89166],{"alt":112,"src":89167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,89169,89170],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,89172,89173],{},"对象原型指向原型对象",[19,89175,89176],{},[5074,89177],{"alt":112,"src":89178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,89180,89181],{},[5074,89182],{"alt":112,"src":89183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,89185,89186],{},[5074,89187],{"alt":112,"src":89188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[72,89190,89192],{"id":89191},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,89194,89195],{},[5074,89196],{"alt":112,"src":89197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[26,89199,89200,89203,89206,89209],{},[29,89201,89202],{},"构造函数通过new的形式实例化得到实例对象",[29,89204,89205],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[29,89207,89208],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[29,89210,89211],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,89213,89214],{},[5074,89215],{"alt":112,"src":89216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,89218,89219],{},"题目梳理：",[19,89221,89222],{},[5074,89223],{"alt":112,"src":89224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[72,89226,89228],{"id":89227},"_4136-原型继承","4.13.6 原型继承",[19,89230,89231],{},[5074,89232],{"alt":112,"src":89233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,89235,89236],{},[5074,89237],{"alt":112,"src":89238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,89240,89241],{},[5074,89242],{"alt":112,"src":89243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,89245,89246],{},[5074,89247],{"alt":112,"src":89248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,89250,89251],{},[5074,89252],{"alt":112,"src":89253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,89255,89256],{},[5074,89257],{"alt":112,"src":89258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,89260,89261],{},[5074,89262],{"alt":112,"src":89263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,89265,89266],{},[5074,89267],{"alt":112,"src":89268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,89270,89271],{},"回顾：构造函数每次new得到对象都是不同的",[72,89273,89275],{"id":89274},"_4137-原型链","4.13.7 原型链",[19,89277,89278],{},[5074,89279],{"alt":112,"src":89280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,89282,89283],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,89285,89286],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,89288,89289],{},"大哥是Object",[19,89291,89292],{},[5074,89293],{"alt":112,"src":89294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,89296,89297],{},[5074,89298],{"alt":112,"src":89299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,89301,89302],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,89304,89305],{},"万物皆对象",[72,89307,89309],{"id":89308},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,89311,89312],{},"模态框",[19,89314,89315],{},"以后遇见这个效果直接使用这个就行",[19,89317,89318],{},[5074,89319],{"alt":112,"src":89320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,89322,89323],{},[5074,89324],{"alt":112,"src":89325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,89327,89328],{},[5074,89329],{"alt":112,"src":89330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,89332,89333],{},[5074,89334],{"alt":112,"src":89335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,89337,89338],{},"补充知识点：",[26,89340,89341],{},[29,89342,89343],{},"append()",[19,89345,89346],{},[5074,89347],{"alt":112,"src":89348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[106,89350,89352],{"className":54018,"code":89351,"language":54020,"meta":112,"style":112},"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",[114,89353,89354,89359,89364,89369,89373,89377,89381,89386,89391,89396,89400],{"__ignoreMap":112},[128,89355,89356],{"class":130,"line":131},[128,89357,89358],{"class":138},"append(param1)\n",[128,89360,89361],{"class":130,"line":142},[128,89362,89363],{"class":138},"append(param1, param2)\n",[128,89365,89366],{"class":130,"line":156},[128,89367,89368],{"class":138},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[128,89370,89371],{"class":130,"line":163},[128,89372,160],{"emptyLinePlaceholder":159},[128,89374,89375],{"class":130,"line":183},[128,89376,160],{"emptyLinePlaceholder":159},[128,89378,89379],{"class":130,"line":188},[128,89380,160],{"emptyLinePlaceholder":159},[128,89382,89383],{"class":130,"line":193},[128,89384,89385],{"class":138},"let div = document.createElement(\"div\");\n",[128,89387,89388],{"class":130,"line":206},[128,89389,89390],{"class":138},"let p = document.createElement(\"p\");\n",[128,89392,89393],{"class":130,"line":221},[128,89394,89395],{"class":138},"div.append(p);\n",[128,89397,89398],{"class":130,"line":230},[128,89399,160],{"emptyLinePlaceholder":159},[128,89401,89402,89405,89407],{"class":130,"line":235},[128,89403,89404],{"class":138},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[128,89406,19],{"class":54685},[128,89408,89409],{"class":138},"> ]\n",[26,89411,89412],{"start":142},[29,89413,89414],{},"remove()",[19,89416,89417],{},"自己删自己",[19,89419,89420],{},[5074,89421],{"alt":112,"src":89422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[106,89424,89426],{"className":54018,"code":89425,"language":54020,"meta":112,"style":112},"\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",[114,89427,89428,89438,89452,89456,89464,89478,89498,89510,89518,89525,89537,89550,89585,89597,89608,89620,89632,89644,89671,89681,89685,89689,89698,89710,89724,89734,89746,89750,89754,89764,89775,89785,89795,89808,89821,89831,89835,89839,89848,89858,89870,89874,89878,89887,89897,89907,89919,89923,89927,89937,89953,89964,89974,89984,89996,90008,90020,90024,90028,90041,90052,90056,90064,90072,90076,90084,90104,90124,90132,90137,90163,90168,90173,90192,90197,90209,90214,90225,90235,90245,90250,90255,90259,90264,90269,90274,90294,90299,90319,90324,90338,90343,90348,90353,90369,90373,90378,90407,90412,90417,90422,90433,90437,90441,90445,90450,90475,90480,90505,90510,90519,90523,90528,90553,90557,90582,90586,90595,90599,90604,90622,90632,90636,90644,90652,90656],{"__ignoreMap":112},[128,89429,89430,89432,89434,89436],{"class":130,"line":131},[128,89431,54682],{"class":138},[128,89433,54686],{"class":54685},[128,89435,54689],{"class":199},[128,89437,54692],{"class":138},[128,89439,89440,89442,89444,89446,89448,89450],{"class":130,"line":142},[128,89441,4657],{"class":138},[128,89443,54020],{"class":54685},[128,89445,54701],{"class":199},[128,89447,270],{"class":138},[128,89449,54706],{"class":176},[128,89451,54692],{"class":138},[128,89453,89454],{"class":130,"line":156},[128,89455,160],{"emptyLinePlaceholder":159},[128,89457,89458,89460,89462],{"class":130,"line":163},[128,89459,4657],{"class":138},[128,89461,54719],{"class":54685},[128,89463,54692],{"class":138},[128,89465,89466,89468,89470,89472,89474,89476],{"class":130,"line":183},[128,89467,55526],{"class":138},[128,89469,54729],{"class":54685},[128,89471,54732],{"class":199},[128,89473,270],{"class":138},[128,89475,54737],{"class":176},[128,89477,54692],{"class":138},[128,89479,89480,89482,89484,89486,89488,89490,89492,89494,89496],{"class":130,"line":188},[128,89481,55526],{"class":138},[128,89483,54729],{"class":54685},[128,89485,18442],{"class":199},[128,89487,270],{"class":138},[128,89489,54776],{"class":176},[128,89491,54756],{"class":199},[128,89493,270],{"class":138},[128,89495,54783],{"class":176},[128,89497,54692],{"class":138},[128,89499,89500,89502,89504,89506,89508],{"class":130,"line":193},[128,89501,55526],{"class":138},[128,89503,2752],{"class":54685},[128,89505,54794],{"class":138},[128,89507,2752],{"class":54685},[128,89509,54692],{"class":138},[128,89511,89512,89514,89516],{"class":130,"line":206},[128,89513,55526],{"class":138},[128,89515,3659],{"class":54685},[128,89517,54692],{"class":138},[128,89519,89520,89523],{"class":130,"line":221},[128,89521,89522],{"class":199},"    .modal",[128,89524,1959],{"class":138},[128,89526,89527,89529,89531,89533,89535],{"class":130,"line":230},[128,89528,58152],{"class":166},[128,89530,1967],{"class":138},[128,89532,7540],{"class":166},[128,89534,54875],{"class":134},[128,89536,4905],{"class":138},[128,89538,89539,89542,89544,89546,89548],{"class":130,"line":235},[128,89540,89541],{"class":166},"      min-height",[128,89543,1967],{"class":138},[128,89545,4061],{"class":166},[128,89547,54875],{"class":134},[128,89549,4905],{"class":138},[128,89551,89552,89554,89556,89558,89560,89562,89564,89566,89568,89570,89572,89574,89576,89578,89580,89583],{"class":130,"line":244},[128,89553,82124],{"class":166},[128,89555,1967],{"class":138},[128,89557,2452],{"class":166},[128,89559,7659],{"class":166},[128,89561,5625],{"class":166},[128,89563,54875],{"class":134},[128,89565,82141],{"class":166},[128,89567,253],{"class":138},[128,89569,2452],{"class":166},[128,89571,258],{"class":138},[128,89573,2452],{"class":166},[128,89575,258],{"class":138},[128,89577,2452],{"class":166},[128,89579,258],{"class":138},[128,89581,89582],{"class":166},"0.1",[128,89584,6292],{"class":138},[128,89586,89587,89589,89591,89593,89595],{"class":130,"line":287},[128,89588,58515],{"class":166},[128,89590,1967],{"class":138},[128,89592,4043],{"class":166},[128,89594,54875],{"class":134},[128,89596,4905],{"class":138},[128,89598,89599,89601,89603,89606],{"class":130,"line":301},[128,89600,58140],{"class":166},[128,89602,1967],{"class":138},[128,89604,89605],{"class":166},"fixed",[128,89607,4905],{"class":138},[128,89609,89610,89613,89615,89618],{"class":130,"line":310},[128,89611,89612],{"class":166},"      z-index",[128,89614,1967],{"class":138},[128,89616,89617],{"class":166},"999",[128,89619,4905],{"class":138},[128,89621,89622,89624,89626,89628,89630],{"class":130,"line":323},[128,89623,58219],{"class":166},[128,89625,1967],{"class":138},[128,89627,4405],{"class":166},[128,89629,4078],{"class":134},[128,89631,4905],{"class":138},[128,89633,89634,89636,89638,89640,89642],{"class":130,"line":330},[128,89635,58328],{"class":166},[128,89637,1967],{"class":138},[128,89639,4405],{"class":166},[128,89641,4078],{"class":134},[128,89643,4905],{"class":138},[128,89645,89646,89648,89650,89652,89654,89657,89659,89661,89663,89665,89667,89669],{"class":130,"line":335},[128,89647,82165],{"class":166},[128,89649,1967],{"class":138},[128,89651,82170],{"class":166},[128,89653,253],{"class":138},[128,89655,89656],{"class":166},"-50",[128,89658,4078],{"class":134},[128,89660,258],{"class":138},[128,89662,89656],{"class":166},[128,89664,4078],{"class":134},[128,89666,258],{"class":138},[128,89668,2452],{"class":166},[128,89670,6292],{"class":138},[128,89672,89673,89675,89677,89679],{"class":130,"line":340},[128,89674,58265],{"class":166},[128,89676,1967],{"class":138},[128,89678,64221],{"class":166},[128,89680,4905],{"class":138},[128,89682,89683],{"class":130,"line":351},[128,89684,5773],{"class":138},[128,89686,89687],{"class":130,"line":384},[128,89688,160],{"emptyLinePlaceholder":159},[128,89690,89691,89693,89696],{"class":130,"line":414},[128,89692,89522],{"class":199},[128,89694,89695],{"class":199}," .header",[128,89697,1959],{"class":138},[128,89699,89700,89702,89704,89706,89708],{"class":130,"line":419},[128,89701,60739],{"class":166},[128,89703,1967],{"class":138},[128,89705,4151],{"class":166},[128,89707,54875],{"class":134},[128,89709,4905],{"class":138},[128,89711,89712,89714,89716,89718,89720,89722],{"class":130,"line":424},[128,89713,58076],{"class":166},[128,89715,1967],{"class":138},[128,89717,2452],{"class":166},[128,89719,5625],{"class":166},[128,89721,54875],{"class":134},[128,89723,4905],{"class":138},[128,89725,89726,89728,89730,89732],{"class":130,"line":434},[128,89727,58140],{"class":166},[128,89729,1967],{"class":138},[128,89731,58145],{"class":166},[128,89733,4905],{"class":138},[128,89735,89736,89738,89740,89742,89744],{"class":130,"line":447},[128,89737,58303],{"class":166},[128,89739,1967],{"class":138},[128,89741,4449],{"class":166},[128,89743,54875],{"class":134},[128,89745,4905],{"class":138},[128,89747,89748],{"class":130,"line":459},[128,89749,5773],{"class":138},[128,89751,89752],{"class":130,"line":471},[128,89753,160],{"emptyLinePlaceholder":159},[128,89755,89756,89758,89760,89762],{"class":130,"line":483},[128,89757,89522],{"class":199},[128,89759,89695],{"class":199},[128,89761,6603],{"class":54685},[128,89763,1959],{"class":138},[128,89765,89766,89769,89771,89773],{"class":130,"line":495},[128,89767,89768],{"class":166},"      font-style",[128,89770,1967],{"class":138},[128,89772,67219],{"class":166},[128,89774,4905],{"class":138},[128,89776,89777,89779,89781,89783],{"class":130,"line":507},[128,89778,60796],{"class":166},[128,89780,1967],{"class":138},[128,89782,65449],{"class":166},[128,89784,4905],{"class":138},[128,89786,89787,89789,89791,89793],{"class":130,"line":519},[128,89788,58140],{"class":166},[128,89790,1967],{"class":138},[128,89792,58212],{"class":166},[128,89794,4905],{"class":138},[128,89796,89797,89800,89802,89804,89806],{"class":130,"line":524},[128,89798,89799],{"class":166},"      right",[128,89801,1967],{"class":138},[128,89803,4324],{"class":166},[128,89805,54875],{"class":134},[128,89807,4905],{"class":138},[128,89809,89810,89812,89814,89817,89819],{"class":130,"line":529},[128,89811,58328],{"class":166},[128,89813,1967],{"class":138},[128,89815,89816],{"class":166},"-2",[128,89818,54875],{"class":134},[128,89820,4905],{"class":138},[128,89822,89823,89825,89827,89829],{"class":130,"line":540},[128,89824,65404],{"class":166},[128,89826,1967],{"class":138},[128,89828,65409],{"class":166},[128,89830,4905],{"class":138},[128,89832,89833],{"class":130,"line":555},[128,89834,5773],{"class":138},[128,89836,89837],{"class":130,"line":576},[128,89838,160],{"emptyLinePlaceholder":159},[128,89840,89841,89843,89846],{"class":130,"line":584},[128,89842,89522],{"class":199},[128,89844,89845],{"class":199}," .body",[128,89847,1959],{"class":138},[128,89849,89850,89852,89854,89856],{"class":130,"line":593},[128,89851,60666],{"class":166},[128,89853,1967],{"class":138},[128,89855,54975],{"class":166},[128,89857,4905],{"class":138},[128,89859,89860,89862,89864,89866,89868],{"class":130,"line":598},[128,89861,58076],{"class":166},[128,89863,1967],{"class":138},[128,89865,4196],{"class":166},[128,89867,54875],{"class":134},[128,89869,4905],{"class":138},[128,89871,89872],{"class":130,"line":603},[128,89873,5773],{"class":138},[128,89875,89876],{"class":130,"line":614},[128,89877,160],{"emptyLinePlaceholder":159},[128,89879,89880,89882,89885],{"class":130,"line":625},[128,89881,89522],{"class":199},[128,89883,89884],{"class":199}," .footer",[128,89886,1959],{"class":138},[128,89888,89889,89891,89893,89895],{"class":130,"line":633},[128,89890,58390],{"class":166},[128,89892,1967],{"class":138},[128,89894,54860],{"class":166},[128,89896,4905],{"class":138},[128,89898,89899,89901,89903,89905],{"class":130,"line":649},[128,89900,58401],{"class":166},[128,89902,1967],{"class":138},[128,89904,54963],{"class":166},[128,89906,4905],{"class":138},[128,89908,89909,89911,89913,89915,89917],{"class":130,"line":660},[128,89910,58076],{"class":166},[128,89912,1967],{"class":138},[128,89914,4196],{"class":166},[128,89916,54875],{"class":134},[128,89918,4905],{"class":138},[128,89920,89921],{"class":130,"line":673},[128,89922,5773],{"class":138},[128,89924,89925],{"class":130,"line":678},[128,89926,160],{"emptyLinePlaceholder":159},[128,89928,89929,89931,89933,89935],{"class":130,"line":683},[128,89930,89522],{"class":199},[128,89932,89884],{"class":199},[128,89934,5010],{"class":54685},[128,89936,1959],{"class":138},[128,89938,89939,89941,89943,89945,89947,89949,89951],{"class":130,"line":693},[128,89940,58076],{"class":166},[128,89942,1967],{"class":138},[128,89944,3827],{"class":166},[128,89946,54875],{"class":134},[128,89948,5669],{"class":166},[128,89950,54875],{"class":134},[128,89952,4905],{"class":138},[128,89954,89955,89957,89959,89962],{"class":130,"line":702},[128,89956,65100],{"class":166},[128,89958,1967],{"class":138},[128,89960,89961],{"class":166},"#ccc",[128,89963,4905],{"class":138},[128,89965,89966,89968,89970,89972],{"class":130,"line":709},[128,89967,67348],{"class":166},[128,89969,1967],{"class":138},[128,89971,58118],{"class":166},[128,89973,4905],{"class":138},[128,89975,89976,89978,89980,89982],{"class":130,"line":723},[128,89977,60796],{"class":166},[128,89979,1967],{"class":138},[128,89981,64221],{"class":166},[128,89983,4905],{"class":138},[128,89985,89986,89988,89990,89992,89994],{"class":130,"line":732},[128,89987,58515],{"class":166},[128,89989,1967],{"class":138},[128,89991,409],{"class":166},[128,89993,54875],{"class":134},[128,89995,4905],{"class":138},[128,89997,89998,90000,90002,90004,90006],{"class":130,"line":744},[128,89999,65129],{"class":166},[128,90001,1967],{"class":138},[128,90003,4196],{"class":166},[128,90005,54875],{"class":134},[128,90007,4905],{"class":138},[128,90009,90010,90012,90014,90016,90018],{"class":130,"line":749},[128,90011,58303],{"class":166},[128,90013,1967],{"class":138},[128,90015,4298],{"class":166},[128,90017,54875],{"class":134},[128,90019,4905],{"class":138},[128,90021,90022],{"class":130,"line":754},[128,90023,5773],{"class":138},[128,90025,90026],{"class":130,"line":764},[128,90027,160],{"emptyLinePlaceholder":159},[128,90029,90030,90032,90034,90036,90039],{"class":130,"line":782},[128,90031,89522],{"class":199},[128,90033,89884],{"class":199},[128,90035,5010],{"class":54685},[128,90037,90038],{"class":199},".submit",[128,90040,1959],{"class":138},[128,90042,90043,90045,90047,90050],{"class":130,"line":787},[128,90044,58265],{"class":166},[128,90046,1967],{"class":138},[128,90048,90049],{"class":166},"#369",[128,90051,4905],{"class":138},[128,90053,90054],{"class":130,"line":795},[128,90055,5773],{"class":138},[128,90057,90058,90060,90062],{"class":130,"line":807},[128,90059,55799],{"class":138},[128,90061,3659],{"class":54685},[128,90063,54692],{"class":138},[128,90065,90066,90068,90070],{"class":130,"line":813},[128,90067,55168],{"class":138},[128,90069,54719],{"class":54685},[128,90071,54692],{"class":138},[128,90073,90074],{"class":130,"line":818},[128,90075,160],{"emptyLinePlaceholder":159},[128,90077,90078,90080,90082],{"class":130,"line":835},[128,90079,4657],{"class":138},[128,90081,55183],{"class":54685},[128,90083,54692],{"class":138},[128,90085,90086,90088,90090,90092,90094,90097,90100,90102],{"class":130,"line":851},[128,90087,55526],{"class":138},[128,90089,57268],{"class":54685},[128,90091,18481],{"class":199},[128,90093,270],{"class":138},[128,90095,90096],{"class":176},"\"delete\"",[128,90098,90099],{"class":138},">删除\u003C\u002F",[128,90101,57268],{"class":54685},[128,90103,54692],{"class":138},[128,90105,90106,90108,90110,90112,90114,90117,90120,90122],{"class":130,"line":867},[128,90107,55526],{"class":138},[128,90109,57268],{"class":54685},[128,90111,18481],{"class":199},[128,90113,270],{"class":138},[128,90115,90116],{"class":176},"\"login\"",[128,90118,90119],{"class":138},">登录\u003C\u002F",[128,90121,57268],{"class":54685},[128,90123,54692],{"class":138},[128,90125,90126,90128,90130],{"class":130,"line":872},[128,90127,55526],{"class":138},[128,90129,55196],{"class":54685},[128,90131,54692],{"class":138},[128,90133,90134],{"class":130,"line":878},[128,90135,90136],{"class":3814},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[128,90138,90139,90141,90144,90146,90148,90150,90152,90154,90157,90159,90161],{"class":130,"line":887},[128,90140,73459],{"class":134},[128,90142,90143],{"class":199}," Modal",[128,90145,253],{"class":138},[128,90147,2752],{"class":266},[128,90149,170],{"class":134},[128,90151,73305],{"class":176},[128,90153,258],{"class":138},[128,90155,90156],{"class":266},"message",[128,90158,170],{"class":134},[128,90160,73305],{"class":176},[128,90162,15968],{"class":138},[128,90164,90165],{"class":130,"line":896},[128,90166,90167],{"class":3814},"      \u002F\u002F 创建Model 模态框盒子\n",[128,90169,90170],{"class":130,"line":905},[128,90171,90172],{"class":3814},"      \u002F\u002F 1.1 创建div标签\n",[128,90174,90175,90177,90180,90182,90184,90186,90188,90190],{"class":130,"line":914},[128,90176,73426],{"class":166},[128,90178,90179],{"class":138},".modalBox ",[128,90181,270],{"class":134},[128,90183,57777],{"class":138},[128,90185,73526],{"class":199},[128,90187,253],{"class":138},[128,90189,85304],{"class":176},[128,90191,180],{"class":138},[128,90193,90194],{"class":130,"line":920},[128,90195,90196],{"class":3814},"      \u002F\u002F 1.2 给div 添加类名为model\n",[128,90198,90199,90201,90204,90206],{"class":130,"line":926},[128,90200,73426],{"class":166},[128,90202,90203],{"class":138},".modalBox.className ",[128,90205,270],{"class":134},[128,90207,90208],{"class":176}," 'modal'\n",[128,90210,90211],{"class":130,"line":938},[128,90212,90213],{"class":3814},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[128,90215,90216,90218,90221,90223],{"class":130,"line":943},[128,90217,73426],{"class":166},[128,90219,90220],{"class":138},".modalBox.innerHTML ",[128,90222,270],{"class":134},[128,90224,73543],{"class":176},[128,90226,90227,90230,90232],{"class":130,"line":948},[128,90228,90229],{"class":176},"        \u003Cdiv class=\"header\">${",[128,90231,2752],{"class":138},[128,90233,90234],{"class":176},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[128,90236,90237,90240,90242],{"class":130,"line":958},[128,90238,90239],{"class":176},"        \u003Cdiv class=\"body\">${",[128,90241,90156],{"class":138},[128,90243,90244],{"class":176},"}\u003C\u002Fdiv>\n",[128,90246,90247],{"class":130,"line":974},[128,90248,90249],{"class":176},"      `\n",[128,90251,90252],{"class":130,"line":985},[128,90253,90254],{"class":3814},"      \u002F\u002F console.log(this.modalBox)\n",[128,90256,90257],{"class":130,"line":990},[128,90258,5773],{"class":138},[128,90260,90261],{"class":130,"line":1005},[128,90262,90263],{"class":3814},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[128,90265,90266],{"class":130,"line":1017},[128,90267,90268],{"class":3814},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[128,90270,90271],{"class":130,"line":1022},[128,90272,90273],{"class":3814},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[128,90275,90276,90279,90281,90283,90285,90288,90290,90292],{"class":130,"line":1027},[128,90277,90278],{"class":166},"    Modal",[128,90280,4307],{"class":138},[128,90282,88951],{"class":166},[128,90284,4307],{"class":138},[128,90286,90287],{"class":199},"open",[128,90289,170],{"class":134},[128,90291,62298],{"class":134},[128,90293,57833],{"class":138},[128,90295,90296],{"class":130,"line":1033},[128,90297,90298],{"class":3814},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[128,90300,90301,90303,90306,90308,90310,90312,90314,90317],{"class":130,"line":1038},[128,90302,61608],{"class":134},[128,90304,90305],{"class":166}," box",[128,90307,170],{"class":134},[128,90309,57777],{"class":138},[128,90311,57780],{"class":199},[128,90313,253],{"class":138},[128,90315,90316],{"class":176},"'.modal'",[128,90318,180],{"class":138},[128,90320,90321],{"class":130,"line":1050},[128,90322,90323],{"class":3814},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[128,90325,90326,90329,90331,90334,90336],{"class":130,"line":1055},[128,90327,90328],{"class":138},"      box ",[128,90330,5313],{"class":134},[128,90332,90333],{"class":138}," box.",[128,90335,60386],{"class":199},[128,90337,5563],{"class":138},[128,90339,90340],{"class":130,"line":1060},[128,90341,90342],{"class":3814},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[128,90344,90345],{"class":130,"line":1070},[128,90346,90347],{"class":3814},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[128,90349,90350],{"class":130,"line":1086},[128,90351,90352],{"class":3814},"      \u002F\u002F append可以增加对象\n",[128,90354,90355,90358,90361,90363,90366],{"class":130,"line":1095},[128,90356,90357],{"class":138},"      document.body.",[128,90359,90360],{"class":199},"append",[128,90362,253],{"class":138},[128,90364,90365],{"class":166},"this",[128,90367,90368],{"class":138},".modalBox)\n",[128,90370,90371],{"class":130,"line":1100},[128,90372,160],{"emptyLinePlaceholder":159},[128,90374,90375],{"class":130,"line":1113},[128,90376,90377],{"class":3814},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[128,90379,90380,90382,90385,90387,90389,90392,90394,90396,90398,90400,90403,90405],{"class":130,"line":1124},[128,90381,73426],{"class":166},[128,90383,90384],{"class":138},".modalBox.",[128,90386,57780],{"class":199},[128,90388,253],{"class":138},[128,90390,90391],{"class":176},"'i'",[128,90393,34300],{"class":138},[128,90395,61193],{"class":199},[128,90397,253],{"class":138},[128,90399,61198],{"class":176},[128,90401,90402],{"class":138},", () ",[128,90404,88094],{"class":134},[128,90406,1959],{"class":138},[128,90408,90409],{"class":130,"line":1129},[128,90410,90411],{"class":3814},"        \u002F\u002F 这个地方需要用到箭头函数\n",[128,90413,90414],{"class":130,"line":1134},[128,90415,90416],{"class":3814},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[128,90418,90419],{"class":130,"line":1150},[128,90420,90421],{"class":3814},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[128,90423,90424,90426,90428,90431],{"class":130,"line":1164},[128,90425,68104],{"class":166},[128,90427,4307],{"class":138},[128,90429,90430],{"class":199},"close",[128,90432,5563],{"class":138},[128,90434,90435],{"class":130,"line":1178},[128,90436,68193],{"class":138},[128,90438,90439],{"class":130,"line":1183},[128,90440,5773],{"class":138},[128,90442,90443],{"class":130,"line":1199},[128,90444,160],{"emptyLinePlaceholder":159},[128,90446,90447],{"class":130,"line":1214},[128,90448,90449],{"class":3814},"    \u002F\u002F 测试一下 点击 删除按钮\n",[128,90451,90452,90454,90456,90458,90461,90463,90465,90467,90469,90471,90473],{"class":130,"line":1229},[128,90453,55789],{"class":138},[128,90455,57780],{"class":199},[128,90457,253],{"class":138},[128,90459,90460],{"class":176},"'#delete'",[128,90462,34300],{"class":138},[128,90464,61193],{"class":199},[128,90466,253],{"class":138},[128,90468,61198],{"class":176},[128,90470,90402],{"class":138},[128,90472,88094],{"class":134},[128,90474,1959],{"class":138},[128,90476,90477],{"class":130,"line":1234},[128,90478,90479],{"class":3814},"      \u002F\u002F 先调用Model构造函数\n",[128,90481,90482,90484,90487,90489,90491,90493,90495,90498,90500,90503],{"class":130,"line":1239},[128,90483,61608],{"class":134},[128,90485,90486],{"class":166}," del",[128,90488,170],{"class":134},[128,90490,15105],{"class":134},[128,90492,90143],{"class":199},[128,90494,253],{"class":138},[128,90496,90497],{"class":176},"'温馨的提示'",[128,90499,258],{"class":138},[128,90501,90502],{"class":176},"'您没有删除权限操作'",[128,90504,180],{"class":138},[128,90506,90507],{"class":130,"line":1251},[128,90508,90509],{"class":3814},"      \u002F\u002F 实例对象调用open方法\n",[128,90511,90512,90515,90517],{"class":130,"line":1256},[128,90513,90514],{"class":138},"      del.",[128,90516,90287],{"class":199},[128,90518,5563],{"class":138},[128,90520,90521],{"class":130,"line":1261},[128,90522,917],{"class":138},[128,90524,90525],{"class":130,"line":1271},[128,90526,90527],{"class":3814},"    \u002F\u002F 测试一下 点击 登录按钮\n",[128,90529,90530,90532,90534,90536,90539,90541,90543,90545,90547,90549,90551],{"class":130,"line":1287},[128,90531,55789],{"class":138},[128,90533,57780],{"class":199},[128,90535,253],{"class":138},[128,90537,90538],{"class":176},"'#login'",[128,90540,34300],{"class":138},[128,90542,61193],{"class":199},[128,90544,253],{"class":138},[128,90546,61198],{"class":176},[128,90548,90402],{"class":138},[128,90550,88094],{"class":134},[128,90552,1959],{"class":138},[128,90554,90555],{"class":130,"line":1296},[128,90556,90479],{"class":3814},[128,90558,90559,90561,90564,90566,90568,90570,90572,90575,90577,90580],{"class":130,"line":1301},[128,90560,61608],{"class":134},[128,90562,90563],{"class":166}," log",[128,90565,170],{"class":134},[128,90567,15105],{"class":134},[128,90569,90143],{"class":199},[128,90571,253],{"class":138},[128,90573,90574],{"class":176},"'友情提示'",[128,90576,258],{"class":138},[128,90578,90579],{"class":176},"'您还没有登录呢'",[128,90581,180],{"class":138},[128,90583,90584],{"class":130,"line":1314},[128,90585,90509],{"class":3814},[128,90587,90588,90591,90593],{"class":130,"line":1325},[128,90589,90590],{"class":138},"      log.",[128,90592,90287],{"class":199},[128,90594,5563],{"class":138},[128,90596,90597],{"class":130,"line":1330},[128,90598,917],{"class":138},[128,90600,90601],{"class":130,"line":1335},[128,90602,90603],{"class":3814},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[128,90605,90606,90608,90610,90612,90614,90616,90618,90620],{"class":130,"line":1341},[128,90607,90278],{"class":166},[128,90609,4307],{"class":138},[128,90611,88951],{"class":166},[128,90613,4307],{"class":138},[128,90615,90430],{"class":199},[128,90617,170],{"class":134},[128,90619,62298],{"class":134},[128,90621,57833],{"class":138},[128,90623,90624,90626,90628,90630],{"class":130,"line":1346},[128,90625,73426],{"class":166},[128,90627,90384],{"class":138},[128,90629,60386],{"class":199},[128,90631,5563],{"class":138},[128,90633,90634],{"class":130,"line":1351},[128,90635,5773],{"class":138},[128,90637,90638,90640,90642],{"class":130,"line":1362},[128,90639,55799],{"class":138},[128,90641,55196],{"class":54685},[128,90643,54692],{"class":138},[128,90645,90646,90648,90650],{"class":130,"line":1370},[128,90647,55168],{"class":138},[128,90649,55183],{"class":54685},[128,90651,54692],{"class":138},[128,90653,90654],{"class":130,"line":1397},[128,90655,160],{"emptyLinePlaceholder":159},[128,90657,90658,90660,90662],{"class":130,"line":1417},[128,90659,55168],{"class":138},[128,90661,54020],{"class":54685},[128,90663,54692],{"class":138},[19,90665,90666],{},[5074,90667],{"alt":112,"src":90668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,90670,90672],{"id":90671},"_414-深浅拷贝","4.14 深浅拷贝",[72,90674,90676],{"id":90675},"_4141-浅拷贝","4.14.1 浅拷贝",[19,90678,90679],{},[5074,90680],{"alt":112,"src":90681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,90683,90684],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,90686,90687],{},[5074,90688],{"alt":112,"src":90689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,90691,90692],{},[5074,90693],{"alt":112,"src":90694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,90696,90697],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,90699,90700],{},[5074,90701],{"alt":112,"src":90702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,90704,14859],{},[19,90706,90707],{},[5074,90708],{"alt":112,"src":90709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[72,90711,90713],{"id":90712},"_4142-深拷贝","4.14.2 深拷贝",[19,90715,90716],{},"深拷贝：拷贝的是对象，不是地址",[19,90718,90719],{},"常用的三种方法：",[26,90721,90722,90725,90728],{},[29,90723,90724],{},"通过递归实现深拷贝",[29,90726,90727],{},"lodash\u002FcloneDeep",[29,90729,90730],{},"通过JSON.stringify()实现",[25485,90732,90734],{"id":90733},"_41421-递归函数","4.14.2.1 递归函数",[19,90736,90737],{},[5074,90738],{"alt":112,"src":90739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[26,90741,90742],{},[29,90743,90744],{},"死递归占溢出：",[106,90746,90748],{"className":56449,"code":90747,"language":56451,"meta":112,"style":112},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[114,90749,90750,90758,90766,90770,90775,90779,90784,90792],{"__ignoreMap":112},[128,90751,90752,90754,90756],{"class":130,"line":131},[128,90753,4657],{"class":138},[128,90755,55183],{"class":54685},[128,90757,54692],{"class":138},[128,90759,90760,90762,90764],{"class":130,"line":142},[128,90761,55526],{"class":138},[128,90763,55196],{"class":54685},[128,90765,54692],{"class":138},[128,90767,90768],{"class":130,"line":156},[128,90769,80517],{"class":138},[128,90771,90772],{"class":130,"line":163},[128,90773,90774],{"class":138},"      fn()\n",[128,90776,90777],{"class":130,"line":183},[128,90778,5773],{"class":138},[128,90780,90781],{"class":130,"line":188},[128,90782,90783],{"class":138},"    fn()\n",[128,90785,90786,90788,90790],{"class":130,"line":193},[128,90787,55799],{"class":138},[128,90789,55196],{"class":54685},[128,90791,54692],{"class":138},[128,90793,90794,90796,90798],{"class":130,"line":206},[128,90795,55168],{"class":138},[128,90797,55183],{"class":54685},[128,90799,54692],{"class":138},[26,90801,90802],{"start":142},[29,90803,90804],{},"递归函数要加判断条件：",[19,90806,90807],{},[5074,90808],{"alt":112,"src":90809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[26,90811,90812],{"start":156},[29,90813,90814],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[106,90816,90818],{"className":54018,"code":90817,"language":54020,"meta":112,"style":112},"\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",[114,90819,90820,90830,90844,90848,90856,90870,90890,90902,90910,90914,90922,90934,90942,90950,90975,90987,90991,90998,91006,91014,91018],{"__ignoreMap":112},[128,90821,90822,90824,90826,90828],{"class":130,"line":131},[128,90823,54682],{"class":138},[128,90825,54686],{"class":54685},[128,90827,54689],{"class":199},[128,90829,54692],{"class":138},[128,90831,90832,90834,90836,90838,90840,90842],{"class":130,"line":142},[128,90833,4657],{"class":138},[128,90835,54020],{"class":54685},[128,90837,54701],{"class":199},[128,90839,270],{"class":138},[128,90841,54706],{"class":176},[128,90843,54692],{"class":138},[128,90845,90846],{"class":130,"line":156},[128,90847,160],{"emptyLinePlaceholder":159},[128,90849,90850,90852,90854],{"class":130,"line":163},[128,90851,4657],{"class":138},[128,90853,54719],{"class":54685},[128,90855,54692],{"class":138},[128,90857,90858,90860,90862,90864,90866,90868],{"class":130,"line":183},[128,90859,55526],{"class":138},[128,90861,54729],{"class":54685},[128,90863,54732],{"class":199},[128,90865,270],{"class":138},[128,90867,54737],{"class":176},[128,90869,54692],{"class":138},[128,90871,90872,90874,90876,90878,90880,90882,90884,90886,90888],{"class":130,"line":188},[128,90873,55526],{"class":138},[128,90875,54729],{"class":54685},[128,90877,18442],{"class":199},[128,90879,270],{"class":138},[128,90881,54776],{"class":176},[128,90883,54756],{"class":199},[128,90885,270],{"class":138},[128,90887,54783],{"class":176},[128,90889,54692],{"class":138},[128,90891,90892,90894,90896,90898,90900],{"class":130,"line":193},[128,90893,55526],{"class":138},[128,90895,2752],{"class":54685},[128,90897,54794],{"class":138},[128,90899,2752],{"class":54685},[128,90901,54692],{"class":138},[128,90903,90904,90906,90908],{"class":130,"line":206},[128,90905,55168],{"class":138},[128,90907,54719],{"class":54685},[128,90909,54692],{"class":138},[128,90911,90912],{"class":130,"line":221},[128,90913,160],{"emptyLinePlaceholder":159},[128,90915,90916,90918,90920],{"class":130,"line":230},[128,90917,4657],{"class":138},[128,90919,55183],{"class":54685},[128,90921,54692],{"class":138},[128,90923,90924,90926,90928,90930,90932],{"class":130,"line":235},[128,90925,55526],{"class":138},[128,90927,54994],{"class":54685},[128,90929,58695],{"class":138},[128,90931,54994],{"class":54685},[128,90933,54692],{"class":138},[128,90935,90936,90938,90940],{"class":130,"line":244},[128,90937,55526],{"class":138},[128,90939,55196],{"class":54685},[128,90941,54692],{"class":138},[128,90943,90944,90946,90948],{"class":130,"line":287},[128,90945,73459],{"class":134},[128,90947,77148],{"class":199},[128,90949,14380],{"class":138},[128,90951,90952,90954,90956,90958,90960,90962,90964,90966,90968,90970,90973],{"class":130,"line":301},[128,90953,59151],{"class":138},[128,90955,57780],{"class":199},[128,90957,253],{"class":138},[128,90959,85304],{"class":176},[128,90961,77623],{"class":138},[128,90963,270],{"class":134},[128,90965,15105],{"class":134},[128,90967,77164],{"class":199},[128,90969,20748],{"class":138},[128,90971,90972],{"class":199},"toLocaleString",[128,90974,5563],{"class":138},[128,90976,90977,90980,90983,90985],{"class":130,"line":310},[128,90978,90979],{"class":199},"      setTimeout",[128,90981,90982],{"class":138},"(getTime, ",[128,90984,9967],{"class":166},[128,90986,180],{"class":138},[128,90988,90989],{"class":130,"line":323},[128,90990,5773],{"class":138},[128,90992,90993,90996],{"class":130,"line":330},[128,90994,90995],{"class":199},"    getTime",[128,90997,5563],{"class":138},[128,90999,91000,91002,91004],{"class":130,"line":335},[128,91001,55799],{"class":138},[128,91003,55196],{"class":54685},[128,91005,54692],{"class":138},[128,91007,91008,91010,91012],{"class":130,"line":340},[128,91009,55168],{"class":138},[128,91011,55183],{"class":54685},[128,91013,54692],{"class":138},[128,91015,91016],{"class":130,"line":351},[128,91017,160],{"emptyLinePlaceholder":159},[128,91019,91020,91022,91024],{"class":130,"line":384},[128,91021,55168],{"class":138},[128,91023,54020],{"class":54685},[128,91025,54692],{"class":138},[19,91027,91028],{},[5074,91029],{"alt":112,"src":91030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[26,91032,91033],{"start":163},[29,91034,90724],{},[19,91036,91037],{},[5074,91038],{"alt":112,"src":91039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,91041,91042],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,91044,42575],{},[19,91046,91047],{},"这个是简易版的递归函数深拷贝",[19,91049,91050],{},"一定要注意先数组再对象，因为万物皆可对象",[106,91052,91054],{"className":54018,"code":91053,"language":54020,"meta":112,"style":112},"\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",[114,91055,91056,91066,91080,91084,91092,91106,91126,91138,91146,91150,91158,91166,91176,91185,91193,91208,91212,91220,91224,91228,91239,91244,91263,91279,91284,91289,91294,91309,91314,91319,91328,91336,91353,91361,91367,91375,91380,91385,91394,91398,91402,91406,91417,91426,91436,91450,91460,91468,91476,91484,91488],{"__ignoreMap":112},[128,91057,91058,91060,91062,91064],{"class":130,"line":131},[128,91059,54682],{"class":138},[128,91061,54686],{"class":54685},[128,91063,54689],{"class":199},[128,91065,54692],{"class":138},[128,91067,91068,91070,91072,91074,91076,91078],{"class":130,"line":142},[128,91069,4657],{"class":138},[128,91071,54020],{"class":54685},[128,91073,54701],{"class":199},[128,91075,270],{"class":138},[128,91077,54706],{"class":176},[128,91079,54692],{"class":138},[128,91081,91082],{"class":130,"line":156},[128,91083,160],{"emptyLinePlaceholder":159},[128,91085,91086,91088,91090],{"class":130,"line":163},[128,91087,4657],{"class":138},[128,91089,54719],{"class":54685},[128,91091,54692],{"class":138},[128,91093,91094,91096,91098,91100,91102,91104],{"class":130,"line":183},[128,91095,55526],{"class":138},[128,91097,54729],{"class":54685},[128,91099,54732],{"class":199},[128,91101,270],{"class":138},[128,91103,54737],{"class":176},[128,91105,54692],{"class":138},[128,91107,91108,91110,91112,91114,91116,91118,91120,91122,91124],{"class":130,"line":188},[128,91109,55526],{"class":138},[128,91111,54729],{"class":54685},[128,91113,18442],{"class":199},[128,91115,270],{"class":138},[128,91117,54776],{"class":176},[128,91119,54756],{"class":199},[128,91121,270],{"class":138},[128,91123,54783],{"class":176},[128,91125,54692],{"class":138},[128,91127,91128,91130,91132,91134,91136],{"class":130,"line":193},[128,91129,55526],{"class":138},[128,91131,2752],{"class":54685},[128,91133,54794],{"class":138},[128,91135,2752],{"class":54685},[128,91137,54692],{"class":138},[128,91139,91140,91142,91144],{"class":130,"line":206},[128,91141,55168],{"class":138},[128,91143,54719],{"class":54685},[128,91145,54692],{"class":138},[128,91147,91148],{"class":130,"line":221},[128,91149,160],{"emptyLinePlaceholder":159},[128,91151,91152,91154,91156],{"class":130,"line":230},[128,91153,4657],{"class":138},[128,91155,55183],{"class":54685},[128,91157,54692],{"class":138},[128,91159,91160,91162,91164],{"class":130,"line":235},[128,91161,55526],{"class":138},[128,91163,55196],{"class":54685},[128,91165,54692],{"class":138},[128,91167,91168,91170,91172,91174],{"class":130,"line":244},[128,91169,14748],{"class":134},[128,91171,73346],{"class":166},[128,91173,170],{"class":134},[128,91175,1959],{"class":138},[128,91177,91178,91180,91183],{"class":130,"line":287},[128,91179,74991],{"class":138},[128,91181,91182],{"class":176},"'pink'",[128,91184,2665],{"class":138},[128,91186,91187,91189,91191],{"class":130,"line":301},[128,91188,75001],{"class":138},[128,91190,4399],{"class":166},[128,91192,2665],{"class":138},[128,91194,91195,91198,91201,91203,91206],{"class":130,"line":310},[128,91196,91197],{"class":138},"      hobby: [",[128,91199,91200],{"class":176},"'乒乓球'",[128,91202,258],{"class":138},[128,91204,91205],{"class":176},"'足球'",[128,91207,2055],{"class":138},[128,91209,91210],{"class":130,"line":323},[128,91211,81246],{"class":138},[128,91213,91214,91217],{"class":130,"line":330},[128,91215,91216],{"class":138},"        baby: ",[128,91218,91219],{"class":176},"'小pink'\n",[128,91221,91222],{"class":130,"line":335},[128,91223,55780],{"class":138},[128,91225,91226],{"class":130,"line":340},[128,91227,5773],{"class":138},[128,91229,91230,91232,91235,91237],{"class":130,"line":351},[128,91231,14748],{"class":134},[128,91233,91234],{"class":166}," o",[128,91236,170],{"class":134},[128,91238,2395],{"class":138},[128,91240,91241],{"class":130,"line":384},[128,91242,91243],{"class":3814},"    \u002F\u002F 拷贝函数\n",[128,91245,91246,91248,91251,91253,91256,91258,91261],{"class":130,"line":414},[128,91247,73459],{"class":134},[128,91249,91250],{"class":199}," deepCopy",[128,91252,253],{"class":138},[128,91254,91255],{"class":266},"newObj",[128,91257,258],{"class":138},[128,91259,91260],{"class":266},"oldObj",[128,91262,15968],{"class":138},[128,91264,91265,91267,91269,91271,91274,91276],{"class":130,"line":419},[128,91266,55666],{"class":134},[128,91268,5260],{"class":138},[128,91270,55229],{"class":134},[128,91272,91273],{"class":138}," k ",[128,91275,549],{"class":134},[128,91277,91278],{"class":138}," oldObj) {\n",[128,91280,91281],{"class":130,"line":424},[128,91282,91283],{"class":3814},"        \u002F\u002F 处理数组的问题\n",[128,91285,91286],{"class":130,"line":434},[128,91287,91288],{"class":3814},"        \u002F\u002F 判断是否属于数组\n",[128,91290,91291],{"class":130,"line":447},[128,91292,91293],{"class":3814},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[128,91295,91296,91298,91301,91304,91307],{"class":130,"line":459},[128,91297,558],{"class":134},[128,91299,91300],{"class":138}," (oldObj[k] ",[128,91302,91303],{"class":134},"instanceof",[128,91305,91306],{"class":199}," Array",[128,91308,15968],{"class":138},[128,91310,91311],{"class":130,"line":471},[128,91312,91313],{"class":3814},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[128,91315,91316],{"class":130,"line":483},[128,91317,91318],{"class":3814},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[128,91320,91321,91324,91326],{"class":130,"line":495},[128,91322,91323],{"class":138},"          newObj[k] ",[128,91325,270],{"class":134},[128,91327,227],{"class":138},[128,91329,91330,91333],{"class":130,"line":507},[128,91331,91332],{"class":199},"          deepCopy",[128,91334,91335],{"class":138},"(newObj[k], oldObj[k])\n",[128,91337,91338,91340,91342,91344,91346,91348,91351],{"class":130,"line":519},[128,91339,83453],{"class":138},[128,91341,5299],{"class":134},[128,91343,5302],{"class":134},[128,91345,91300],{"class":138},[128,91347,91303],{"class":134},[128,91349,91350],{"class":199}," Object",[128,91352,15968],{"class":138},[128,91354,91355,91357,91359],{"class":130,"line":524},[128,91356,91323],{"class":138},[128,91358,270],{"class":134},[128,91360,2395],{"class":138},[128,91362,91363,91365],{"class":130,"line":529},[128,91364,91332],{"class":199},[128,91366,91335],{"class":138},[128,91368,91369,91371,91373],{"class":130,"line":540},[128,91370,83453],{"class":138},[128,91372,5299],{"class":134},[128,91374,1959],{"class":138},[128,91376,91377],{"class":130,"line":555},[128,91378,91379],{"class":3814},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[128,91381,91382],{"class":130,"line":576},[128,91383,91384],{"class":3814},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[128,91386,91387,91389,91391],{"class":130,"line":584},[128,91388,91323],{"class":138},[128,91390,270],{"class":134},[128,91392,91393],{"class":138}," oldObj[k]\n",[128,91395,91396],{"class":130,"line":593},[128,91397,2014],{"class":138},[128,91399,91400],{"class":130,"line":598},[128,91401,55780],{"class":138},[128,91403,91404],{"class":130,"line":603},[128,91405,5773],{"class":138},[128,91407,91408,91411,91414],{"class":130,"line":614},[128,91409,91410],{"class":199},"    deepCopy",[128,91412,91413],{"class":138},"(o, obj) ",[128,91415,91416],{"class":3814},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[128,91418,91419,91421,91423],{"class":130,"line":625},[128,91420,77128],{"class":138},[128,91422,61627],{"class":199},[128,91424,91425],{"class":138},"(o)\n",[128,91427,91428,91431,91433],{"class":130,"line":633},[128,91429,91430],{"class":138},"    o.age ",[128,91432,270],{"class":134},[128,91434,91435],{"class":166}," 20\n",[128,91437,91438,91441,91443,91445,91447],{"class":130,"line":649},[128,91439,91440],{"class":138},"    o.hobby[",[128,91442,2452],{"class":166},[128,91444,567],{"class":138},[128,91446,270],{"class":134},[128,91448,91449],{"class":176}," '篮球'\n",[128,91451,91452,91455,91457],{"class":130,"line":660},[128,91453,91454],{"class":138},"    o.family ",[128,91456,270],{"class":134},[128,91458,91459],{"class":176}," '老pink'\n",[128,91461,91462,91464,91466],{"class":130,"line":673},[128,91463,77128],{"class":138},[128,91465,61627],{"class":199},[128,91467,73411],{"class":138},[128,91469,91470,91472,91474],{"class":130,"line":678},[128,91471,55799],{"class":138},[128,91473,55196],{"class":54685},[128,91475,54692],{"class":138},[128,91477,91478,91480,91482],{"class":130,"line":683},[128,91479,55168],{"class":138},[128,91481,55183],{"class":54685},[128,91483,54692],{"class":138},[128,91485,91486],{"class":130,"line":693},[128,91487,160],{"emptyLinePlaceholder":159},[128,91489,91490,91492,91494],{"class":130,"line":702},[128,91491,55168],{"class":138},[128,91493,54020],{"class":54685},[128,91495,54692],{"class":138},[19,91497,91498],{},[5074,91499],{"alt":112,"src":91500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[25485,91502,91504,91505],{"id":91503},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[3903,91506,91507],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,91509,91510],{},[3989,91511,91512],{"href":91512,"rel":91513},"https:\u002F\u002Fwww.lodashjs.com\u002F",[27352],[19,91515,91516],{},"lodash里边的方法都要加上一个下划线_",[19,91518,91519],{},"_.cloneDeep()",[106,91521,91523],{"className":54018,"code":91522,"language":54020,"meta":112,"style":112},"\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",[114,91524,91525,91535,91549,91553,91561,91575,91595,91607,91615,91619,91627,91632,91651,91659,91669,91677,91685,91697,91701,91707,91711,91715,91731,91739,91748,91756,91764,91772,91776],{"__ignoreMap":112},[128,91526,91527,91529,91531,91533],{"class":130,"line":131},[128,91528,54682],{"class":138},[128,91530,54686],{"class":54685},[128,91532,54689],{"class":199},[128,91534,54692],{"class":138},[128,91536,91537,91539,91541,91543,91545,91547],{"class":130,"line":142},[128,91538,4657],{"class":138},[128,91540,54020],{"class":54685},[128,91542,54701],{"class":199},[128,91544,270],{"class":138},[128,91546,54706],{"class":176},[128,91548,54692],{"class":138},[128,91550,91551],{"class":130,"line":156},[128,91552,160],{"emptyLinePlaceholder":159},[128,91554,91555,91557,91559],{"class":130,"line":163},[128,91556,4657],{"class":138},[128,91558,54719],{"class":54685},[128,91560,54692],{"class":138},[128,91562,91563,91565,91567,91569,91571,91573],{"class":130,"line":183},[128,91564,55526],{"class":138},[128,91566,54729],{"class":54685},[128,91568,54732],{"class":199},[128,91570,270],{"class":138},[128,91572,54737],{"class":176},[128,91574,54692],{"class":138},[128,91576,91577,91579,91581,91583,91585,91587,91589,91591,91593],{"class":130,"line":188},[128,91578,55526],{"class":138},[128,91580,54729],{"class":54685},[128,91582,18442],{"class":199},[128,91584,270],{"class":138},[128,91586,54776],{"class":176},[128,91588,54756],{"class":199},[128,91590,270],{"class":138},[128,91592,54783],{"class":176},[128,91594,54692],{"class":138},[128,91596,91597,91599,91601,91603,91605],{"class":130,"line":193},[128,91598,55526],{"class":138},[128,91600,2752],{"class":54685},[128,91602,54794],{"class":138},[128,91604,2752],{"class":54685},[128,91606,54692],{"class":138},[128,91608,91609,91611,91613],{"class":130,"line":206},[128,91610,55168],{"class":138},[128,91612,54719],{"class":54685},[128,91614,54692],{"class":138},[128,91616,91617],{"class":130,"line":221},[128,91618,160],{"emptyLinePlaceholder":159},[128,91620,91621,91623,91625],{"class":130,"line":230},[128,91622,4657],{"class":138},[128,91624,55183],{"class":54685},[128,91626,54692],{"class":138},[128,91628,91629],{"class":130,"line":235},[128,91630,91631],{"class":3814},"  \u003C!-- 先引用这个库 -->\n",[128,91633,91634,91636,91638,91640,91642,91645,91647,91649],{"class":130,"line":244},[128,91635,55526],{"class":138},[128,91637,55196],{"class":54685},[128,91639,58620],{"class":199},[128,91641,270],{"class":138},[128,91643,91644],{"class":176},"\"lodash.min.js\"",[128,91646,58695],{"class":138},[128,91648,55196],{"class":54685},[128,91650,54692],{"class":138},[128,91652,91653,91655,91657],{"class":130,"line":287},[128,91654,55526],{"class":138},[128,91656,55196],{"class":54685},[128,91658,54692],{"class":138},[128,91660,91661,91663,91665,91667],{"class":130,"line":301},[128,91662,14748],{"class":134},[128,91664,73346],{"class":166},[128,91666,170],{"class":134},[128,91668,1959],{"class":138},[128,91670,91671,91673,91675],{"class":130,"line":310},[128,91672,74991],{"class":138},[128,91674,91182],{"class":176},[128,91676,2665],{"class":138},[128,91678,91679,91681,91683],{"class":130,"line":323},[128,91680,75001],{"class":138},[128,91682,4399],{"class":166},[128,91684,2665],{"class":138},[128,91686,91687,91689,91691,91693,91695],{"class":130,"line":330},[128,91688,91197],{"class":138},[128,91690,91200],{"class":176},[128,91692,258],{"class":138},[128,91694,91205],{"class":176},[128,91696,2055],{"class":138},[128,91698,91699],{"class":130,"line":335},[128,91700,81246],{"class":138},[128,91702,91703,91705],{"class":130,"line":340},[128,91704,91216],{"class":138},[128,91706,91219],{"class":176},[128,91708,91709],{"class":130,"line":351},[128,91710,55780],{"class":138},[128,91712,91713],{"class":130,"line":384},[128,91714,5773],{"class":138},[128,91716,91717,91719,91721,91723,91726,91729],{"class":130,"line":414},[128,91718,14748],{"class":134},[128,91720,91234],{"class":166},[128,91722,170],{"class":134},[128,91724,91725],{"class":138}," _.",[128,91727,91728],{"class":199},"cloneDeep",[128,91730,73411],{"class":138},[128,91732,91733,91735,91737],{"class":130,"line":419},[128,91734,77128],{"class":138},[128,91736,61627],{"class":199},[128,91738,91425],{"class":138},[128,91740,91741,91744,91746],{"class":130,"line":424},[128,91742,91743],{"class":138},"    o.family.baby ",[128,91745,270],{"class":134},[128,91747,91459],{"class":176},[128,91749,91750,91752,91754],{"class":130,"line":434},[128,91751,77128],{"class":138},[128,91753,61627],{"class":199},[128,91755,73411],{"class":138},[128,91757,91758,91760,91762],{"class":130,"line":447},[128,91759,55799],{"class":138},[128,91761,55196],{"class":54685},[128,91763,54692],{"class":138},[128,91765,91766,91768,91770],{"class":130,"line":459},[128,91767,55168],{"class":138},[128,91769,55183],{"class":54685},[128,91771,54692],{"class":138},[128,91773,91774],{"class":130,"line":471},[128,91775,160],{"emptyLinePlaceholder":159},[128,91777,91778,91780,91782],{"class":130,"line":483},[128,91779,55168],{"class":138},[128,91781,54020],{"class":54685},[128,91783,54692],{"class":138},[19,91785,91786],{},[5074,91787],{"alt":112,"src":91788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[25485,91790,91792],{"id":91791},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[106,91794,91796],{"className":54018,"code":91795,"language":54020,"meta":112,"style":112},"\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",[114,91797,91798,91808,91822,91826,91834,91848,91868,91880,91888,91892,91900,91908,91918,91926,91934,91946,91950,91956,91960,91964,91969,91974,91979,92005,92013,92022,92030,92038,92046,92050],{"__ignoreMap":112},[128,91799,91800,91802,91804,91806],{"class":130,"line":131},[128,91801,54682],{"class":138},[128,91803,54686],{"class":54685},[128,91805,54689],{"class":199},[128,91807,54692],{"class":138},[128,91809,91810,91812,91814,91816,91818,91820],{"class":130,"line":142},[128,91811,4657],{"class":138},[128,91813,54020],{"class":54685},[128,91815,54701],{"class":199},[128,91817,270],{"class":138},[128,91819,54706],{"class":176},[128,91821,54692],{"class":138},[128,91823,91824],{"class":130,"line":156},[128,91825,160],{"emptyLinePlaceholder":159},[128,91827,91828,91830,91832],{"class":130,"line":163},[128,91829,4657],{"class":138},[128,91831,54719],{"class":54685},[128,91833,54692],{"class":138},[128,91835,91836,91838,91840,91842,91844,91846],{"class":130,"line":183},[128,91837,55526],{"class":138},[128,91839,54729],{"class":54685},[128,91841,54732],{"class":199},[128,91843,270],{"class":138},[128,91845,54737],{"class":176},[128,91847,54692],{"class":138},[128,91849,91850,91852,91854,91856,91858,91860,91862,91864,91866],{"class":130,"line":188},[128,91851,55526],{"class":138},[128,91853,54729],{"class":54685},[128,91855,18442],{"class":199},[128,91857,270],{"class":138},[128,91859,54776],{"class":176},[128,91861,54756],{"class":199},[128,91863,270],{"class":138},[128,91865,54783],{"class":176},[128,91867,54692],{"class":138},[128,91869,91870,91872,91874,91876,91878],{"class":130,"line":193},[128,91871,55526],{"class":138},[128,91873,2752],{"class":54685},[128,91875,54794],{"class":138},[128,91877,2752],{"class":54685},[128,91879,54692],{"class":138},[128,91881,91882,91884,91886],{"class":130,"line":206},[128,91883,55168],{"class":138},[128,91885,54719],{"class":54685},[128,91887,54692],{"class":138},[128,91889,91890],{"class":130,"line":221},[128,91891,160],{"emptyLinePlaceholder":159},[128,91893,91894,91896,91898],{"class":130,"line":230},[128,91895,4657],{"class":138},[128,91897,55183],{"class":54685},[128,91899,54692],{"class":138},[128,91901,91902,91904,91906],{"class":130,"line":235},[128,91903,55526],{"class":138},[128,91905,55196],{"class":54685},[128,91907,54692],{"class":138},[128,91909,91910,91912,91914,91916],{"class":130,"line":244},[128,91911,14748],{"class":134},[128,91913,73346],{"class":166},[128,91915,170],{"class":134},[128,91917,1959],{"class":138},[128,91919,91920,91922,91924],{"class":130,"line":287},[128,91921,74991],{"class":138},[128,91923,91182],{"class":176},[128,91925,2665],{"class":138},[128,91927,91928,91930,91932],{"class":130,"line":301},[128,91929,75001],{"class":138},[128,91931,4399],{"class":166},[128,91933,2665],{"class":138},[128,91935,91936,91938,91940,91942,91944],{"class":130,"line":310},[128,91937,91197],{"class":138},[128,91939,91200],{"class":176},[128,91941,258],{"class":138},[128,91943,91205],{"class":176},[128,91945,2055],{"class":138},[128,91947,91948],{"class":130,"line":323},[128,91949,81246],{"class":138},[128,91951,91952,91954],{"class":130,"line":330},[128,91953,91216],{"class":138},[128,91955,91219],{"class":176},[128,91957,91958],{"class":130,"line":335},[128,91959,55780],{"class":138},[128,91961,91962],{"class":130,"line":340},[128,91963,5773],{"class":138},[128,91965,91966],{"class":130,"line":351},[128,91967,91968],{"class":3814},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[128,91970,91971],{"class":130,"line":384},[128,91972,91973],{"class":3814},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[128,91975,91976],{"class":130,"line":414},[128,91977,91978],{"class":3814},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[128,91980,91981,91983,91985,91987,91990,91992,91995,91997,91999,92001,92003],{"class":130,"line":419},[128,91982,14748],{"class":134},[128,91984,91234],{"class":166},[128,91986,170],{"class":134},[128,91988,91989],{"class":166}," JSON",[128,91991,4307],{"class":138},[128,91993,91994],{"class":199},"parse",[128,91996,253],{"class":138},[128,91998,75039],{"class":166},[128,92000,4307],{"class":138},[128,92002,75044],{"class":199},[128,92004,75047],{"class":138},[128,92006,92007,92009,92011],{"class":130,"line":424},[128,92008,77128],{"class":138},[128,92010,61627],{"class":199},[128,92012,91425],{"class":138},[128,92014,92015,92017,92019],{"class":130,"line":434},[128,92016,91743],{"class":138},[128,92018,270],{"class":134},[128,92020,92021],{"class":176}," '123'\n",[128,92023,92024,92026,92028],{"class":130,"line":447},[128,92025,77128],{"class":138},[128,92027,61627],{"class":199},[128,92029,73411],{"class":138},[128,92031,92032,92034,92036],{"class":130,"line":459},[128,92033,55799],{"class":138},[128,92035,55196],{"class":54685},[128,92037,54692],{"class":138},[128,92039,92040,92042,92044],{"class":130,"line":471},[128,92041,55168],{"class":138},[128,92043,55183],{"class":54685},[128,92045,54692],{"class":138},[128,92047,92048],{"class":130,"line":483},[128,92049,160],{"emptyLinePlaceholder":159},[128,92051,92052,92054,92056],{"class":130,"line":495},[128,92053,55168],{"class":138},[128,92055,54020],{"class":54685},[128,92057,54692],{"class":138},[19,92059,92060],{},[5074,92061],{"alt":112,"src":92062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,92064,92066],{"id":92065},"_415-异常处理","4.15 异常处理",[26,92068,92069],{},[29,92070,92071],{},"throw抛异常",[19,92073,92074],{},[5074,92075],{"alt":112,"src":92076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[26,92078,92079],{"start":142},[29,92080,92081],{},"try\u002Fcatch 捕获错误信息",[19,92083,92084],{},[5074,92085],{"alt":112,"src":92086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[106,92088,92090],{"className":54018,"code":92089,"language":54020,"meta":112,"style":112},"\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",[114,92091,92092,92102,92116,92120,92128,92142,92162,92174,92182,92186,92194,92206,92214,92223,92230,92235,92254,92263,92274,92279,92289,92294,92299,92304,92321,92325,92330,92337,92349,92353,92365,92369,92373,92378,92383,92390,92398,92406,92410],{"__ignoreMap":112},[128,92093,92094,92096,92098,92100],{"class":130,"line":131},[128,92095,54682],{"class":138},[128,92097,54686],{"class":54685},[128,92099,54689],{"class":199},[128,92101,54692],{"class":138},[128,92103,92104,92106,92108,92110,92112,92114],{"class":130,"line":142},[128,92105,4657],{"class":138},[128,92107,54020],{"class":54685},[128,92109,54701],{"class":199},[128,92111,270],{"class":138},[128,92113,54706],{"class":176},[128,92115,54692],{"class":138},[128,92117,92118],{"class":130,"line":156},[128,92119,160],{"emptyLinePlaceholder":159},[128,92121,92122,92124,92126],{"class":130,"line":163},[128,92123,4657],{"class":138},[128,92125,54719],{"class":54685},[128,92127,54692],{"class":138},[128,92129,92130,92132,92134,92136,92138,92140],{"class":130,"line":183},[128,92131,55526],{"class":138},[128,92133,54729],{"class":54685},[128,92135,54732],{"class":199},[128,92137,270],{"class":138},[128,92139,54737],{"class":176},[128,92141,54692],{"class":138},[128,92143,92144,92146,92148,92150,92152,92154,92156,92158,92160],{"class":130,"line":188},[128,92145,55526],{"class":138},[128,92147,54729],{"class":54685},[128,92149,18442],{"class":199},[128,92151,270],{"class":138},[128,92153,54776],{"class":176},[128,92155,54756],{"class":199},[128,92157,270],{"class":138},[128,92159,54783],{"class":176},[128,92161,54692],{"class":138},[128,92163,92164,92166,92168,92170,92172],{"class":130,"line":193},[128,92165,55526],{"class":138},[128,92167,2752],{"class":54685},[128,92169,54794],{"class":138},[128,92171,2752],{"class":54685},[128,92173,54692],{"class":138},[128,92175,92176,92178,92180],{"class":130,"line":206},[128,92177,55168],{"class":138},[128,92179,54719],{"class":54685},[128,92181,54692],{"class":138},[128,92183,92184],{"class":130,"line":221},[128,92185,160],{"emptyLinePlaceholder":159},[128,92187,92188,92190,92192],{"class":130,"line":230},[128,92189,4657],{"class":138},[128,92191,55183],{"class":54685},[128,92193,54692],{"class":138},[128,92195,92196,92198,92200,92202,92204],{"class":130,"line":235},[128,92197,55526],{"class":138},[128,92199,19],{"class":54685},[128,92201,56876],{"class":138},[128,92203,19],{"class":54685},[128,92205,54692],{"class":138},[128,92207,92208,92210,92212],{"class":130,"line":244},[128,92209,55526],{"class":138},[128,92211,55196],{"class":54685},[128,92213,54692],{"class":138},[128,92215,92216,92218,92221],{"class":130,"line":287},[128,92217,73459],{"class":134},[128,92219,92220],{"class":199}," fn",[128,92222,14380],{"class":138},[128,92224,92225,92228],{"class":130,"line":301},[128,92226,92227],{"class":134},"      try",[128,92229,1959],{"class":138},[128,92231,92232],{"class":130,"line":310},[128,92233,92234],{"class":3814},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[128,92236,92237,92239,92241,92243,92245,92247,92249,92252],{"class":130,"line":323},[128,92238,64649],{"class":134},[128,92240,10382],{"class":166},[128,92242,170],{"class":134},[128,92244,57777],{"class":138},[128,92246,57780],{"class":199},[128,92248,253],{"class":138},[128,92250,92251],{"class":176},"'.p'",[128,92253,180],{"class":138},[128,92255,92256,92259,92261],{"class":130,"line":330},[128,92257,92258],{"class":138},"        p.style.color ",[128,92260,270],{"class":134},[128,92262,70429],{"class":176},[128,92264,92265,92268,92271],{"class":130,"line":335},[128,92266,92267],{"class":138},"      } ",[128,92269,92270],{"class":134},"catch",[128,92272,92273],{"class":138}," (err) {\n",[128,92275,92276],{"class":130,"line":340},[128,92277,92278],{"class":3814},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[128,92280,92281,92284,92286],{"class":130,"line":351},[128,92282,92283],{"class":138},"        console.",[128,92285,61627],{"class":199},[128,92287,92288],{"class":138},"(err.message)\n",[128,92290,92291],{"class":130,"line":384},[128,92292,92293],{"class":3814},"        \u002F\u002F 想要中断程序，需要加return\n",[128,92295,92296],{"class":130,"line":414},[128,92297,92298],{"class":3814},"        \u002F\u002F return\n",[128,92300,92301],{"class":130,"line":419},[128,92302,92303],{"class":3814},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[128,92305,92306,92309,92311,92314,92316,92319],{"class":130,"line":424},[128,92307,92308],{"class":134},"        throw",[128,92310,15105],{"class":134},[128,92312,92313],{"class":199}," Error",[128,92315,253],{"class":138},[128,92317,92318],{"class":176},"'你看看，选择器错误了吧'",[128,92320,180],{"class":138},[128,92322,92323],{"class":130,"line":434},[128,92324,55780],{"class":138},[128,92326,92327],{"class":130,"line":447},[128,92328,92329],{"class":3814},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[128,92331,92332,92335],{"class":130,"line":459},[128,92333,92334],{"class":134},"      finally",[128,92336,1959],{"class":138},[128,92338,92339,92342,92344,92347],{"class":130,"line":471},[128,92340,92341],{"class":199},"        alert",[128,92343,253],{"class":138},[128,92345,92346],{"class":176},"'弹出对话框'",[128,92348,180],{"class":138},[128,92350,92351],{"class":130,"line":483},[128,92352,55780],{"class":138},[128,92354,92355,92357,92359,92361,92363],{"class":130,"line":495},[128,92356,61624],{"class":138},[128,92358,61627],{"class":199},[128,92360,253],{"class":138},[128,92362,4222],{"class":166},[128,92364,180],{"class":138},[128,92366,92367],{"class":130,"line":507},[128,92368,160],{"emptyLinePlaceholder":159},[128,92370,92371],{"class":130,"line":519},[128,92372,5773],{"class":138},[128,92374,92375],{"class":130,"line":524},[128,92376,92377],{"class":3814},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[128,92379,92380],{"class":130,"line":529},[128,92381,92382],{"class":3814},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[128,92384,92385,92388],{"class":130,"line":540},[128,92386,92387],{"class":199},"    fn",[128,92389,5563],{"class":138},[128,92391,92392,92394,92396],{"class":130,"line":555},[128,92393,55799],{"class":138},[128,92395,55196],{"class":54685},[128,92397,54692],{"class":138},[128,92399,92400,92402,92404],{"class":130,"line":576},[128,92401,55168],{"class":138},[128,92403,55183],{"class":54685},[128,92405,54692],{"class":138},[128,92407,92408],{"class":130,"line":584},[128,92409,160],{"emptyLinePlaceholder":159},[128,92411,92412,92414,92416],{"class":130,"line":593},[128,92413,55168],{"class":138},[128,92415,54020],{"class":54685},[128,92417,54692],{"class":138},[19,92419,92420],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[26,92422,92423],{"start":156},[29,92424,92425],{},"debugger",[19,92427,92428],{},[5074,92429],{"alt":112,"src":92430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,92432,92433],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,92435,92437],{"id":92436},"_416-处理this","4.16 处理this",[72,92439,92441],{"id":92440},"_4161-this的指向","4.16.1 this的指向",[26,92443,92444],{},[29,92445,92446],{},"普通函数的this",[19,92448,92449],{},[5074,92450],{"alt":112,"src":92451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[26,92453,92454],{"start":142},[29,92455,92456],{},"箭头函数的this",[19,92458,92459],{},[5074,92460],{"alt":112,"src":92461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,92463,92464],{},[5074,92465],{"alt":112,"src":92466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,92468,92469],{},[5074,92470],{"alt":112,"src":92471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[72,92473,92475],{"id":92474},"_4162-this的改变","4.16.2 this的改变",[19,92477,92478],{},"call() apply() bind()",[26,92480,92481],{},[29,92482,92483],{},"call()",[19,92485,92486],{},[5074,92487],{"alt":112,"src":92488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,92490,92491],{},"两个作用：①调用函数；②改变this指向",[106,92493,92495],{"className":56449,"code":92494,"language":56451,"meta":112,"style":112},"\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",[114,92496,92497,92505,92513,92517,92522,92526,92531,92536,92541,92545,92550,92558],{"__ignoreMap":112},[128,92498,92499,92501,92503],{"class":130,"line":131},[128,92500,4657],{"class":138},[128,92502,55183],{"class":54685},[128,92504,54692],{"class":138},[128,92506,92507,92509,92511],{"class":130,"line":142},[128,92508,55526],{"class":138},[128,92510,55196],{"class":54685},[128,92512,54692],{"class":138},[128,92514,92515],{"class":130,"line":156},[128,92516,74898],{"class":138},[128,92518,92519],{"class":130,"line":163},[128,92520,92521],{"class":138},"      uname: 'pink'\n",[128,92523,92524],{"class":130,"line":183},[128,92525,5773],{"class":138},[128,92527,92528],{"class":130,"line":188},[128,92529,92530],{"class":138},"    function fn(x, y) {\n",[128,92532,92533],{"class":130,"line":193},[128,92534,92535],{"class":138},"      console.log(this)  \u002F\u002Fwindow\n",[128,92537,92538],{"class":130,"line":206},[128,92539,92540],{"class":138},"      console.log(x + y)\n",[128,92542,92543],{"class":130,"line":221},[128,92544,5773],{"class":138},[128,92546,92547],{"class":130,"line":230},[128,92548,92549],{"class":138},"    fn.call(obj, 1, 2)\n",[128,92551,92552,92554,92556],{"class":130,"line":235},[128,92553,55799],{"class":138},[128,92555,55196],{"class":54685},[128,92557,54692],{"class":138},[128,92559,92560,92562,92564],{"class":130,"line":244},[128,92561,55168],{"class":138},[128,92563,55183],{"class":54685},[128,92565,54692],{"class":138},[19,92567,92568],{},[5074,92569],{"alt":112,"src":92570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[26,92572,92573],{"start":142},[29,92574,92575],{},"apply()",[19,92577,92578],{},[5074,92579],{"alt":112,"src":92580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,92582,92491],{},[19,92584,92585],{},"call传递的是普通参数，而apply必须传递的是数组",[106,92587,92589],{"className":54018,"code":92588,"language":54020,"meta":112,"style":112},"\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",[114,92590,92591,92601,92615,92619,92627,92641,92661,92673,92681,92685,92693,92701,92711,92718,92722,92727,92743,92755,92769,92773,92778,92797,92802,92806,92811,92816,92824,92829,92851,92856,92872,92888,92900,92904,92909,92928,92936,92944,92948],{"__ignoreMap":112},[128,92592,92593,92595,92597,92599],{"class":130,"line":131},[128,92594,54682],{"class":138},[128,92596,54686],{"class":54685},[128,92598,54689],{"class":199},[128,92600,54692],{"class":138},[128,92602,92603,92605,92607,92609,92611,92613],{"class":130,"line":142},[128,92604,4657],{"class":138},[128,92606,54020],{"class":54685},[128,92608,54701],{"class":199},[128,92610,270],{"class":138},[128,92612,54706],{"class":176},[128,92614,54692],{"class":138},[128,92616,92617],{"class":130,"line":156},[128,92618,160],{"emptyLinePlaceholder":159},[128,92620,92621,92623,92625],{"class":130,"line":163},[128,92622,4657],{"class":138},[128,92624,54719],{"class":54685},[128,92626,54692],{"class":138},[128,92628,92629,92631,92633,92635,92637,92639],{"class":130,"line":183},[128,92630,55526],{"class":138},[128,92632,54729],{"class":54685},[128,92634,54732],{"class":199},[128,92636,270],{"class":138},[128,92638,54737],{"class":176},[128,92640,54692],{"class":138},[128,92642,92643,92645,92647,92649,92651,92653,92655,92657,92659],{"class":130,"line":188},[128,92644,55526],{"class":138},[128,92646,54729],{"class":54685},[128,92648,18442],{"class":199},[128,92650,270],{"class":138},[128,92652,54776],{"class":176},[128,92654,54756],{"class":199},[128,92656,270],{"class":138},[128,92658,54783],{"class":176},[128,92660,54692],{"class":138},[128,92662,92663,92665,92667,92669,92671],{"class":130,"line":193},[128,92664,55526],{"class":138},[128,92666,2752],{"class":54685},[128,92668,54794],{"class":138},[128,92670,2752],{"class":54685},[128,92672,54692],{"class":138},[128,92674,92675,92677,92679],{"class":130,"line":206},[128,92676,55168],{"class":138},[128,92678,54719],{"class":54685},[128,92680,54692],{"class":138},[128,92682,92683],{"class":130,"line":221},[128,92684,160],{"emptyLinePlaceholder":159},[128,92686,92687,92689,92691],{"class":130,"line":230},[128,92688,4657],{"class":138},[128,92690,55183],{"class":54685},[128,92692,54692],{"class":138},[128,92694,92695,92697,92699],{"class":130,"line":235},[128,92696,55526],{"class":138},[128,92698,55196],{"class":54685},[128,92700,54692],{"class":138},[128,92702,92703,92705,92707,92709],{"class":130,"line":244},[128,92704,14748],{"class":134},[128,92706,73346],{"class":166},[128,92708,170],{"class":134},[128,92710,1959],{"class":138},[128,92712,92713,92715],{"class":130,"line":287},[128,92714,75001],{"class":138},[128,92716,92717],{"class":166},"18\n",[128,92719,92720],{"class":130,"line":301},[128,92721,5773],{"class":138},[128,92723,92724],{"class":130,"line":310},[128,92725,92726],{"class":3814},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[128,92728,92729,92731,92733,92735,92737,92739,92741],{"class":130,"line":323},[128,92730,73459],{"class":134},[128,92732,92220],{"class":199},[128,92734,253],{"class":138},[128,92736,4568],{"class":266},[128,92738,258],{"class":138},[128,92740,4593],{"class":266},[128,92742,15968],{"class":138},[128,92744,92745,92747,92749,92751,92753],{"class":130,"line":330},[128,92746,61624],{"class":138},[128,92748,61627],{"class":199},[128,92750,253],{"class":138},[128,92752,90365],{"class":166},[128,92754,180],{"class":138},[128,92756,92757,92759,92761,92764,92766],{"class":130,"line":335},[128,92758,61624],{"class":138},[128,92760,61627],{"class":199},[128,92762,92763],{"class":138},"(x ",[128,92765,2457],{"class":134},[128,92767,92768],{"class":138}," y)\n",[128,92770,92771],{"class":130,"line":340},[128,92772,5773],{"class":138},[128,92774,92775],{"class":130,"line":351},[128,92776,92777],{"class":3814},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[128,92779,92780,92783,92786,92789,92791,92793,92795],{"class":130,"line":384},[128,92781,92782],{"class":138},"    fn.",[128,92784,92785],{"class":199},"apply",[128,92787,92788],{"class":138},"(obj, [",[128,92790,2592],{"class":166},[128,92792,258],{"class":138},[128,92794,409],{"class":166},[128,92796,2595],{"class":138},[128,92798,92799],{"class":130,"line":414},[128,92800,92801],{"class":3814},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[128,92803,92804],{"class":130,"line":419},[128,92805,160],{"emptyLinePlaceholder":159},[128,92807,92808],{"class":130,"line":424},[128,92809,92810],{"class":3814},"    \u002F\u002F 使用场景：求数组最大值\n",[128,92812,92813],{"class":130,"line":434},[128,92814,92815],{"class":3814},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[128,92817,92818,92821],{"class":130,"line":447},[128,92819,92820],{"class":3814},"    \u002F\u002F console.log(max)",[128,92822,92823],{"class":3814},"   \u002F\u002F3\n",[128,92825,92826],{"class":130,"line":459},[128,92827,92828],{"class":3814},"    \u002F\u002F 指向空或者Math都是可以的\n",[128,92830,92831,92833,92835,92837,92839,92841,92843,92845,92847,92849],{"class":130,"line":471},[128,92832,14748],{"class":134},[128,92834,61075],{"class":166},[128,92836,170],{"class":134},[128,92838,55608],{"class":138},[128,92840,4061],{"class":166},[128,92842,258],{"class":138},[128,92844,4253],{"class":166},[128,92846,258],{"class":138},[128,92848,4284],{"class":166},[128,92850,2376],{"class":138},[128,92852,92853],{"class":130,"line":483},[128,92854,92855],{"class":3814},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[128,92857,92858,92860,92862,92864,92867,92869],{"class":130,"line":495},[128,92859,14748],{"class":134},[128,92861,2577],{"class":166},[128,92863,170],{"class":134},[128,92865,92866],{"class":138}," Math.max.",[128,92868,92785],{"class":199},[128,92870,92871],{"class":138},"(Math, arr)\n",[128,92873,92874,92876,92879,92881,92884,92886],{"class":130,"line":507},[128,92875,14748],{"class":134},[128,92877,92878],{"class":166}," min",[128,92880,170],{"class":134},[128,92882,92883],{"class":138}," Math.min.",[128,92885,92785],{"class":199},[128,92887,92871],{"class":138},[128,92889,92890,92892,92894,92897],{"class":130,"line":519},[128,92891,77128],{"class":138},[128,92893,61627],{"class":199},[128,92895,92896],{"class":138},"(max, min)     ",[128,92898,92899],{"class":3814},"\u002F\u002F100,4\n",[128,92901,92902],{"class":130,"line":524},[128,92903,160],{"emptyLinePlaceholder":159},[128,92905,92906],{"class":130,"line":529},[128,92907,92908],{"class":3814},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[128,92910,92911,92913,92915,92918,92920,92922,92925],{"class":130,"line":540},[128,92912,77128],{"class":138},[128,92914,61627],{"class":199},[128,92916,92917],{"class":138},"(Max.",[128,92919,9572],{"class":199},[128,92921,253],{"class":138},[128,92923,92924],{"class":134},"...",[128,92926,92927],{"class":138},"arr))\n",[128,92929,92930,92932,92934],{"class":130,"line":555},[128,92931,55799],{"class":138},[128,92933,55196],{"class":54685},[128,92935,54692],{"class":138},[128,92937,92938,92940,92942],{"class":130,"line":576},[128,92939,55168],{"class":138},[128,92941,55183],{"class":54685},[128,92943,54692],{"class":138},[128,92945,92946],{"class":130,"line":584},[128,92947,160],{"emptyLinePlaceholder":159},[128,92949,92950,92952,92954],{"class":130,"line":593},[128,92951,55168],{"class":138},[128,92953,54020],{"class":54685},[128,92955,54692],{"class":138},[19,92957,92958],{},[5074,92959],{"alt":112,"src":92960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[26,92962,92963],{"start":156},[29,92964,92965],{},"bind()",[19,92967,92968],{},[5074,92969],{"alt":112,"src":92970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,92972,92973],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,92975,92976],{},"bind的语法跟call很相似",[106,92978,92980],{"className":56449,"code":92979,"language":56451,"meta":112,"style":112},"\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",[114,92981,92982,92990,92998,93002,93007,93011,93015,93020,93024,93029,93034,93039,93044,93049,93054,93059,93063,93071],{"__ignoreMap":112},[128,92983,92984,92986,92988],{"class":130,"line":131},[128,92985,4657],{"class":138},[128,92987,55183],{"class":54685},[128,92989,54692],{"class":138},[128,92991,92992,92994,92996],{"class":130,"line":142},[128,92993,55526],{"class":138},[128,92995,55196],{"class":54685},[128,92997,54692],{"class":138},[128,92999,93000],{"class":130,"line":156},[128,93001,74898],{"class":138},[128,93003,93004],{"class":130,"line":163},[128,93005,93006],{"class":138},"      age: 18\n",[128,93008,93009],{"class":130,"line":183},[128,93010,5773],{"class":138},[128,93012,93013],{"class":130,"line":188},[128,93014,80517],{"class":138},[128,93016,93017],{"class":130,"line":193},[128,93018,93019],{"class":138},"      console.log(this)\n",[128,93021,93022],{"class":130,"line":206},[128,93023,5773],{"class":138},[128,93025,93026],{"class":130,"line":221},[128,93027,93028],{"class":138},"    \u002F\u002F 1.bind 不会调用函数\n",[128,93030,93031],{"class":130,"line":230},[128,93032,93033],{"class":138},"    \u002F\u002F 2.bind能改变this的指向\n",[128,93035,93036],{"class":130,"line":235},[128,93037,93038],{"class":138},"    fn.bind()\n",[128,93040,93041],{"class":130,"line":244},[128,93042,93043],{"class":138},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[128,93045,93046],{"class":130,"line":287},[128,93047,93048],{"class":138},"    const fun = fn.bind(obj)\n",[128,93050,93051],{"class":130,"line":301},[128,93052,93053],{"class":138},"    \u002F\u002F console.log(fun)\n",[128,93055,93056],{"class":130,"line":310},[128,93057,93058],{"class":138},"    \u002F\u002F 调用,查看this的指向\n",[128,93060,93061],{"class":130,"line":323},[128,93062,56033],{"class":138},[128,93064,93065,93067,93069],{"class":130,"line":330},[128,93066,55799],{"class":138},[128,93068,55196],{"class":54685},[128,93070,54692],{"class":138},[128,93072,93073,93075,93077],{"class":130,"line":335},[128,93074,55168],{"class":138},[128,93076,55183],{"class":54685},[128,93078,54692],{"class":138},[19,93080,93081],{},[5074,93082],{"alt":112,"src":93083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[26,93085,93086],{"start":163},[29,93087,93088],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[106,93090,93092],{"className":56449,"code":93091,"language":56451,"meta":112,"style":112},"\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",[114,93093,93094,93102,93115,93123,93128,93132,93137,93142,93147,93152,93157,93162,93167,93172,93176,93184],{"__ignoreMap":112},[128,93095,93096,93098,93100],{"class":130,"line":131},[128,93097,4657],{"class":138},[128,93099,55183],{"class":54685},[128,93101,54692],{"class":138},[128,93103,93104,93106,93108,93111,93113],{"class":130,"line":142},[128,93105,55526],{"class":138},[128,93107,57268],{"class":54685},[128,93109,93110],{"class":138},">禁用\u003C\u002F",[128,93112,57268],{"class":54685},[128,93114,54692],{"class":138},[128,93116,93117,93119,93121],{"class":130,"line":156},[128,93118,55526],{"class":138},[128,93120,55196],{"class":54685},[128,93122,54692],{"class":138},[128,93124,93125],{"class":130,"line":163},[128,93126,93127],{"class":138},"    const btn = document.querySelector('button')\n",[128,93129,93130],{"class":130,"line":183},[128,93131,62396],{"class":138},[128,93133,93134],{"class":130,"line":188},[128,93135,93136],{"class":138},"      this.disabled = true\n",[128,93138,93139],{"class":130,"line":193},[128,93140,93141],{"class":138},"      \u002F\u002F 定时器是window进行调用的\n",[128,93143,93144],{"class":130,"line":206},[128,93145,93146],{"class":138},"      setTimeout(function () {\n",[128,93148,93149],{"class":130,"line":221},[128,93150,93151],{"class":138},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[128,93153,93154],{"class":130,"line":230},[128,93155,93156],{"class":138},"        this.disabled = false\n",[128,93158,93159],{"class":130,"line":235},[128,93160,93161],{"class":138},"      }.bind(this), 2000)\n",[128,93163,93164],{"class":130,"line":244},[128,93165,93166],{"class":138},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[128,93168,93169],{"class":130,"line":287},[128,93170,93171],{"class":138},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[128,93173,93174],{"class":130,"line":301},[128,93175,917],{"class":138},[128,93177,93178,93180,93182],{"class":130,"line":310},[128,93179,55799],{"class":138},[128,93181,55196],{"class":54685},[128,93183,54692],{"class":138},[128,93185,93186,93188,93190],{"class":130,"line":323},[128,93187,55168],{"class":138},[128,93189,55183],{"class":54685},[128,93191,54692],{"class":138},[26,93193,93194],{"start":183},[29,93195,25440],{},[19,93197,93198],{},[5074,93199],{"alt":112,"src":93200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,93202,93204],{"id":93203},"_417-性能优化","4.17 性能优化",[72,93206,93208],{"id":93207},"_4171-防抖","4.17.1 防抖",[19,93210,93211],{},[5074,93212],{"alt":112,"src":93213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,93215,93216],{},[3903,93217,93218],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,93220,93221],{},"防抖实现方式：",[4752,93223,93224],{},[29,93225,93226],{},"lodash 提供了防抖处理",[19,93228,93229],{},"_.debounce(func,[wait=0],[options={}])",[19,93231,93232],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[106,93234,93236],{"className":54018,"code":93235,"language":54020,"meta":112,"style":112},"\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",[114,93237,93238,93248,93262,93266,93274,93288,93308,93320,93328,93334,93344,93356,93368,93379,93391,93401,93411,93424,93428,93436,93444,93448,93456,93474,93492,93500,93519,93529,93538,93549,93554,93558,93563,93568,93573,93598,93606,93614,93618],{"__ignoreMap":112},[128,93239,93240,93242,93244,93246],{"class":130,"line":131},[128,93241,54682],{"class":138},[128,93243,54686],{"class":54685},[128,93245,54689],{"class":199},[128,93247,54692],{"class":138},[128,93249,93250,93252,93254,93256,93258,93260],{"class":130,"line":142},[128,93251,4657],{"class":138},[128,93253,54020],{"class":54685},[128,93255,54701],{"class":199},[128,93257,270],{"class":138},[128,93259,54706],{"class":176},[128,93261,54692],{"class":138},[128,93263,93264],{"class":130,"line":156},[128,93265,160],{"emptyLinePlaceholder":159},[128,93267,93268,93270,93272],{"class":130,"line":163},[128,93269,4657],{"class":138},[128,93271,54719],{"class":54685},[128,93273,54692],{"class":138},[128,93275,93276,93278,93280,93282,93284,93286],{"class":130,"line":183},[128,93277,55526],{"class":138},[128,93279,54729],{"class":54685},[128,93281,54732],{"class":199},[128,93283,270],{"class":138},[128,93285,54737],{"class":176},[128,93287,54692],{"class":138},[128,93289,93290,93292,93294,93296,93298,93300,93302,93304,93306],{"class":130,"line":188},[128,93291,55526],{"class":138},[128,93293,54729],{"class":54685},[128,93295,18442],{"class":199},[128,93297,270],{"class":138},[128,93299,54776],{"class":176},[128,93301,54756],{"class":199},[128,93303,270],{"class":138},[128,93305,54783],{"class":176},[128,93307,54692],{"class":138},[128,93309,93310,93312,93314,93316,93318],{"class":130,"line":193},[128,93311,55526],{"class":138},[128,93313,2752],{"class":54685},[128,93315,54794],{"class":138},[128,93317,2752],{"class":54685},[128,93319,54692],{"class":138},[128,93321,93322,93324,93326],{"class":130,"line":206},[128,93323,55526],{"class":138},[128,93325,3659],{"class":54685},[128,93327,54692],{"class":138},[128,93329,93330,93332],{"class":130,"line":221},[128,93331,58133],{"class":199},[128,93333,1959],{"class":138},[128,93335,93336,93338,93340,93342],{"class":130,"line":230},[128,93337,75971],{"class":166},[128,93339,1967],{"class":138},[128,93341,63885],{"class":166},[128,93343,4905],{"class":138},[128,93345,93346,93348,93350,93352,93354],{"class":130,"line":235},[128,93347,58152],{"class":166},[128,93349,1967],{"class":138},[128,93351,3143],{"class":166},[128,93353,54875],{"class":134},[128,93355,4905],{"class":138},[128,93357,93358,93360,93362,93364,93366],{"class":130,"line":244},[128,93359,58166],{"class":166},[128,93361,1967],{"class":138},[128,93363,3143],{"class":166},[128,93365,54875],{"class":134},[128,93367,4905],{"class":138},[128,93369,93370,93372,93374,93377],{"class":130,"line":287},[128,93371,58265],{"class":166},[128,93373,1967],{"class":138},[128,93375,93376],{"class":166},"gray",[128,93378,4905],{"class":138},[128,93380,93381,93383,93385,93387,93389],{"class":130,"line":301},[128,93382,58303],{"class":166},[128,93384,1967],{"class":138},[128,93386,4573],{"class":166},[128,93388,54875],{"class":134},[128,93390,4905],{"class":138},[128,93392,93393,93395,93397,93399],{"class":130,"line":310},[128,93394,60796],{"class":166},[128,93396,1967],{"class":138},[128,93398,64221],{"class":166},[128,93400,4905],{"class":138},[128,93402,93403,93405,93407,93409],{"class":130,"line":323},[128,93404,60666],{"class":166},[128,93406,1967],{"class":138},[128,93408,54975],{"class":166},[128,93410,4905],{"class":138},[128,93412,93413,93416,93418,93420,93422],{"class":130,"line":330},[128,93414,93415],{"class":166},"      padding-top",[128,93417,1967],{"class":138},[128,93419,4069],{"class":166},[128,93421,54875],{"class":134},[128,93423,4905],{"class":138},[128,93425,93426],{"class":130,"line":335},[128,93427,5773],{"class":138},[128,93429,93430,93432,93434],{"class":130,"line":340},[128,93431,55799],{"class":138},[128,93433,3659],{"class":54685},[128,93435,54692],{"class":138},[128,93437,93438,93440,93442],{"class":130,"line":351},[128,93439,55168],{"class":138},[128,93441,54719],{"class":54685},[128,93443,54692],{"class":138},[128,93445,93446],{"class":130,"line":384},[128,93447,160],{"emptyLinePlaceholder":159},[128,93449,93450,93452,93454],{"class":130,"line":414},[128,93451,4657],{"class":138},[128,93453,55183],{"class":54685},[128,93455,54692],{"class":138},[128,93457,93458,93460,93462,93464,93466,93468,93470,93472],{"class":130,"line":419},[128,93459,55526],{"class":138},[128,93461,54994],{"class":54685},[128,93463,56868],{"class":199},[128,93465,270],{"class":138},[128,93467,56873],{"class":176},[128,93469,58695],{"class":138},[128,93471,54994],{"class":54685},[128,93473,54692],{"class":138},[128,93475,93476,93478,93480,93482,93484,93486,93488,93490],{"class":130,"line":424},[128,93477,55526],{"class":138},[128,93479,55196],{"class":54685},[128,93481,58620],{"class":199},[128,93483,270],{"class":138},[128,93485,91644],{"class":176},[128,93487,58695],{"class":138},[128,93489,55196],{"class":54685},[128,93491,54692],{"class":138},[128,93493,93494,93496,93498],{"class":130,"line":434},[128,93495,55526],{"class":138},[128,93497,55196],{"class":54685},[128,93499,54692],{"class":138},[128,93501,93502,93504,93506,93508,93510,93512,93514,93517],{"class":130,"line":447},[128,93503,14748],{"class":134},[128,93505,90305],{"class":166},[128,93507,170],{"class":134},[128,93509,57777],{"class":138},[128,93511,57780],{"class":199},[128,93513,253],{"class":138},[128,93515,93516],{"class":176},"'.box'",[128,93518,180],{"class":138},[128,93520,93521,93523,93525,93527],{"class":130,"line":459},[128,93522,55601],{"class":134},[128,93524,12984],{"class":138},[128,93526,270],{"class":134},[128,93528,50718],{"class":166},[128,93530,93531,93533,93536],{"class":130,"line":471},[128,93532,73459],{"class":134},[128,93534,93535],{"class":199}," mouseMove",[128,93537,14380],{"class":138},[128,93539,93540,93543,93545,93547],{"class":130,"line":483},[128,93541,93542],{"class":138},"      box.innerHTML ",[128,93544,270],{"class":134},[128,93546,6603],{"class":138},[128,93548,6275],{"class":134},[128,93550,93551],{"class":130,"line":495},[128,93552,93553],{"class":3814},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[128,93555,93556],{"class":130,"line":507},[128,93557,5773],{"class":138},[128,93559,93560],{"class":130,"line":519},[128,93561,93562],{"class":3814},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[128,93564,93565],{"class":130,"line":524},[128,93566,93567],{"class":3814},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[128,93569,93570],{"class":130,"line":529},[128,93571,93572],{"class":3814},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[128,93574,93575,93578,93580,93582,93585,93588,93591,93594,93596],{"class":130,"line":540},[128,93576,93577],{"class":138},"    box.",[128,93579,61193],{"class":199},[128,93581,253],{"class":138},[128,93583,93584],{"class":176},"'mousemove'",[128,93586,93587],{"class":138},", _.",[128,93589,93590],{"class":199},"debounce",[128,93592,93593],{"class":138},"(mouseMove, ",[128,93595,68452],{"class":166},[128,93597,3034],{"class":138},[128,93599,93600,93602,93604],{"class":130,"line":555},[128,93601,55799],{"class":138},[128,93603,55196],{"class":54685},[128,93605,54692],{"class":138},[128,93607,93608,93610,93612],{"class":130,"line":576},[128,93609,55168],{"class":138},[128,93611,55183],{"class":54685},[128,93613,54692],{"class":138},[128,93615,93616],{"class":130,"line":584},[128,93617,160],{"emptyLinePlaceholder":159},[128,93619,93620,93622,93624],{"class":130,"line":593},[128,93621,55168],{"class":138},[128,93623,54020],{"class":54685},[128,93625,54692],{"class":138},[4752,93627,93628],{},[29,93629,93630],{},"手写一个防抖函数来处理",[19,93632,93633],{},"防抖的核心就是利用定时器来实现的：",[19,93635,93636],{},"①声明一个定时器变量",[19,93638,93639],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,93641,93642],{},"③如果没有定时器则开启定时器，记得存到变量里面",[106,93644,93646],{"className":54018,"code":93645,"language":54020,"meta":112,"style":112},"\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",[114,93647,93648,93658,93672,93676,93684,93698,93718,93730,93738,93744,93754,93766,93778,93788,93800,93810,93820,93832,93836,93844,93852,93856,93864,93882,93900,93908,93926,93936,93944,93954,93958,93962,93966,93971,93976,93981,93986,93991,93996,94014,94021,94026,94034,94039,94052,94068,94078,94083,94087,94091,94111,94115,94120,94125,94130,94135,94143,94151,94155],{"__ignoreMap":112},[128,93649,93650,93652,93654,93656],{"class":130,"line":131},[128,93651,54682],{"class":138},[128,93653,54686],{"class":54685},[128,93655,54689],{"class":199},[128,93657,54692],{"class":138},[128,93659,93660,93662,93664,93666,93668,93670],{"class":130,"line":142},[128,93661,4657],{"class":138},[128,93663,54020],{"class":54685},[128,93665,54701],{"class":199},[128,93667,270],{"class":138},[128,93669,54706],{"class":176},[128,93671,54692],{"class":138},[128,93673,93674],{"class":130,"line":156},[128,93675,160],{"emptyLinePlaceholder":159},[128,93677,93678,93680,93682],{"class":130,"line":163},[128,93679,4657],{"class":138},[128,93681,54719],{"class":54685},[128,93683,54692],{"class":138},[128,93685,93686,93688,93690,93692,93694,93696],{"class":130,"line":183},[128,93687,55526],{"class":138},[128,93689,54729],{"class":54685},[128,93691,54732],{"class":199},[128,93693,270],{"class":138},[128,93695,54737],{"class":176},[128,93697,54692],{"class":138},[128,93699,93700,93702,93704,93706,93708,93710,93712,93714,93716],{"class":130,"line":188},[128,93701,55526],{"class":138},[128,93703,54729],{"class":54685},[128,93705,18442],{"class":199},[128,93707,270],{"class":138},[128,93709,54776],{"class":176},[128,93711,54756],{"class":199},[128,93713,270],{"class":138},[128,93715,54783],{"class":176},[128,93717,54692],{"class":138},[128,93719,93720,93722,93724,93726,93728],{"class":130,"line":193},[128,93721,55526],{"class":138},[128,93723,2752],{"class":54685},[128,93725,54794],{"class":138},[128,93727,2752],{"class":54685},[128,93729,54692],{"class":138},[128,93731,93732,93734,93736],{"class":130,"line":206},[128,93733,55526],{"class":138},[128,93735,3659],{"class":54685},[128,93737,54692],{"class":138},[128,93739,93740,93742],{"class":130,"line":221},[128,93741,58133],{"class":199},[128,93743,1959],{"class":138},[128,93745,93746,93748,93750,93752],{"class":130,"line":230},[128,93747,75971],{"class":166},[128,93749,1967],{"class":138},[128,93751,63885],{"class":166},[128,93753,4905],{"class":138},[128,93755,93756,93758,93760,93762,93764],{"class":130,"line":235},[128,93757,58152],{"class":166},[128,93759,1967],{"class":138},[128,93761,3143],{"class":166},[128,93763,54875],{"class":134},[128,93765,4905],{"class":138},[128,93767,93768,93770,93772,93774,93776],{"class":130,"line":244},[128,93769,58166],{"class":166},[128,93771,1967],{"class":138},[128,93773,3143],{"class":166},[128,93775,54875],{"class":134},[128,93777,4905],{"class":138},[128,93779,93780,93782,93784,93786],{"class":130,"line":287},[128,93781,58265],{"class":166},[128,93783,1967],{"class":138},[128,93785,93376],{"class":166},[128,93787,4905],{"class":138},[128,93789,93790,93792,93794,93796,93798],{"class":130,"line":301},[128,93791,58303],{"class":166},[128,93793,1967],{"class":138},[128,93795,4573],{"class":166},[128,93797,54875],{"class":134},[128,93799,4905],{"class":138},[128,93801,93802,93804,93806,93808],{"class":130,"line":310},[128,93803,60796],{"class":166},[128,93805,1967],{"class":138},[128,93807,64221],{"class":166},[128,93809,4905],{"class":138},[128,93811,93812,93814,93816,93818],{"class":130,"line":323},[128,93813,60666],{"class":166},[128,93815,1967],{"class":138},[128,93817,54975],{"class":166},[128,93819,4905],{"class":138},[128,93821,93822,93824,93826,93828,93830],{"class":130,"line":330},[128,93823,93415],{"class":166},[128,93825,1967],{"class":138},[128,93827,4069],{"class":166},[128,93829,54875],{"class":134},[128,93831,4905],{"class":138},[128,93833,93834],{"class":130,"line":335},[128,93835,5773],{"class":138},[128,93837,93838,93840,93842],{"class":130,"line":340},[128,93839,55799],{"class":138},[128,93841,3659],{"class":54685},[128,93843,54692],{"class":138},[128,93845,93846,93848,93850],{"class":130,"line":351},[128,93847,55168],{"class":138},[128,93849,54719],{"class":54685},[128,93851,54692],{"class":138},[128,93853,93854],{"class":130,"line":384},[128,93855,160],{"emptyLinePlaceholder":159},[128,93857,93858,93860,93862],{"class":130,"line":414},[128,93859,4657],{"class":138},[128,93861,55183],{"class":54685},[128,93863,54692],{"class":138},[128,93865,93866,93868,93870,93872,93874,93876,93878,93880],{"class":130,"line":419},[128,93867,55526],{"class":138},[128,93869,54994],{"class":54685},[128,93871,56868],{"class":199},[128,93873,270],{"class":138},[128,93875,56873],{"class":176},[128,93877,58695],{"class":138},[128,93879,54994],{"class":54685},[128,93881,54692],{"class":138},[128,93883,93884,93886,93888,93890,93892,93894,93896,93898],{"class":130,"line":424},[128,93885,55526],{"class":138},[128,93887,55196],{"class":54685},[128,93889,58620],{"class":199},[128,93891,270],{"class":138},[128,93893,91644],{"class":176},[128,93895,58695],{"class":138},[128,93897,55196],{"class":54685},[128,93899,54692],{"class":138},[128,93901,93902,93904,93906],{"class":130,"line":434},[128,93903,55526],{"class":138},[128,93905,55196],{"class":54685},[128,93907,54692],{"class":138},[128,93909,93910,93912,93914,93916,93918,93920,93922,93924],{"class":130,"line":447},[128,93911,14748],{"class":134},[128,93913,90305],{"class":166},[128,93915,170],{"class":134},[128,93917,57777],{"class":138},[128,93919,57780],{"class":199},[128,93921,253],{"class":138},[128,93923,93516],{"class":176},[128,93925,180],{"class":138},[128,93927,93928,93930,93932,93934],{"class":130,"line":459},[128,93929,55601],{"class":134},[128,93931,12984],{"class":138},[128,93933,270],{"class":134},[128,93935,50718],{"class":166},[128,93937,93938,93940,93942],{"class":130,"line":471},[128,93939,73459],{"class":134},[128,93941,93535],{"class":199},[128,93943,14380],{"class":138},[128,93945,93946,93948,93950,93952],{"class":130,"line":483},[128,93947,93542],{"class":138},[128,93949,270],{"class":134},[128,93951,6603],{"class":138},[128,93953,6275],{"class":134},[128,93955,93956],{"class":130,"line":495},[128,93957,93553],{"class":3814},[128,93959,93960],{"class":130,"line":507},[128,93961,5773],{"class":138},[128,93963,93964],{"class":130,"line":519},[128,93965,93562],{"class":3814},[128,93967,93968],{"class":130,"line":524},[128,93969,93970],{"class":3814},"    \u002F\u002F 手写防抖函数\n",[128,93972,93973],{"class":130,"line":529},[128,93974,93975],{"class":3814},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[128,93977,93978],{"class":130,"line":540},[128,93979,93980],{"class":3814},"    \u002F\u002F 1.声明定时器变量\n",[128,93982,93983],{"class":130,"line":555},[128,93984,93985],{"class":3814},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[128,93987,93988],{"class":130,"line":576},[128,93989,93990],{"class":3814},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[128,93992,93993],{"class":130,"line":584},[128,93994,93995],{"class":3814},"    \u002F\u002F 4.定时器里面写函数调用\n",[128,93997,93998,94000,94003,94005,94008,94010,94012],{"class":130,"line":593},[128,93999,73459],{"class":134},[128,94001,94002],{"class":199}," debounce",[128,94004,253],{"class":138},[128,94006,94007],{"class":266},"fn",[128,94009,258],{"class":138},[128,94011,4469],{"class":266},[128,94013,15968],{"class":138},[128,94015,94016,94018],{"class":130,"line":598},[128,94017,83146],{"class":134},[128,94019,94020],{"class":138}," timer\n",[128,94022,94023],{"class":130,"line":603},[128,94024,94025],{"class":3814},"      \u002F\u002F return 返回一个匿名函数\n",[128,94027,94028,94030,94032],{"class":130,"line":614},[128,94029,77356],{"class":134},[128,94031,62298],{"class":134},[128,94033,57833],{"class":138},[128,94035,94036],{"class":130,"line":625},[128,94037,94038],{"class":3814},"        \u002F\u002F 这里边写第二三四步\n",[128,94040,94041,94043,94046,94049],{"class":130,"line":633},[128,94042,558],{"class":134},[128,94044,94045],{"class":138}," (timer) ",[128,94047,94048],{"class":199},"clearTimeout",[128,94050,94051],{"class":138},"(timer)\n",[128,94053,94054,94057,94059,94062,94064,94066],{"class":130,"line":649},[128,94055,94056],{"class":138},"        timer ",[128,94058,270],{"class":134},[128,94060,94061],{"class":199}," setTimeout",[128,94063,253],{"class":138},[128,94065,57830],{"class":134},[128,94067,57833],{"class":138},[128,94069,94070,94073,94075],{"class":130,"line":660},[128,94071,94072],{"class":199},"          fn",[128,94074,16576],{"class":138},[128,94076,94077],{"class":3814},"\u002F\u002F加小括号调用fn }, t)\n",[128,94079,94080],{"class":130,"line":673},[128,94081,94082],{"class":138},"        }, t)\n",[128,94084,94085],{"class":130,"line":678},[128,94086,55780],{"class":138},[128,94088,94089],{"class":130,"line":683},[128,94090,5773],{"class":138},[128,94092,94093,94095,94097,94099,94101,94103,94105,94107,94109],{"class":130,"line":693},[128,94094,93577],{"class":138},[128,94096,61193],{"class":199},[128,94098,253],{"class":138},[128,94100,93584],{"class":176},[128,94102,258],{"class":138},[128,94104,93590],{"class":199},[128,94106,93593],{"class":138},[128,94108,68452],{"class":166},[128,94110,3034],{"class":138},[128,94112,94113],{"class":130,"line":702},[128,94114,160],{"emptyLinePlaceholder":159},[128,94116,94117],{"class":130,"line":709},[128,94118,94119],{"class":3814},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[128,94121,94122],{"class":130,"line":723},[128,94123,94124],{"class":3814},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[128,94126,94127],{"class":130,"line":732},[128,94128,94129],{"class":3814},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[128,94131,94132],{"class":130,"line":744},[128,94133,94134],{"class":3814},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[128,94136,94137,94139,94141],{"class":130,"line":749},[128,94138,55799],{"class":138},[128,94140,55196],{"class":54685},[128,94142,54692],{"class":138},[128,94144,94145,94147,94149],{"class":130,"line":754},[128,94146,55168],{"class":138},[128,94148,55183],{"class":54685},[128,94150,54692],{"class":138},[128,94152,94153],{"class":130,"line":764},[128,94154,160],{"emptyLinePlaceholder":159},[128,94156,94157,94159,94161],{"class":130,"line":782},[128,94158,55168],{"class":138},[128,94160,54020],{"class":54685},[128,94162,54692],{"class":138},[72,94164,94166],{"id":94165},"_4172-节流","4.17.2 节流",[19,94168,94169],{},[5074,94170],{"alt":112,"src":94171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,94173,94174],{},[5074,94175],{"alt":112,"src":94176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,94178,94179],{},[3903,94180,94181],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,94183,94184],{},"实现方式：",[4752,94186,94187],{},[29,94188,94189],{},"lodash 提供的节流函数来处理",[19,94191,94192],{},"_.throttle(func,[wait=0],[options=])",[19,94194,94195],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[106,94197,94199],{"className":54018,"code":94198,"language":54020,"meta":112,"style":112},"\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",[114,94200,94201,94211,94225,94229,94237,94251,94271,94283,94291,94297,94307,94319,94331,94341,94353,94363,94373,94385,94389,94397,94405,94409,94417,94435,94453,94461,94479,94489,94497,94507,94511,94515,94519,94524,94529,94550,94558,94566,94570],{"__ignoreMap":112},[128,94202,94203,94205,94207,94209],{"class":130,"line":131},[128,94204,54682],{"class":138},[128,94206,54686],{"class":54685},[128,94208,54689],{"class":199},[128,94210,54692],{"class":138},[128,94212,94213,94215,94217,94219,94221,94223],{"class":130,"line":142},[128,94214,4657],{"class":138},[128,94216,54020],{"class":54685},[128,94218,54701],{"class":199},[128,94220,270],{"class":138},[128,94222,54706],{"class":176},[128,94224,54692],{"class":138},[128,94226,94227],{"class":130,"line":156},[128,94228,160],{"emptyLinePlaceholder":159},[128,94230,94231,94233,94235],{"class":130,"line":163},[128,94232,4657],{"class":138},[128,94234,54719],{"class":54685},[128,94236,54692],{"class":138},[128,94238,94239,94241,94243,94245,94247,94249],{"class":130,"line":183},[128,94240,55526],{"class":138},[128,94242,54729],{"class":54685},[128,94244,54732],{"class":199},[128,94246,270],{"class":138},[128,94248,54737],{"class":176},[128,94250,54692],{"class":138},[128,94252,94253,94255,94257,94259,94261,94263,94265,94267,94269],{"class":130,"line":188},[128,94254,55526],{"class":138},[128,94256,54729],{"class":54685},[128,94258,18442],{"class":199},[128,94260,270],{"class":138},[128,94262,54776],{"class":176},[128,94264,54756],{"class":199},[128,94266,270],{"class":138},[128,94268,54783],{"class":176},[128,94270,54692],{"class":138},[128,94272,94273,94275,94277,94279,94281],{"class":130,"line":193},[128,94274,55526],{"class":138},[128,94276,2752],{"class":54685},[128,94278,54794],{"class":138},[128,94280,2752],{"class":54685},[128,94282,54692],{"class":138},[128,94284,94285,94287,94289],{"class":130,"line":206},[128,94286,55526],{"class":138},[128,94288,3659],{"class":54685},[128,94290,54692],{"class":138},[128,94292,94293,94295],{"class":130,"line":221},[128,94294,58133],{"class":199},[128,94296,1959],{"class":138},[128,94298,94299,94301,94303,94305],{"class":130,"line":230},[128,94300,75971],{"class":166},[128,94302,1967],{"class":138},[128,94304,63885],{"class":166},[128,94306,4905],{"class":138},[128,94308,94309,94311,94313,94315,94317],{"class":130,"line":235},[128,94310,58152],{"class":166},[128,94312,1967],{"class":138},[128,94314,3143],{"class":166},[128,94316,54875],{"class":134},[128,94318,4905],{"class":138},[128,94320,94321,94323,94325,94327,94329],{"class":130,"line":244},[128,94322,58166],{"class":166},[128,94324,1967],{"class":138},[128,94326,3143],{"class":166},[128,94328,54875],{"class":134},[128,94330,4905],{"class":138},[128,94332,94333,94335,94337,94339],{"class":130,"line":287},[128,94334,58265],{"class":166},[128,94336,1967],{"class":138},[128,94338,93376],{"class":166},[128,94340,4905],{"class":138},[128,94342,94343,94345,94347,94349,94351],{"class":130,"line":301},[128,94344,58303],{"class":166},[128,94346,1967],{"class":138},[128,94348,4573],{"class":166},[128,94350,54875],{"class":134},[128,94352,4905],{"class":138},[128,94354,94355,94357,94359,94361],{"class":130,"line":310},[128,94356,60796],{"class":166},[128,94358,1967],{"class":138},[128,94360,64221],{"class":166},[128,94362,4905],{"class":138},[128,94364,94365,94367,94369,94371],{"class":130,"line":323},[128,94366,60666],{"class":166},[128,94368,1967],{"class":138},[128,94370,54975],{"class":166},[128,94372,4905],{"class":138},[128,94374,94375,94377,94379,94381,94383],{"class":130,"line":330},[128,94376,93415],{"class":166},[128,94378,1967],{"class":138},[128,94380,4069],{"class":166},[128,94382,54875],{"class":134},[128,94384,4905],{"class":138},[128,94386,94387],{"class":130,"line":335},[128,94388,5773],{"class":138},[128,94390,94391,94393,94395],{"class":130,"line":340},[128,94392,55799],{"class":138},[128,94394,3659],{"class":54685},[128,94396,54692],{"class":138},[128,94398,94399,94401,94403],{"class":130,"line":351},[128,94400,55168],{"class":138},[128,94402,54719],{"class":54685},[128,94404,54692],{"class":138},[128,94406,94407],{"class":130,"line":384},[128,94408,160],{"emptyLinePlaceholder":159},[128,94410,94411,94413,94415],{"class":130,"line":414},[128,94412,4657],{"class":138},[128,94414,55183],{"class":54685},[128,94416,54692],{"class":138},[128,94418,94419,94421,94423,94425,94427,94429,94431,94433],{"class":130,"line":419},[128,94420,55526],{"class":138},[128,94422,54994],{"class":54685},[128,94424,56868],{"class":199},[128,94426,270],{"class":138},[128,94428,56873],{"class":176},[128,94430,58695],{"class":138},[128,94432,54994],{"class":54685},[128,94434,54692],{"class":138},[128,94436,94437,94439,94441,94443,94445,94447,94449,94451],{"class":130,"line":424},[128,94438,55526],{"class":138},[128,94440,55196],{"class":54685},[128,94442,58620],{"class":199},[128,94444,270],{"class":138},[128,94446,91644],{"class":176},[128,94448,58695],{"class":138},[128,94450,55196],{"class":54685},[128,94452,54692],{"class":138},[128,94454,94455,94457,94459],{"class":130,"line":434},[128,94456,55526],{"class":138},[128,94458,55196],{"class":54685},[128,94460,54692],{"class":138},[128,94462,94463,94465,94467,94469,94471,94473,94475,94477],{"class":130,"line":447},[128,94464,14748],{"class":134},[128,94466,90305],{"class":166},[128,94468,170],{"class":134},[128,94470,57777],{"class":138},[128,94472,57780],{"class":199},[128,94474,253],{"class":138},[128,94476,93516],{"class":176},[128,94478,180],{"class":138},[128,94480,94481,94483,94485,94487],{"class":130,"line":459},[128,94482,55601],{"class":134},[128,94484,12984],{"class":138},[128,94486,270],{"class":134},[128,94488,50718],{"class":166},[128,94490,94491,94493,94495],{"class":130,"line":471},[128,94492,73459],{"class":134},[128,94494,93535],{"class":199},[128,94496,14380],{"class":138},[128,94498,94499,94501,94503,94505],{"class":130,"line":483},[128,94500,93542],{"class":138},[128,94502,270],{"class":134},[128,94504,6603],{"class":138},[128,94506,6275],{"class":134},[128,94508,94509],{"class":130,"line":495},[128,94510,93553],{"class":3814},[128,94512,94513],{"class":130,"line":507},[128,94514,5773],{"class":138},[128,94516,94517],{"class":130,"line":519},[128,94518,93562],{"class":3814},[128,94520,94521],{"class":130,"line":524},[128,94522,94523],{"class":3814},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[128,94525,94526],{"class":130,"line":529},[128,94527,94528],{"class":3814},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[128,94530,94531,94533,94535,94537,94539,94541,94544,94546,94548],{"class":130,"line":540},[128,94532,93577],{"class":138},[128,94534,61193],{"class":199},[128,94536,253],{"class":138},[128,94538,93584],{"class":176},[128,94540,93587],{"class":138},[128,94542,94543],{"class":199},"throttle",[128,94545,93593],{"class":138},[128,94547,68452],{"class":166},[128,94549,3034],{"class":138},[128,94551,94552,94554,94556],{"class":130,"line":555},[128,94553,55799],{"class":138},[128,94555,55196],{"class":54685},[128,94557,54692],{"class":138},[128,94559,94560,94562,94564],{"class":130,"line":576},[128,94561,55168],{"class":138},[128,94563,55183],{"class":54685},[128,94565,54692],{"class":138},[128,94567,94568],{"class":130,"line":584},[128,94569,160],{"emptyLinePlaceholder":159},[128,94571,94572,94574,94576],{"class":130,"line":593},[128,94573,55168],{"class":138},[128,94575,54020],{"class":54685},[128,94577,54692],{"class":138},[4752,94579,94580],{},[29,94581,94582],{},"手写一个节流函数来处理",[19,94584,74327],{},[19,94586,93636],{},[19,94588,94589],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,94591,94592],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[106,94594,94596],{"className":54018,"code":94595,"language":54020,"meta":112,"style":112},"\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",[114,94597,94598,94608,94622,94626,94634,94648,94668,94680,94688,94694,94704,94716,94728,94738,94750,94760,94770,94782,94786,94794,94802,94806,94814,94832,94850,94858,94876,94886,94894,94904,94908,94912,94916,94921,94926,94931,94936,94941,94946,94963,94969,94977,94988,95003,95010,95015,95020,95030,95035,95040,95045,95049,95053,95057,95077,95085,95093,95097],{"__ignoreMap":112},[128,94599,94600,94602,94604,94606],{"class":130,"line":131},[128,94601,54682],{"class":138},[128,94603,54686],{"class":54685},[128,94605,54689],{"class":199},[128,94607,54692],{"class":138},[128,94609,94610,94612,94614,94616,94618,94620],{"class":130,"line":142},[128,94611,4657],{"class":138},[128,94613,54020],{"class":54685},[128,94615,54701],{"class":199},[128,94617,270],{"class":138},[128,94619,54706],{"class":176},[128,94621,54692],{"class":138},[128,94623,94624],{"class":130,"line":156},[128,94625,160],{"emptyLinePlaceholder":159},[128,94627,94628,94630,94632],{"class":130,"line":163},[128,94629,4657],{"class":138},[128,94631,54719],{"class":54685},[128,94633,54692],{"class":138},[128,94635,94636,94638,94640,94642,94644,94646],{"class":130,"line":183},[128,94637,55526],{"class":138},[128,94639,54729],{"class":54685},[128,94641,54732],{"class":199},[128,94643,270],{"class":138},[128,94645,54737],{"class":176},[128,94647,54692],{"class":138},[128,94649,94650,94652,94654,94656,94658,94660,94662,94664,94666],{"class":130,"line":188},[128,94651,55526],{"class":138},[128,94653,54729],{"class":54685},[128,94655,18442],{"class":199},[128,94657,270],{"class":138},[128,94659,54776],{"class":176},[128,94661,54756],{"class":199},[128,94663,270],{"class":138},[128,94665,54783],{"class":176},[128,94667,54692],{"class":138},[128,94669,94670,94672,94674,94676,94678],{"class":130,"line":193},[128,94671,55526],{"class":138},[128,94673,2752],{"class":54685},[128,94675,54794],{"class":138},[128,94677,2752],{"class":54685},[128,94679,54692],{"class":138},[128,94681,94682,94684,94686],{"class":130,"line":206},[128,94683,55526],{"class":138},[128,94685,3659],{"class":54685},[128,94687,54692],{"class":138},[128,94689,94690,94692],{"class":130,"line":221},[128,94691,58133],{"class":199},[128,94693,1959],{"class":138},[128,94695,94696,94698,94700,94702],{"class":130,"line":230},[128,94697,75971],{"class":166},[128,94699,1967],{"class":138},[128,94701,63885],{"class":166},[128,94703,4905],{"class":138},[128,94705,94706,94708,94710,94712,94714],{"class":130,"line":235},[128,94707,58152],{"class":166},[128,94709,1967],{"class":138},[128,94711,3143],{"class":166},[128,94713,54875],{"class":134},[128,94715,4905],{"class":138},[128,94717,94718,94720,94722,94724,94726],{"class":130,"line":244},[128,94719,58166],{"class":166},[128,94721,1967],{"class":138},[128,94723,3143],{"class":166},[128,94725,54875],{"class":134},[128,94727,4905],{"class":138},[128,94729,94730,94732,94734,94736],{"class":130,"line":287},[128,94731,58265],{"class":166},[128,94733,1967],{"class":138},[128,94735,93376],{"class":166},[128,94737,4905],{"class":138},[128,94739,94740,94742,94744,94746,94748],{"class":130,"line":301},[128,94741,58303],{"class":166},[128,94743,1967],{"class":138},[128,94745,4573],{"class":166},[128,94747,54875],{"class":134},[128,94749,4905],{"class":138},[128,94751,94752,94754,94756,94758],{"class":130,"line":310},[128,94753,60796],{"class":166},[128,94755,1967],{"class":138},[128,94757,64221],{"class":166},[128,94759,4905],{"class":138},[128,94761,94762,94764,94766,94768],{"class":130,"line":323},[128,94763,60666],{"class":166},[128,94765,1967],{"class":138},[128,94767,54975],{"class":166},[128,94769,4905],{"class":138},[128,94771,94772,94774,94776,94778,94780],{"class":130,"line":330},[128,94773,93415],{"class":166},[128,94775,1967],{"class":138},[128,94777,4069],{"class":166},[128,94779,54875],{"class":134},[128,94781,4905],{"class":138},[128,94783,94784],{"class":130,"line":335},[128,94785,5773],{"class":138},[128,94787,94788,94790,94792],{"class":130,"line":340},[128,94789,55799],{"class":138},[128,94791,3659],{"class":54685},[128,94793,54692],{"class":138},[128,94795,94796,94798,94800],{"class":130,"line":351},[128,94797,55168],{"class":138},[128,94799,54719],{"class":54685},[128,94801,54692],{"class":138},[128,94803,94804],{"class":130,"line":384},[128,94805,160],{"emptyLinePlaceholder":159},[128,94807,94808,94810,94812],{"class":130,"line":414},[128,94809,4657],{"class":138},[128,94811,55183],{"class":54685},[128,94813,54692],{"class":138},[128,94815,94816,94818,94820,94822,94824,94826,94828,94830],{"class":130,"line":419},[128,94817,55526],{"class":138},[128,94819,54994],{"class":54685},[128,94821,56868],{"class":199},[128,94823,270],{"class":138},[128,94825,56873],{"class":176},[128,94827,58695],{"class":138},[128,94829,54994],{"class":54685},[128,94831,54692],{"class":138},[128,94833,94834,94836,94838,94840,94842,94844,94846,94848],{"class":130,"line":424},[128,94835,55526],{"class":138},[128,94837,55196],{"class":54685},[128,94839,58620],{"class":199},[128,94841,270],{"class":138},[128,94843,91644],{"class":176},[128,94845,58695],{"class":138},[128,94847,55196],{"class":54685},[128,94849,54692],{"class":138},[128,94851,94852,94854,94856],{"class":130,"line":434},[128,94853,55526],{"class":138},[128,94855,55196],{"class":54685},[128,94857,54692],{"class":138},[128,94859,94860,94862,94864,94866,94868,94870,94872,94874],{"class":130,"line":447},[128,94861,14748],{"class":134},[128,94863,90305],{"class":166},[128,94865,170],{"class":134},[128,94867,57777],{"class":138},[128,94869,57780],{"class":199},[128,94871,253],{"class":138},[128,94873,93516],{"class":176},[128,94875,180],{"class":138},[128,94877,94878,94880,94882,94884],{"class":130,"line":459},[128,94879,55601],{"class":134},[128,94881,12984],{"class":138},[128,94883,270],{"class":134},[128,94885,50718],{"class":166},[128,94887,94888,94890,94892],{"class":130,"line":471},[128,94889,73459],{"class":134},[128,94891,93535],{"class":199},[128,94893,14380],{"class":138},[128,94895,94896,94898,94900,94902],{"class":130,"line":483},[128,94897,93542],{"class":138},[128,94899,270],{"class":134},[128,94901,6603],{"class":138},[128,94903,6275],{"class":134},[128,94905,94906],{"class":130,"line":495},[128,94907,93553],{"class":3814},[128,94909,94910],{"class":130,"line":507},[128,94911,5773],{"class":138},[128,94913,94914],{"class":130,"line":519},[128,94915,93562],{"class":3814},[128,94917,94918],{"class":130,"line":524},[128,94919,94920],{"class":3814},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[128,94922,94923],{"class":130,"line":529},[128,94924,94925],{"class":3814},"    \u002F\u002F 1.声明一个定时器变量\n",[128,94927,94928],{"class":130,"line":540},[128,94929,94930],{"class":3814},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[128,94932,94933],{"class":130,"line":555},[128,94934,94935],{"class":3814},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[128,94937,94938],{"class":130,"line":576},[128,94939,94940],{"class":3814},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[128,94942,94943],{"class":130,"line":584},[128,94944,94945],{"class":3814},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[128,94947,94948,94950,94953,94955,94957,94959,94961],{"class":130,"line":593},[128,94949,73459],{"class":134},[128,94951,94952],{"class":199}," throttle",[128,94954,253],{"class":138},[128,94956,94007],{"class":266},[128,94958,258],{"class":138},[128,94960,4469],{"class":266},[128,94962,15968],{"class":138},[128,94964,94965,94967],{"class":130,"line":598},[128,94966,83146],{"class":134},[128,94968,94020],{"class":138},[128,94970,94971,94973,94975],{"class":130,"line":603},[128,94972,77356],{"class":134},[128,94974,62298],{"class":134},[128,94976,57833],{"class":138},[128,94978,94979,94981,94983,94985],{"class":130,"line":614},[128,94980,558],{"class":134},[128,94982,5260],{"class":138},[128,94984,3977],{"class":134},[128,94986,94987],{"class":138},"timer) {\n",[128,94989,94990,94993,94995,94997,94999,95001],{"class":130,"line":625},[128,94991,94992],{"class":138},"          timer ",[128,94994,270],{"class":134},[128,94996,94061],{"class":199},[128,94998,253],{"class":138},[128,95000,57830],{"class":134},[128,95002,57833],{"class":138},[128,95004,95005,95008],{"class":130,"line":633},[128,95006,95007],{"class":199},"            fn",[128,95009,5563],{"class":138},[128,95011,95012],{"class":130,"line":649},[128,95013,95014],{"class":3814},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[128,95016,95017],{"class":130,"line":660},[128,95018,95019],{"class":3814},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[128,95021,95022,95025,95027],{"class":130,"line":673},[128,95023,95024],{"class":138},"            timer ",[128,95026,270],{"class":134},[128,95028,95029],{"class":166}," null\n",[128,95031,95032],{"class":130,"line":678},[128,95033,95034],{"class":3814},"            \u002F\u002F 不能用clearTimeout(timer)\n",[128,95036,95037],{"class":130,"line":683},[128,95038,95039],{"class":3814},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[128,95041,95042],{"class":130,"line":693},[128,95043,95044],{"class":138},"          }, t)\n",[128,95046,95047],{"class":130,"line":702},[128,95048,2014],{"class":138},[128,95050,95051],{"class":130,"line":709},[128,95052,55780],{"class":138},[128,95054,95055],{"class":130,"line":723},[128,95056,5773],{"class":138},[128,95058,95059,95061,95063,95065,95067,95069,95071,95073,95075],{"class":130,"line":732},[128,95060,93577],{"class":138},[128,95062,61193],{"class":199},[128,95064,253],{"class":138},[128,95066,93584],{"class":176},[128,95068,258],{"class":138},[128,95070,94543],{"class":199},[128,95072,93593],{"class":138},[128,95074,68452],{"class":166},[128,95076,3034],{"class":138},[128,95078,95079,95081,95083],{"class":130,"line":744},[128,95080,55799],{"class":138},[128,95082,55196],{"class":54685},[128,95084,54692],{"class":138},[128,95086,95087,95089,95091],{"class":130,"line":749},[128,95088,55168],{"class":138},[128,95090,55183],{"class":54685},[128,95092,54692],{"class":138},[128,95094,95095],{"class":130,"line":754},[128,95096,160],{"emptyLinePlaceholder":159},[128,95098,95099,95101,95103],{"class":130,"line":764},[128,95100,55168],{"class":138},[128,95102,54020],{"class":54685},[128,95104,54692],{"class":138},[72,95106,95108],{"id":95107},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[106,95110,95112],{"className":56449,"code":95111,"language":56451,"meta":112,"style":112},"\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",[114,95113,95114,95122,95130,95135,95140,95145,95150,95154,95162],{"__ignoreMap":112},[128,95115,95116,95118,95120],{"class":130,"line":131},[128,95117,4657],{"class":138},[128,95119,55183],{"class":54685},[128,95121,54692],{"class":138},[128,95123,95124,95126,95128],{"class":130,"line":142},[128,95125,55526],{"class":138},[128,95127,55196],{"class":54685},[128,95129,54692],{"class":138},[128,95131,95132],{"class":130,"line":156},[128,95133,95134],{"class":138},"    let timer = null\n",[128,95136,95137],{"class":130,"line":163},[128,95138,95139],{"class":138},"    timer = setTimeout(() => {\n",[128,95141,95142],{"class":130,"line":183},[128,95143,95144],{"class":138},"      clearTimeout(timer)\n",[128,95146,95147],{"class":130,"line":188},[128,95148,95149],{"class":138},"      console.log(timer)\n",[128,95151,95152],{"class":130,"line":193},[128,95153,63605],{"class":138},[128,95155,95156,95158,95160],{"class":130,"line":206},[128,95157,55799],{"class":138},[128,95159,55196],{"class":54685},[128,95161,54692],{"class":138},[128,95163,95164,95166,95168],{"class":130,"line":221},[128,95165,55168],{"class":138},[128,95167,55183],{"class":54685},[128,95169,54692],{"class":138},[19,95171,95172],{},"输出为1",[19,95174,95175],{},"在开启的定时器里边写清除定时器",[19,95177,95178],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[72,95180,95182],{"id":95181},"_4174-节流综合案例","4.17.4 节流综合案例",[19,95184,95185],{},"页面打开，可以记录上一次的视频播放位置",[19,95187,95188],{},[5074,95189],{"alt":112,"src":95190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,95192,95193],{},[5074,95194],{"alt":112,"src":95195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[106,95197,95199],{"className":54018,"code":95198,"language":54020,"meta":112,"style":112},"\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",[114,95200,95201,95211,95225,95229,95237,95251,95271,95291,95313,95326,95334,95340,95350,95360,95370,95374,95378,95385,95398,95410,95414,95418,95428,95440,95454,95458,95462,95469,95479,95492,95504,95514,95524,95540,95552,95556,95560,95568,95578,95590,95600,95610,95620,95624,95628,95638,95649,95653,95661,95669,95673,95681,95696,95711,95726,95747,95755,95763,95778,95800,95808,95823,95849,95875,95901,95909,95917,95936,95944,95949,95968,95973,95991,95996,96001,96009,96014,96028,96036,96041,96058,96062,96067,96089,96093,96101,96109,96113],{"__ignoreMap":112},[128,95202,95203,95205,95207,95209],{"class":130,"line":131},[128,95204,54682],{"class":138},[128,95206,54686],{"class":54685},[128,95208,54689],{"class":199},[128,95210,54692],{"class":138},[128,95212,95213,95215,95217,95219,95221,95223],{"class":130,"line":142},[128,95214,4657],{"class":138},[128,95216,54020],{"class":54685},[128,95218,54701],{"class":199},[128,95220,270],{"class":138},[128,95222,54706],{"class":176},[128,95224,54692],{"class":138},[128,95226,95227],{"class":130,"line":156},[128,95228,160],{"emptyLinePlaceholder":159},[128,95230,95231,95233,95235],{"class":130,"line":163},[128,95232,4657],{"class":138},[128,95234,54719],{"class":54685},[128,95236,54692],{"class":138},[128,95238,95239,95241,95243,95245,95247,95249],{"class":130,"line":183},[128,95240,55526],{"class":138},[128,95242,54729],{"class":54685},[128,95244,54732],{"class":199},[128,95246,270],{"class":138},[128,95248,54737],{"class":176},[128,95250,62507],{"class":138},[128,95252,95253,95255,95257,95259,95261,95263,95265,95267,95269],{"class":130,"line":188},[128,95254,55526],{"class":138},[128,95256,54729],{"class":54685},[128,95258,54748],{"class":199},[128,95260,270],{"class":138},[128,95262,54753],{"class":176},[128,95264,54756],{"class":199},[128,95266,270],{"class":138},[128,95268,54761],{"class":176},[128,95270,62507],{"class":138},[128,95272,95273,95275,95277,95279,95281,95283,95285,95287,95289],{"class":130,"line":193},[128,95274,55526],{"class":138},[128,95276,54729],{"class":54685},[128,95278,18442],{"class":199},[128,95280,270],{"class":138},[128,95282,54776],{"class":176},[128,95284,54756],{"class":199},[128,95286,270],{"class":138},[128,95288,54783],{"class":176},[128,95290,62507],{"class":138},[128,95292,95293,95295,95297,95299,95301,95304,95306,95308,95311],{"class":130,"line":206},[128,95294,55526],{"class":138},[128,95296,54729],{"class":54685},[128,95298,18442],{"class":199},[128,95300,270],{"class":138},[128,95302,95303],{"class":176},"\"referrer\"",[128,95305,54756],{"class":199},[128,95307,270],{"class":138},[128,95309,95310],{"class":176},"\"never\"",[128,95312,62507],{"class":138},[128,95314,95315,95317,95319,95322,95324],{"class":130,"line":221},[128,95316,55526],{"class":138},[128,95318,2752],{"class":54685},[128,95320,95321],{"class":138},">综合案例\u003C\u002F",[128,95323,2752],{"class":54685},[128,95325,54692],{"class":138},[128,95327,95328,95330,95332],{"class":130,"line":230},[128,95329,55526],{"class":138},[128,95331,3659],{"class":54685},[128,95333,54692],{"class":138},[128,95335,95336,95338],{"class":130,"line":235},[128,95337,9960],{"class":54685},[128,95339,1959],{"class":138},[128,95341,95342,95344,95346,95348],{"class":130,"line":244},[128,95343,58076],{"class":166},[128,95345,1967],{"class":138},[128,95347,2452],{"class":166},[128,95349,4905],{"class":138},[128,95351,95352,95354,95356,95358],{"class":130,"line":287},[128,95353,58087],{"class":166},[128,95355,1967],{"class":138},[128,95357,2452],{"class":166},[128,95359,4905],{"class":138},[128,95361,95362,95364,95366,95368],{"class":130,"line":301},[128,95363,75971],{"class":166},[128,95365,1967],{"class":138},[128,95367,63885],{"class":166},[128,95369,4905],{"class":138},[128,95371,95372],{"class":130,"line":310},[128,95373,5773],{"class":138},[128,95375,95376],{"class":130,"line":323},[128,95377,160],{"emptyLinePlaceholder":159},[128,95379,95380,95383],{"class":130,"line":330},[128,95381,95382],{"class":199},"    .container",[128,95384,1959],{"class":138},[128,95386,95387,95389,95391,95394,95396],{"class":130,"line":335},[128,95388,58152],{"class":166},[128,95390,1967],{"class":138},[128,95392,95393],{"class":166},"1200",[128,95395,54875],{"class":134},[128,95397,4905],{"class":138},[128,95399,95400,95402,95404,95406,95408],{"class":130,"line":340},[128,95401,58087],{"class":166},[128,95403,1967],{"class":138},[128,95405,2452],{"class":166},[128,95407,54939],{"class":166},[128,95409,4905],{"class":138},[128,95411,95412],{"class":130,"line":351},[128,95413,5773],{"class":138},[128,95415,95416],{"class":130,"line":384},[128,95417,160],{"emptyLinePlaceholder":159},[128,95419,95420,95423,95426],{"class":130,"line":414},[128,95421,95422],{"class":199},"    .video",[128,95424,95425],{"class":54685}," video",[128,95427,1959],{"class":138},[128,95429,95430,95432,95434,95436,95438],{"class":130,"line":419},[128,95431,58152],{"class":166},[128,95433,1967],{"class":138},[128,95435,4061],{"class":166},[128,95437,4078],{"class":134},[128,95439,4905],{"class":138},[128,95441,95442,95444,95446,95448,95450,95452],{"class":130,"line":424},[128,95443,58076],{"class":166},[128,95445,1967],{"class":138},[128,95447,4449],{"class":166},[128,95449,54875],{"class":134},[128,95451,7659],{"class":166},[128,95453,4905],{"class":138},[128,95455,95456],{"class":130,"line":434},[128,95457,5773],{"class":138},[128,95459,95460],{"class":130,"line":447},[128,95461,160],{"emptyLinePlaceholder":159},[128,95463,95464,95467],{"class":130,"line":459},[128,95465,95466],{"class":199},"    .elevator",[128,95468,1959],{"class":138},[128,95470,95471,95473,95475,95477],{"class":130,"line":471},[128,95472,58140],{"class":166},[128,95474,1967],{"class":138},[128,95476,89605],{"class":166},[128,95478,4905],{"class":138},[128,95480,95481,95483,95485,95488,95490],{"class":130,"line":483},[128,95482,58328],{"class":166},[128,95484,1967],{"class":138},[128,95486,95487],{"class":166},"280",[128,95489,54875],{"class":134},[128,95491,4905],{"class":138},[128,95493,95494,95496,95498,95500,95502],{"class":130,"line":495},[128,95495,89799],{"class":166},[128,95497,1967],{"class":138},[128,95499,4449],{"class":166},[128,95501,54875],{"class":134},[128,95503,4905],{"class":138},[128,95505,95506,95508,95510,95512],{"class":130,"line":507},[128,95507,89612],{"class":166},[128,95509,1967],{"class":138},[128,95511,89617],{"class":166},[128,95513,4905],{"class":138},[128,95515,95516,95518,95520,95522],{"class":130,"line":519},[128,95517,65100],{"class":166},[128,95519,1967],{"class":138},[128,95521,64221],{"class":166},[128,95523,4905],{"class":138},[128,95525,95526,95528,95530,95532,95534,95536,95538],{"class":130,"line":524},[128,95527,65356],{"class":166},[128,95529,1967],{"class":138},[128,95531,2592],{"class":166},[128,95533,54875],{"class":134},[128,95535,54904],{"class":166},[128,95537,65623],{"class":166},[128,95539,4905],{"class":138},[128,95541,95542,95544,95546,95548,95550],{"class":130,"line":529},[128,95543,58152],{"class":166},[128,95545,1967],{"class":138},[128,95547,4654],{"class":166},[128,95549,54875],{"class":134},[128,95551,4905],{"class":138},[128,95553,95554],{"class":130,"line":540},[128,95555,5773],{"class":138},[128,95557,95558],{"class":130,"line":555},[128,95559,160],{"emptyLinePlaceholder":159},[128,95561,95562,95564,95566],{"class":130,"line":576},[128,95563,95466],{"class":199},[128,95565,5010],{"class":54685},[128,95567,1959],{"class":138},[128,95569,95570,95572,95574,95576],{"class":130,"line":584},[128,95571,58390],{"class":166},[128,95573,1967],{"class":138},[128,95575,64248],{"class":166},[128,95577,4905],{"class":138},[128,95579,95580,95582,95584,95586,95588],{"class":130,"line":593},[128,95581,58076],{"class":166},[128,95583,1967],{"class":138},[128,95585,4196],{"class":166},[128,95587,54875],{"class":134},[128,95589,4905],{"class":138},[128,95591,95592,95594,95596,95598],{"class":130,"line":598},[128,95593,67348],{"class":166},[128,95595,1967],{"class":138},[128,95597,58118],{"class":166},[128,95599,4905],{"class":138},[128,95601,95602,95604,95606,95608],{"class":130,"line":603},[128,95603,60666],{"class":166},[128,95605,1967],{"class":138},[128,95607,54975],{"class":166},[128,95609,4905],{"class":138},[128,95611,95612,95614,95616,95618],{"class":130,"line":614},[128,95613,60796],{"class":166},[128,95615,1967],{"class":138},[128,95617,65449],{"class":166},[128,95619,4905],{"class":138},[128,95621,95622],{"class":130,"line":625},[128,95623,5773],{"class":138},[128,95625,95626],{"class":130,"line":633},[128,95627,160],{"emptyLinePlaceholder":159},[128,95629,95630,95632,95634,95636],{"class":130,"line":649},[128,95631,95466],{"class":199},[128,95633,5010],{"class":54685},[128,95635,67402],{"class":199},[128,95637,1959],{"class":138},[128,95639,95640,95642,95644,95647],{"class":130,"line":660},[128,95641,60796],{"class":166},[128,95643,1967],{"class":138},[128,95645,95646],{"class":166},"#1286ff",[128,95648,4905],{"class":138},[128,95650,95651],{"class":130,"line":673},[128,95652,5773],{"class":138},[128,95654,95655,95657,95659],{"class":130,"line":678},[128,95656,55799],{"class":138},[128,95658,3659],{"class":54685},[128,95660,54692],{"class":138},[128,95662,95663,95665,95667],{"class":130,"line":683},[128,95664,55168],{"class":138},[128,95666,54719],{"class":54685},[128,95668,54692],{"class":138},[128,95670,95671],{"class":130,"line":693},[128,95672,160],{"emptyLinePlaceholder":159},[128,95674,95675,95677,95679],{"class":130,"line":702},[128,95676,4657],{"class":138},[128,95678,55183],{"class":54685},[128,95680,54692],{"class":138},[128,95682,95683,95685,95687,95689,95691,95694],{"class":130,"line":709},[128,95684,55526],{"class":138},[128,95686,54994],{"class":54685},[128,95688,56868],{"class":199},[128,95690,270],{"class":138},[128,95692,95693],{"class":176},"\"container\"",[128,95695,54692],{"class":138},[128,95697,95698,95700,95702,95704,95706,95709],{"class":130,"line":723},[128,95699,54726],{"class":138},[128,95701,54994],{"class":54685},[128,95703,56868],{"class":199},[128,95705,270],{"class":138},[128,95707,95708],{"class":176},"\"header\"",[128,95710,54692],{"class":138},[128,95712,95713,95715,95717,95719,95721,95724],{"class":130,"line":732},[128,95714,58615],{"class":138},[128,95716,3989],{"class":54685},[128,95718,64436],{"class":199},[128,95720,270],{"class":138},[128,95722,95723],{"class":176},"\"http:\u002F\u002Fpip.itcast.cn\"",[128,95725,54692],{"class":138},[128,95727,95728,95730,95732,95734,95736,95739,95741,95743,95745],{"class":130,"line":744},[128,95729,58683],{"class":138},[128,95731,5074],{"class":54685},[128,95733,58620],{"class":199},[128,95735,270],{"class":138},[128,95737,95738],{"class":176},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[128,95740,58628],{"class":199},[128,95742,270],{"class":138},[128,95744,11209],{"class":176},[128,95746,62507],{"class":138},[128,95748,95749,95751,95753],{"class":130,"line":749},[128,95750,58788],{"class":138},[128,95752,3989],{"class":54685},[128,95754,54692],{"class":138},[128,95756,95757,95759,95761],{"class":130,"line":754},[128,95758,55159],{"class":138},[128,95760,54994],{"class":54685},[128,95762,54692],{"class":138},[128,95764,95765,95767,95769,95771,95773,95776],{"class":130,"line":764},[128,95766,54726],{"class":138},[128,95768,54994],{"class":54685},[128,95770,56868],{"class":199},[128,95772,270],{"class":138},[128,95774,95775],{"class":176},"\"video\"",[128,95777,54692],{"class":138},[128,95779,95780,95782,95784,95786,95788,95791,95794,95796,95798],{"class":130,"line":782},[128,95781,58615],{"class":138},[128,95783,31668],{"class":54685},[128,95785,58620],{"class":199},[128,95787,270],{"class":138},[128,95789,95790],{"class":176},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[128,95792,95793],{"class":199}," controls",[128,95795,58695],{"class":138},[128,95797,31668],{"class":54685},[128,95799,54692],{"class":138},[128,95801,95802,95804,95806],{"class":130,"line":787},[128,95803,55159],{"class":138},[128,95805,54994],{"class":54685},[128,95807,54692],{"class":138},[128,95809,95810,95812,95814,95816,95818,95821],{"class":130,"line":795},[128,95811,54726],{"class":138},[128,95813,54994],{"class":54685},[128,95815,56868],{"class":199},[128,95817,270],{"class":138},[128,95819,95820],{"class":176},"\"elevator\"",[128,95822,54692],{"class":138},[128,95824,95825,95827,95829,95831,95833,95835,95838,95840,95842,95845,95847],{"class":130,"line":807},[128,95826,58615],{"class":138},[128,95828,3989],{"class":54685},[128,95830,64436],{"class":199},[128,95832,270],{"class":138},[128,95834,67614],{"class":176},[128,95836,95837],{"class":199}," data-ref",[128,95839,270],{"class":138},[128,95841,95775],{"class":176},[128,95843,95844],{"class":138},">视频介绍\u003C\u002F",[128,95846,3989],{"class":54685},[128,95848,54692],{"class":138},[128,95850,95851,95853,95855,95857,95859,95861,95863,95865,95868,95871,95873],{"class":130,"line":813},[128,95852,58615],{"class":138},[128,95854,3989],{"class":54685},[128,95856,64436],{"class":199},[128,95858,270],{"class":138},[128,95860,67614],{"class":176},[128,95862,95837],{"class":199},[128,95864,270],{"class":138},[128,95866,95867],{"class":176},"\"intro\"",[128,95869,95870],{"class":138},">课程简介\u003C\u002F",[128,95872,3989],{"class":54685},[128,95874,54692],{"class":138},[128,95876,95877,95879,95881,95883,95885,95887,95889,95891,95894,95897,95899],{"class":130,"line":818},[128,95878,58615],{"class":138},[128,95880,3989],{"class":54685},[128,95882,64436],{"class":199},[128,95884,270],{"class":138},[128,95886,67614],{"class":176},[128,95888,95837],{"class":199},[128,95890,270],{"class":138},[128,95892,95893],{"class":176},"\"outline\"",[128,95895,95896],{"class":138},">评论列表\u003C\u002F",[128,95898,3989],{"class":54685},[128,95900,54692],{"class":138},[128,95902,95903,95905,95907],{"class":130,"line":835},[128,95904,55159],{"class":138},[128,95906,54994],{"class":54685},[128,95908,54692],{"class":138},[128,95910,95911,95913,95915],{"class":130,"line":851},[128,95912,55799],{"class":138},[128,95914,54994],{"class":54685},[128,95916,54692],{"class":138},[128,95918,95919,95921,95923,95925,95927,95930,95932,95934],{"class":130,"line":867},[128,95920,55526],{"class":138},[128,95922,55196],{"class":54685},[128,95924,58620],{"class":199},[128,95926,270],{"class":138},[128,95928,95929],{"class":176},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[128,95931,58695],{"class":138},[128,95933,55196],{"class":54685},[128,95935,54692],{"class":138},[128,95937,95938,95940,95942],{"class":130,"line":872},[128,95939,55526],{"class":138},[128,95941,55196],{"class":54685},[128,95943,54692],{"class":138},[128,95945,95946],{"class":130,"line":878},[128,95947,95948],{"class":3814},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[128,95950,95951,95953,95955,95957,95959,95961,95963,95966],{"class":130,"line":887},[128,95952,14748],{"class":134},[128,95954,95425],{"class":166},[128,95956,170],{"class":134},[128,95958,57777],{"class":138},[128,95960,57780],{"class":199},[128,95962,253],{"class":138},[128,95964,95965],{"class":176},"'video'",[128,95967,180],{"class":138},[128,95969,95970],{"class":130,"line":896},[128,95971,95972],{"class":3814},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[128,95974,95975,95978,95980,95982,95984,95987,95989],{"class":130,"line":905},[128,95976,95977],{"class":138},"    video.ontimeupdate ",[128,95979,270],{"class":134},[128,95981,91725],{"class":138},[128,95983,94543],{"class":199},[128,95985,95986],{"class":138},"(() ",[128,95988,88094],{"class":134},[128,95990,1959],{"class":138},[128,95992,95993],{"class":130,"line":914},[128,95994,95995],{"class":3814},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[128,95997,95998],{"class":130,"line":920},[128,95999,96000],{"class":3814},"      \u002F\u002F 控制台输出当前的时间\n",[128,96002,96003,96006],{"class":130,"line":926},[128,96004,96005],{"class":3814},"      \u002F\u002F console.log(video.currentTime)",[128,96007,96008],{"class":3814},"  \u002F\u002F获得当前的视频时间\n",[128,96010,96011],{"class":130,"line":938},[128,96012,96013],{"class":3814},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[128,96015,96016,96018,96020,96022,96025],{"class":130,"line":943},[128,96017,78057],{"class":138},[128,96019,75029],{"class":199},[128,96021,253],{"class":138},[128,96023,96024],{"class":176},"'currentTime'",[128,96026,96027],{"class":138},", video.currentTime)\n",[128,96029,96030,96032,96034],{"class":130,"line":948},[128,96031,57916],{"class":138},[128,96033,9967],{"class":166},[128,96035,180],{"class":138},[128,96037,96038],{"class":130,"line":958},[128,96039,96040],{"class":3814},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[128,96042,96043,96046,96049,96051,96054,96056],{"class":130,"line":974},[128,96044,96045],{"class":138},"    video.",[128,96047,96048],{"class":199},"onloadeddata",[128,96050,170],{"class":134},[128,96052,96053],{"class":138}," () ",[128,96055,88094],{"class":134},[128,96057,1959],{"class":138},[128,96059,96060],{"class":130,"line":985},[128,96061,63392],{"class":3814},[128,96063,96064],{"class":130,"line":990},[128,96065,96066],{"class":3814},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[128,96068,96069,96072,96074,96077,96079,96081,96083,96085,96087],{"class":130,"line":1005},[128,96070,96071],{"class":138},"      video.currentTime ",[128,96073,270],{"class":134},[128,96075,96076],{"class":138}," localStorage.",[128,96078,75060],{"class":199},[128,96080,253],{"class":138},[128,96082,96024],{"class":176},[128,96084,276],{"class":138},[128,96086,74732],{"class":134},[128,96088,50718],{"class":166},[128,96090,96091],{"class":130,"line":1017},[128,96092,5773],{"class":138},[128,96094,96095,96097,96099],{"class":130,"line":1022},[128,96096,55799],{"class":138},[128,96098,55196],{"class":54685},[128,96100,54692],{"class":138},[128,96102,96103,96105,96107],{"class":130,"line":1027},[128,96104,55168],{"class":138},[128,96106,55183],{"class":54685},[128,96108,54692],{"class":138},[128,96110,96111],{"class":130,"line":1033},[128,96112,160],{"emptyLinePlaceholder":159},[128,96114,96115,96117,96119],{"class":130,"line":1038},[128,96116,55168],{"class":138},[128,96118,54020],{"class":54685},[128,96120,54692],{"class":138},[3659,96122,96123],{},"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":112,"searchDepth":142,"depth":142,"links":96125},[96126,96131,96135,96136,96137,96142,96147,96148,96149,96150,96157,96162,96163,96173,96177,96178,96182],{"id":80065,"depth":142,"text":80066,"children":96127},[96128,96129,96130],{"id":80069,"depth":156,"text":80070},{"id":80094,"depth":156,"text":80095},{"id":80106,"depth":156,"text":80107},{"id":80118,"depth":142,"text":80119,"children":96132},[96133,96134],{"id":80122,"depth":156,"text":80123},{"id":80137,"depth":156,"text":80138},{"id":80189,"depth":142,"text":80190},{"id":80233,"depth":142,"text":80234},{"id":80250,"depth":142,"text":80251,"children":96138},[96139,96140,96141],{"id":80254,"depth":156,"text":80255},{"id":80267,"depth":156,"text":80268},{"id":80372,"depth":156,"text":80373},{"id":80661,"depth":142,"text":80662,"children":96143},[96144,96145,96146],{"id":80665,"depth":156,"text":80666},{"id":81108,"depth":156,"text":81109},{"id":81519,"depth":156,"text":81520},{"id":81582,"depth":142,"text":81583},{"id":81661,"depth":142,"text":81662},{"id":81754,"depth":142,"text":81755},{"id":83598,"depth":142,"text":83599,"children":96151},[96152,96153,96154,96155,96156],{"id":83602,"depth":156,"text":83603},{"id":83614,"depth":156,"text":83615},{"id":83833,"depth":156,"text":83834},{"id":83851,"depth":156,"text":83852},{"id":83911,"depth":156,"text":83912},{"id":88178,"depth":142,"text":88179,"children":96158},[96159,96160,96161],{"id":88182,"depth":156,"text":88183},{"id":88200,"depth":156,"text":88201},{"id":88226,"depth":156,"text":88227},{"id":88235,"depth":142,"text":88236},{"id":88257,"depth":142,"text":88258,"children":96164},[96165,96166,96167,96168,96169,96170,96171,96172],{"id":88261,"depth":156,"text":88262},{"id":88522,"depth":156,"text":88523},{"id":88708,"depth":156,"text":88709},{"id":89075,"depth":156,"text":89076},{"id":89191,"depth":156,"text":89192},{"id":89227,"depth":156,"text":89228},{"id":89274,"depth":156,"text":89275},{"id":89308,"depth":156,"text":89309},{"id":90671,"depth":142,"text":90672,"children":96174},[96175,96176],{"id":90675,"depth":156,"text":90676},{"id":90712,"depth":156,"text":90713},{"id":92065,"depth":142,"text":92066},{"id":92436,"depth":142,"text":92437,"children":96179},[96180,96181],{"id":92440,"depth":156,"text":92441},{"id":92474,"depth":156,"text":92475},{"id":93203,"depth":142,"text":93204,"children":96183},[96184,96185,96186,96187],{"id":93207,"depth":156,"text":93208},{"id":94165,"depth":156,"text":94166},{"id":95107,"depth":156,"text":95108},{"id":95181,"depth":156,"text":95182},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":80054,"description":3686},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":96194,"title":96195,"body":96196,"description":96207,"extension":3687,"meta":96208,"navigation":159,"path":96210,"seo":96211,"stem":96212,"__hash__":96213},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":96197,"toc":96205},[96198],[19,96199,96200,96201],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[3989,96202,96203],{"href":96203,"rel":96204},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[27352],{"title":112,"searchDepth":142,"depth":142,"links":96206},[],"三件套第三套学习",{"category":96209},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":96195,"description":96207},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":96215,"title":96216,"body":96217,"description":3686,"extension":3687,"meta":96322,"navigation":159,"path":96323,"seo":96324,"stem":96325,"__hash__":96326},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":96218,"toc":96317},[96219,96226,96229,96232,96235,96239,96248,96251,96254,96258,96267,96270,96274,96277,96297,96300,96314],[19,96220,96221],{},[3989,96222,96225],{"href":96223,"rel":96224},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[27352],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,96227,96216],{"id":96228},"_1安装",[19,96230,96231],{},"numpy是科学计算基础库,底层是C语言",[19,96233,96234],{},"三种方式：",[14,96236,96238],{"id":96237},"_11-通过pip安装","1.1 通过pip安装",[106,96240,96242],{"className":122,"code":96241,"language":124,"meta":112,"style":112},"pip install numpy\n",[114,96243,96244],{"__ignoreMap":112},[128,96245,96246],{"class":130,"line":131},[128,96247,96241],{"class":138},[19,96249,96250],{},"首选方式，自动处理依赖项",[19,96252,96253],{},"在提示系统命令符中使用cmd",[14,96255,96257],{"id":96256},"_12-通过anaconda安装","1.2 通过Anaconda安装",[106,96259,96261],{"className":122,"code":96260,"language":124,"meta":112,"style":112},"conda install numpy\n",[114,96262,96263],{"__ignoreMap":112},[128,96264,96265],{"class":130,"line":131},[128,96266,96260],{"class":138},[19,96268,96269],{},"自动解决环境依赖",[14,96271,96273],{"id":96272},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,96275,96276],{},"对于Debian\u002FUbuntu",[106,96278,96280],{"className":122,"code":96279,"language":124,"meta":112,"style":112},"sudo apt-get install python3-numpy\n",[114,96281,96282],{"__ignoreMap":112},[128,96283,96284,96287,96289,96292,96294],{"class":130,"line":131},[128,96285,96286],{"class":138},"sudo apt",[128,96288,4281],{"class":134},[128,96290,96291],{"class":138},"get install python3",[128,96293,4281],{"class":134},[128,96295,96296],{"class":138},"numpy\n",[19,96298,96299],{},"对于Fedora:",[106,96301,96303],{"className":122,"code":96302,"language":124,"meta":112,"style":112},"sudo dnf install python3-numpy\n",[114,96304,96305],{"__ignoreMap":112},[128,96306,96307,96310,96312],{"class":130,"line":131},[128,96308,96309],{"class":138},"sudo dnf install python3",[128,96311,4281],{"class":134},[128,96313,96296],{"class":138},[3659,96315,96316],{},"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":112,"searchDepth":142,"depth":142,"links":96318},[96319,96320,96321],{"id":96237,"depth":142,"text":96238},{"id":96256,"depth":142,"text":96257},{"id":96272,"depth":142,"text":96273},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":96216,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":96328,"title":96329,"body":96330,"description":3686,"extension":3687,"meta":96443,"navigation":159,"path":96444,"seo":96445,"stem":96446,"__hash__":96447},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":96331,"toc":96441},[96332,96335,96338,96341,96344,96347,96350,96353,96356,96359,96435,96438],[10,96333,96329],{"id":96334},"_10算数函数",[19,96336,96337],{},"加减乘除运算跟python基础语法没区别",[19,96339,96340],{},"除了python那种方法外还可以使用函数",[19,96342,96343],{},"加：np.add(a,b)",[19,96345,96346],{},"减：np.subtract(a,b)",[19,96348,96349],{},"乘：np.multiply(a,b)",[19,96351,96352],{},"除：np.divide(a,b) == a\u002Fb",[19,96354,96355],{},"取余：np.mod(a,b) == a%b",[19,96357,96358],{},"必须会的用法：",[106,96360,96362],{"className":122,"code":96361,"language":124,"meta":112,"style":112},"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",[114,96363,96364,96386,96407,96417,96430],{"__ignoreMap":112},[128,96365,96366,96368,96370,96373,96375,96378,96380,96382,96384],{"class":130,"line":131},[128,96367,3989],{"class":138},[128,96369,270],{"class":134},[128,96371,96372],{"class":138},"np.arange(",[128,96374,4170],{"class":166},[128,96376,96377],{"class":138},").reshape(",[128,96379,3827],{"class":166},[128,96381,4128],{"class":138},[128,96383,3827],{"class":166},[128,96385,180],{"class":138},[128,96387,96388,96390,96392,96395,96397,96399,96401,96403,96405],{"class":130,"line":142},[128,96389,4013],{"class":138},[128,96391,270],{"class":134},[128,96393,96394],{"class":138},"np.array([",[128,96396,4196],{"class":166},[128,96398,4128],{"class":138},[128,96400,4196],{"class":166},[128,96402,4128],{"class":138},[128,96404,4196],{"class":166},[128,96406,2595],{"class":138},[128,96408,96409,96412,96414],{"class":130,"line":156},[128,96410,96411],{"class":138},"result",[128,96413,270],{"class":134},[128,96415,96416],{"class":138},"np.empty_like(a)\n",[128,96418,96419,96422,96425,96427],{"class":130,"line":163},[128,96420,96421],{"class":138},"np.add(a,b,",[128,96423,96424],{"class":266},"out",[128,96426,270],{"class":134},[128,96428,96429],{"class":138},"result)\n",[128,96431,96432],{"class":130,"line":183},[128,96433,96434],{"class":138},"result\n",[19,96436,96437],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[3659,96439,96440],{},"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":112,"searchDepth":142,"depth":142,"links":96442},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":96329,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":96449,"title":96450,"body":96451,"description":3686,"extension":3687,"meta":97213,"navigation":159,"path":97214,"seo":97215,"stem":97216,"__hash__":97217},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":96452,"toc":97200},[96453,96456,96459,96462,96466,96505,96509,96553,96613,96617,96620,96659,96662,96707,96711,96747,96751,96820,96824,96888,96892,96895,96898,96901,96904,96940,96944,96984,96988,97060,97063,97067,97130,97134,97197],[10,96454,96450],{"id":96455},"_11统计函数",[19,96457,96458],{},"sum max min mean",[19,96460,96461],{},"这些有axis参数，可以指定方向",[14,96463,96465],{"id":96464},"_111-sum求和函数","11.1 sum()求和函数",[106,96467,96469],{"className":122,"code":96468,"language":124,"meta":112,"style":112},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[114,96470,96471,96476,96497],{"__ignoreMap":112},[128,96472,96473],{"class":130,"line":131},[128,96474,96475],{"class":3814},"#创建一维数组\n",[128,96477,96478,96480,96482,96485,96487,96489,96491,96493,96495],{"class":130,"line":142},[128,96479,3989],{"class":138},[128,96481,270],{"class":134},[128,96483,96484],{"class":138},"np.random.randint(",[128,96486,2592],{"class":166},[128,96488,4128],{"class":138},[128,96490,4061],{"class":166},[128,96492,4128],{"class":138},[128,96494,4449],{"class":166},[128,96496,180],{"class":138},[128,96498,96499,96502],{"class":130,"line":156},[128,96500,96501],{"class":138},"np.sum(a)",[128,96503,96504],{"class":3814},"#求和\n",[14,96506,96508],{"id":96507},"_112-max求最大值函数","11.2 max()求最大值函数",[106,96510,96512],{"className":122,"code":96511,"language":124,"meta":112,"style":112},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[114,96513,96514,96518,96538,96543,96548],{"__ignoreMap":112},[128,96515,96516],{"class":130,"line":131},[128,96517,96475],{"class":3814},[128,96519,96520,96522,96524,96526,96528,96530,96532,96534,96536],{"class":130,"line":142},[128,96521,3989],{"class":138},[128,96523,270],{"class":134},[128,96525,96484],{"class":138},[128,96527,2592],{"class":166},[128,96529,4128],{"class":138},[128,96531,4061],{"class":166},[128,96533,4128],{"class":138},[128,96535,4449],{"class":166},[128,96537,180],{"class":138},[128,96539,96540],{"class":130,"line":156},[128,96541,96542],{"class":138},"np.max(a)\n",[128,96544,96545],{"class":130,"line":163},[128,96546,96547],{"class":3814},"#最大索引(求最大元素的索引)arg\n",[128,96549,96550],{"class":130,"line":183},[128,96551,96552],{"class":138},"np.argmax(a)\n",[106,96554,96556],{"className":122,"code":96555,"language":124,"meta":112,"style":112},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[114,96557,96558,96579,96599,96603],{"__ignoreMap":112},[128,96559,96560,96562,96564,96567,96569,96571,96573,96575,96577],{"class":130,"line":131},[128,96561,14446],{"class":138},[128,96563,270],{"class":134},[128,96565,96566],{"class":138}," np.array([",[128,96568,2592],{"class":166},[128,96570,258],{"class":138},[128,96572,4069],{"class":166},[128,96574,258],{"class":138},[128,96576,3827],{"class":166},[128,96578,2595],{"class":138},[128,96580,96581,96583,96585,96587,96589,96591,96593,96595,96597],{"class":130,"line":142},[128,96582,14472],{"class":138},[128,96584,270],{"class":134},[128,96586,96566],{"class":138},[128,96588,3827],{"class":166},[128,96590,258],{"class":138},[128,96592,409],{"class":166},[128,96594,258],{"class":138},[128,96596,4043],{"class":166},[128,96598,2595],{"class":138},[128,96600,96601],{"class":130,"line":156},[128,96602,160],{"emptyLinePlaceholder":159},[128,96604,96605,96607,96610],{"class":130,"line":163},[128,96606,2469],{"class":166},[128,96608,96609],{"class":138},"(np.maximum(a, b))   ",[128,96611,96612],{"class":3814},"# [3 5 4]，每个位置上取较大值\n",[14,96614,96616],{"id":96615},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,96618,96619],{},"①一维数组：",[106,96621,96623],{"className":122,"code":96622,"language":124,"meta":112,"style":112},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[114,96624,96625,96629,96649,96654],{"__ignoreMap":112},[128,96626,96627],{"class":130,"line":131},[128,96628,96475],{"class":3814},[128,96630,96631,96633,96635,96637,96639,96641,96643,96645,96647],{"class":130,"line":142},[128,96632,3989],{"class":138},[128,96634,270],{"class":134},[128,96636,96484],{"class":138},[128,96638,2592],{"class":166},[128,96640,4128],{"class":138},[128,96642,4061],{"class":166},[128,96644,4128],{"class":138},[128,96646,4449],{"class":166},[128,96648,180],{"class":138},[128,96650,96651],{"class":130,"line":156},[128,96652,96653],{"class":3814},"#求平均值\n",[128,96655,96656],{"class":130,"line":163},[128,96657,96658],{"class":138},"np.mean(a)\n",[19,96660,96661],{},"②二维数组",[106,96663,96665],{"className":122,"code":96664,"language":124,"meta":112,"style":112},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[114,96666,96667,96672,96697,96702],{"__ignoreMap":112},[128,96668,96669],{"class":130,"line":131},[128,96670,96671],{"class":3814},"#二维数组\n",[128,96673,96674,96677,96679,96681,96683,96685,96687,96689,96691,96693,96695],{"class":130,"line":142},[128,96675,96676],{"class":138},"aa",[128,96678,270],{"class":134},[128,96680,96372],{"class":138},[128,96682,2592],{"class":166},[128,96684,4128],{"class":138},[128,96686,4272],{"class":166},[128,96688,96377],{"class":138},[128,96690,3827],{"class":166},[128,96692,4128],{"class":138},[128,96694,4043],{"class":166},[128,96696,180],{"class":138},[128,96698,96699],{"class":130,"line":156},[128,96700,96701],{"class":3814},"#对数组中的所有数求平均\n",[128,96703,96704],{"class":130,"line":163},[128,96705,96706],{"class":138},"np.mean(aa)\n",[14,96708,96710],{"id":96709},"_114-median求中位数函数","11.4 median()求中位数函数",[106,96712,96714],{"className":122,"code":96713,"language":124,"meta":112,"style":112},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[114,96715,96716,96721,96737,96742],{"__ignoreMap":112},[128,96717,96718],{"class":130,"line":131},[128,96719,96720],{"class":3814},"#求中位数\n",[128,96722,96723,96725,96727,96729,96731,96733,96735],{"class":130,"line":142},[128,96724,4013],{"class":138},[128,96726,270],{"class":134},[128,96728,96372],{"class":138},[128,96730,2592],{"class":166},[128,96732,4128],{"class":138},[128,96734,4196],{"class":166},[128,96736,180],{"class":138},[128,96738,96739],{"class":130,"line":156},[128,96740,96741],{"class":138},"np.median(b)\n",[128,96743,96744],{"class":130,"line":163},[128,96745,96746],{"class":3814},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,96748,96750],{"id":96749},"_115-power求幂运算函数","11.5 power()求幂运算函数",[106,96752,96754],{"className":122,"code":96753,"language":124,"meta":112,"style":112},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[114,96755,96756,96772,96777,96782,96791,96796,96805],{"__ignoreMap":112},[128,96757,96758,96760,96762,96764,96766,96768,96770],{"class":130,"line":131},[128,96759,4013],{"class":138},[128,96761,270],{"class":134},[128,96763,96372],{"class":138},[128,96765,2592],{"class":166},[128,96767,4128],{"class":138},[128,96769,4196],{"class":166},[128,96771,180],{"class":138},[128,96773,96774],{"class":130,"line":142},[128,96775,96776],{"class":3814},"#幂运算\n",[128,96778,96779],{"class":130,"line":156},[128,96780,96781],{"class":3814},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[128,96783,96784,96787,96789],{"class":130,"line":163},[128,96785,96786],{"class":138},"np.power(b,",[128,96788,409],{"class":166},[128,96790,180],{"class":138},[128,96792,96793],{"class":130,"line":183},[128,96794,96795],{"class":3814},"#或者以下代码，将数据存储起来\n",[128,96797,96798,96800,96802],{"class":130,"line":188},[128,96799,4593],{"class":138},[128,96801,270],{"class":134},[128,96803,96804],{"class":138},"np.empty_like(b)\n",[128,96806,96807,96809,96811,96813,96815,96817],{"class":130,"line":193},[128,96808,96786],{"class":138},[128,96810,409],{"class":166},[128,96812,4128],{"class":138},[128,96814,96424],{"class":266},[128,96816,270],{"class":134},[128,96818,96819],{"class":138},"y)\n",[14,96821,96823],{"id":96822},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[106,96825,96827],{"className":122,"code":96826,"language":124,"meta":112,"style":112},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[114,96828,96829,96845,96850,96855,96859,96877],{"__ignoreMap":112},[128,96830,96831,96833,96835,96837,96839,96841,96843],{"class":130,"line":131},[128,96832,4013],{"class":138},[128,96834,270],{"class":134},[128,96836,96372],{"class":138},[128,96838,2592],{"class":166},[128,96840,4128],{"class":138},[128,96842,4196],{"class":166},[128,96844,180],{"class":138},[128,96846,96847],{"class":130,"line":142},[128,96848,96849],{"class":3814},"#开方\n",[128,96851,96852],{"class":130,"line":156},[128,96853,96854],{"class":138},"np.sqrt(b)\n",[128,96856,96857],{"class":130,"line":163},[128,96858,96795],{"class":3814},[128,96860,96861,96863,96865,96868,96871,96873,96875],{"class":130,"line":183},[128,96862,4593],{"class":138},[128,96864,270],{"class":134},[128,96866,96867],{"class":138},"np.empty_like(b,",[128,96869,96870],{"class":266},"dtype",[128,96872,270],{"class":134},[128,96874,3798],{"class":166},[128,96876,180],{"class":138},[128,96878,96879,96882,96884,96886],{"class":130,"line":188},[128,96880,96881],{"class":138},"np.sqrt(b,",[128,96883,96424],{"class":266},[128,96885,270],{"class":134},[128,96887,96819],{"class":138},[14,96889,96891],{"id":96890},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,96893,96894],{},"对数组中的元素累计求和，可指定轴",[19,96896,96897],{},"#累计求和的意思是：",[19,96899,96900],{},"a = np.array([1, 2, 3, 4])",[19,96902,96903],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[106,96905,96907],{"className":122,"code":96906,"language":124,"meta":112,"style":112},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[114,96908,96909,96925,96930,96935],{"__ignoreMap":112},[128,96910,96911,96913,96915,96917,96919,96921,96923],{"class":130,"line":131},[128,96912,4013],{"class":138},[128,96914,270],{"class":134},[128,96916,96372],{"class":138},[128,96918,2592],{"class":166},[128,96920,4128],{"class":138},[128,96922,4196],{"class":166},[128,96924,180],{"class":138},[128,96926,96927],{"class":130,"line":142},[128,96928,96929],{"class":138},"np.cumsum(b)\n",[128,96931,96932],{"class":130,"line":156},[128,96933,96934],{"class":3814},"#结果：\n",[128,96936,96937],{"class":130,"line":163},[128,96938,96939],{"class":3814},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,96941,96943],{"id":96942},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[106,96945,96947],{"className":122,"code":96946,"language":124,"meta":112,"style":112},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[114,96948,96949,96965,96970,96975,96979],{"__ignoreMap":112},[128,96950,96951,96953,96955,96957,96959,96961,96963],{"class":130,"line":131},[128,96952,4013],{"class":138},[128,96954,270],{"class":134},[128,96956,96372],{"class":138},[128,96958,2592],{"class":166},[128,96960,4128],{"class":138},[128,96962,4196],{"class":166},[128,96964,180],{"class":138},[128,96966,96967],{"class":130,"line":142},[128,96968,96969],{"class":3814},"#对数组中的元素累计求积，可指定轴\n",[128,96971,96972],{"class":130,"line":156},[128,96973,96974],{"class":138},"np.cumprod(b)\n",[128,96976,96977],{"class":130,"line":163},[128,96978,96934],{"class":3814},[128,96980,96981],{"class":130,"line":183},[128,96982,96983],{"class":3814},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,96985,96987],{"id":96986},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[106,96989,96991],{"className":122,"code":96990,"language":124,"meta":112,"style":112},"#删除数组中的重复数据，并对数据进行排序\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",[114,96992,96993,96998,97046,97051,97055],{"__ignoreMap":112},[128,96994,96995],{"class":130,"line":131},[128,96996,96997],{"class":3814},"#删除数组中的重复数据，并对数据进行排序\n",[128,96999,97000,97002,97004,97006,97008,97010,97012,97014,97016,97018,97020,97022,97024,97026,97028,97030,97032,97034,97036,97038,97040,97042,97044],{"class":130,"line":142},[128,97001,3989],{"class":138},[128,97003,270],{"class":134},[128,97005,96394],{"class":138},[128,97007,2592],{"class":166},[128,97009,4128],{"class":138},[128,97011,409],{"class":166},[128,97013,4128],{"class":138},[128,97015,3827],{"class":166},[128,97017,4128],{"class":138},[128,97019,4247],{"class":166},[128,97021,4128],{"class":138},[128,97023,3827],{"class":166},[128,97025,4128],{"class":138},[128,97027,4196],{"class":166},[128,97029,4128],{"class":138},[128,97031,3950],{"class":166},[128,97033,4128],{"class":138},[128,97035,2452],{"class":166},[128,97037,4128],{"class":138},[128,97039,4524],{"class":166},[128,97041,4128],{"class":138},[128,97043,4043],{"class":166},[128,97045,2595],{"class":138},[128,97047,97048],{"class":130,"line":156},[128,97049,97050],{"class":138},"np.unique(a)\n",[128,97052,97053],{"class":130,"line":163},[128,97054,96934],{"class":3814},[128,97056,97057],{"class":130,"line":183},[128,97058,97059],{"class":3814},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,97061,97062],{},"升序形式排序",[14,97064,97066],{"id":97065},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[106,97068,97070],{"className":122,"code":97069,"language":124,"meta":112,"style":112},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[114,97071,97072,97120,97125],{"__ignoreMap":112},[128,97073,97074,97076,97078,97080,97082,97084,97086,97088,97090,97092,97094,97096,97098,97100,97102,97104,97106,97108,97110,97112,97114,97116,97118],{"class":130,"line":131},[128,97075,3989],{"class":138},[128,97077,270],{"class":134},[128,97079,96394],{"class":138},[128,97081,2592],{"class":166},[128,97083,4128],{"class":138},[128,97085,409],{"class":166},[128,97087,4128],{"class":138},[128,97089,3827],{"class":166},[128,97091,4128],{"class":138},[128,97093,4247],{"class":166},[128,97095,4128],{"class":138},[128,97097,3827],{"class":166},[128,97099,4128],{"class":138},[128,97101,4196],{"class":166},[128,97103,4128],{"class":138},[128,97105,3950],{"class":166},[128,97107,4128],{"class":138},[128,97109,2452],{"class":166},[128,97111,4128],{"class":138},[128,97113,4524],{"class":166},[128,97115,4128],{"class":138},[128,97117,4043],{"class":166},[128,97119,2595],{"class":138},[128,97121,97122],{"class":130,"line":142},[128,97123,97124],{"class":3814},"#返回数组中非零元素的索引\n",[128,97126,97127],{"class":130,"line":156},[128,97128,97129],{"class":138},"np.nonzero(a)\n",[14,97131,97133],{"id":97132},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[106,97135,97137],{"className":122,"code":97136,"language":124,"meta":112,"style":112},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[114,97138,97139,97187,97192],{"__ignoreMap":112},[128,97140,97141,97143,97145,97147,97149,97151,97153,97155,97157,97159,97161,97163,97165,97167,97169,97171,97173,97175,97177,97179,97181,97183,97185],{"class":130,"line":131},[128,97142,3989],{"class":138},[128,97144,270],{"class":134},[128,97146,96394],{"class":138},[128,97148,2592],{"class":166},[128,97150,4128],{"class":138},[128,97152,409],{"class":166},[128,97154,4128],{"class":138},[128,97156,3827],{"class":166},[128,97158,4128],{"class":138},[128,97160,4247],{"class":166},[128,97162,4128],{"class":138},[128,97164,3827],{"class":166},[128,97166,4128],{"class":138},[128,97168,4196],{"class":166},[128,97170,4128],{"class":138},[128,97172,3950],{"class":166},[128,97174,4128],{"class":138},[128,97176,2452],{"class":166},[128,97178,4128],{"class":138},[128,97180,4524],{"class":166},[128,97182,4128],{"class":138},[128,97184,4043],{"class":166},[128,97186,2595],{"class":138},[128,97188,97189],{"class":130,"line":142},[128,97190,97191],{"class":3814},"#计算一组数中最大值与最小值的差，可指定轴\n",[128,97193,97194],{"class":130,"line":156},[128,97195,97196],{"class":138},"np.ptp(a)\n",[3659,97198,97199],{},"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":112,"searchDepth":142,"depth":142,"links":97201},[97202,97203,97204,97205,97206,97207,97208,97209,97210,97211,97212],{"id":96464,"depth":142,"text":96465},{"id":96507,"depth":142,"text":96508},{"id":96615,"depth":142,"text":96616},{"id":96709,"depth":142,"text":96710},{"id":96749,"depth":142,"text":96750},{"id":96822,"depth":142,"text":96823},{"id":96890,"depth":142,"text":96891},{"id":96942,"depth":142,"text":96943},{"id":96986,"depth":142,"text":96987},{"id":97065,"depth":142,"text":97066},{"id":97132,"depth":142,"text":97133},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":96450,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":97219,"title":97220,"body":97221,"description":3686,"extension":3687,"meta":97876,"navigation":159,"path":97877,"seo":97878,"stem":97879,"__hash__":97880},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":97222,"toc":97864},[97223,97226,97230,97233,97449,97453,97456,97665,97669,97735,97740,97744,97747,97750,97788,97792,97795,97800,97804,97807,97810,97815,97819,97822,97826,97829,97832,97837,97841,97844,97847,97852,97856,97861],[10,97224,97220],{"id":97225},"_12其他常用函数",[14,97227,97229],{"id":97228},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,97231,97232],{},"将数组的数据按照行列复制扩展",[106,97234,97236],{"className":122,"code":97235,"language":124,"meta":112,"style":112},"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",[114,97237,97238,97254,97263,97267,97272,97277,97290,97294,97299,97304,97309,97313,97318,97342,97354,97358,97362,97367,97372,97377,97382,97386,97399,97403,97407,97412,97417,97422,97427,97432,97436,97440,97445],{"__ignoreMap":112},[128,97239,97240,97242,97244,97246,97248,97250,97252],{"class":130,"line":131},[128,97241,3989],{"class":138},[128,97243,270],{"class":134},[128,97245,96372],{"class":138},[128,97247,2592],{"class":166},[128,97249,4128],{"class":138},[128,97251,4069],{"class":166},[128,97253,180],{"class":138},[128,97255,97256,97259,97261],{"class":130,"line":142},[128,97257,97258],{"class":138},"np.tile(a,",[128,97260,409],{"class":166},[128,97262,180],{"class":138},[128,97264,97265],{"class":130,"line":156},[128,97266,96934],{"class":3814},[128,97268,97269],{"class":130,"line":163},[128,97270,97271],{"class":3814},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[128,97273,97274],{"class":130,"line":183},[128,97275,97276],{"class":3814},"#行复制两次，列复制三次\n",[128,97278,97279,97282,97284,97286,97288],{"class":130,"line":188},[128,97280,97281],{"class":138},"np.tile(a,(",[128,97283,409],{"class":166},[128,97285,4128],{"class":138},[128,97287,3827],{"class":166},[128,97289,3034],{"class":138},[128,97291,97292],{"class":130,"line":193},[128,97293,96934],{"class":3814},[128,97295,97296],{"class":130,"line":206},[128,97297,97298],{"class":176},"'''\n",[128,97300,97301],{"class":130,"line":221},[128,97302,97303],{"class":176},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[128,97305,97306],{"class":130,"line":230},[128,97307,97308],{"class":176},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[128,97310,97311],{"class":130,"line":235},[128,97312,97298],{"class":176},[128,97314,97315],{"class":130,"line":244},[128,97316,97317],{"class":3814},"#创建二维数组\n",[128,97319,97320,97322,97324,97326,97328,97330,97332,97334,97336,97338,97340],{"class":130,"line":287},[128,97321,96676],{"class":138},[128,97323,270],{"class":134},[128,97325,96372],{"class":138},[128,97327,2592],{"class":166},[128,97329,4128],{"class":138},[128,97331,4272],{"class":166},[128,97333,96377],{"class":138},[128,97335,4043],{"class":166},[128,97337,4128],{"class":138},[128,97339,3827],{"class":166},[128,97341,180],{"class":138},[128,97343,97344,97347,97349,97351],{"class":130,"line":301},[128,97345,97346],{"class":138},"np.tile(aa,",[128,97348,409],{"class":166},[128,97350,4179],{"class":138},[128,97352,97353],{"class":3814},"#一个数的时候就是行\n",[128,97355,97356],{"class":130,"line":310},[128,97357,96934],{"class":3814},[128,97359,97360],{"class":130,"line":323},[128,97361,97298],{"class":176},[128,97363,97364],{"class":130,"line":330},[128,97365,97366],{"class":176},"array([[ 1,  2,  3,  1,  2,  3],\n",[128,97368,97369],{"class":130,"line":335},[128,97370,97371],{"class":176},"       [ 4,  5,  6,  4,  5,  6],\n",[128,97373,97374],{"class":130,"line":340},[128,97375,97376],{"class":176},"       [ 7,  8,  9,  7,  8,  9],\n",[128,97378,97379],{"class":130,"line":351},[128,97380,97381],{"class":176},"       [10, 11, 12, 10, 11, 12]])\n",[128,97383,97384],{"class":130,"line":384},[128,97385,97298],{"class":176},[128,97387,97388,97391,97393,97395,97397],{"class":130,"line":414},[128,97389,97390],{"class":138},"np.tile(aa,(",[128,97392,409],{"class":166},[128,97394,4128],{"class":138},[128,97396,3827],{"class":166},[128,97398,3034],{"class":138},[128,97400,97401],{"class":130,"line":419},[128,97402,96934],{"class":3814},[128,97404,97405],{"class":130,"line":424},[128,97406,97298],{"class":176},[128,97408,97409],{"class":130,"line":434},[128,97410,97411],{"class":176},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[128,97413,97414],{"class":130,"line":447},[128,97415,97416],{"class":176},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[128,97418,97419],{"class":130,"line":459},[128,97420,97421],{"class":176},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[128,97423,97424],{"class":130,"line":471},[128,97425,97426],{"class":176},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[128,97428,97429],{"class":130,"line":483},[128,97430,97431],{"class":176},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[128,97433,97434],{"class":130,"line":495},[128,97435,97416],{"class":176},[128,97437,97438],{"class":130,"line":507},[128,97439,97421],{"class":176},[128,97441,97442],{"class":130,"line":519},[128,97443,97444],{"class":176},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[128,97446,97447],{"class":130,"line":524},[128,97448,97298],{"class":176},[14,97450,97452],{"id":97451},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,97454,97455],{},"repeat()将数组中的每个元素重复若干次",[106,97457,97459],{"className":122,"code":97458,"language":124,"meta":112,"style":112},"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",[114,97460,97461,97477,97486,97490,97495,97519,97524,97533,97537,97542,97546,97551,97567,97571,97575,97580,97585,97590,97594,97599,97603,97608,97613,97617,97633,97637,97641,97646,97651,97656,97661],{"__ignoreMap":112},[128,97462,97463,97465,97467,97469,97471,97473,97475],{"class":130,"line":131},[128,97464,3989],{"class":138},[128,97466,270],{"class":134},[128,97468,96372],{"class":138},[128,97470,2592],{"class":166},[128,97472,4128],{"class":138},[128,97474,4069],{"class":166},[128,97476,180],{"class":138},[128,97478,97479,97482,97484],{"class":130,"line":142},[128,97480,97481],{"class":138},"np.repeat(a,",[128,97483,3827],{"class":166},[128,97485,180],{"class":138},[128,97487,97488],{"class":130,"line":156},[128,97489,96934],{"class":3814},[128,97491,97492],{"class":130,"line":163},[128,97493,97494],{"class":3814},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[128,97496,97497,97499,97501,97503,97505,97507,97509,97511,97513,97515,97517],{"class":130,"line":183},[128,97498,96676],{"class":138},[128,97500,270],{"class":134},[128,97502,96372],{"class":138},[128,97504,2592],{"class":166},[128,97506,4128],{"class":138},[128,97508,4272],{"class":166},[128,97510,96377],{"class":138},[128,97512,4043],{"class":166},[128,97514,4128],{"class":138},[128,97516,3827],{"class":166},[128,97518,180],{"class":138},[128,97520,97521],{"class":130,"line":188},[128,97522,97523],{"class":3814},"#这个重复之后二维变成一维\n",[128,97525,97526,97529,97531],{"class":130,"line":193},[128,97527,97528],{"class":138},"np.repeat(aa,",[128,97530,409],{"class":166},[128,97532,180],{"class":138},[128,97534,97535],{"class":130,"line":206},[128,97536,97298],{"class":176},[128,97538,97539],{"class":130,"line":221},[128,97540,97541],{"class":176},"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",[128,97543,97544],{"class":130,"line":230},[128,97545,97298],{"class":176},[128,97547,97548],{"class":130,"line":235},[128,97549,97550],{"class":3814},"#指定axis\n",[128,97552,97553,97555,97557,97559,97561,97563,97565],{"class":130,"line":244},[128,97554,97528],{"class":138},[128,97556,409],{"class":166},[128,97558,4128],{"class":138},[128,97560,50899],{"class":266},[128,97562,270],{"class":134},[128,97564,2452],{"class":166},[128,97566,180],{"class":138},[128,97568,97569],{"class":130,"line":287},[128,97570,96934],{"class":3814},[128,97572,97573],{"class":130,"line":301},[128,97574,97298],{"class":176},[128,97576,97577],{"class":130,"line":310},[128,97578,97579],{"class":176},"array([[ 1,  2,  3],\n",[128,97581,97582],{"class":130,"line":323},[128,97583,97584],{"class":176},"       [ 1,  2,  3],\n",[128,97586,97587],{"class":130,"line":330},[128,97588,97589],{"class":176},"       [ 4,  5,  6],\n",[128,97591,97592],{"class":130,"line":335},[128,97593,97589],{"class":176},[128,97595,97596],{"class":130,"line":340},[128,97597,97598],{"class":176},"       [ 7,  8,  9],\n",[128,97600,97601],{"class":130,"line":351},[128,97602,97598],{"class":176},[128,97604,97605],{"class":130,"line":384},[128,97606,97607],{"class":176},"       [10, 11, 12],\n",[128,97609,97610],{"class":130,"line":414},[128,97611,97612],{"class":176},"       [10, 11, 12]])\n",[128,97614,97615],{"class":130,"line":419},[128,97616,97298],{"class":176},[128,97618,97619,97621,97623,97625,97627,97629,97631],{"class":130,"line":424},[128,97620,97528],{"class":138},[128,97622,409],{"class":166},[128,97624,4128],{"class":138},[128,97626,50899],{"class":266},[128,97628,270],{"class":134},[128,97630,2592],{"class":166},[128,97632,180],{"class":138},[128,97634,97635],{"class":130,"line":434},[128,97636,96934],{"class":3814},[128,97638,97639],{"class":130,"line":447},[128,97640,97298],{"class":176},[128,97642,97643],{"class":130,"line":459},[128,97644,97645],{"class":176},"array([[ 1,  1,  2,  2,  3,  3],\n",[128,97647,97648],{"class":130,"line":471},[128,97649,97650],{"class":176},"       [ 4,  4,  5,  5,  6,  6],\n",[128,97652,97653],{"class":130,"line":483},[128,97654,97655],{"class":176},"       [ 7,  7,  8,  8,  9,  9],\n",[128,97657,97658],{"class":130,"line":495},[128,97659,97660],{"class":176},"       [10, 10, 11, 11, 12, 12]])\n",[128,97662,97663],{"class":130,"line":507},[128,97664,97298],{"class":176},[14,97666,97668],{"id":97667},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[106,97670,97672],{"className":122,"code":97671,"language":124,"meta":112,"style":112},"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",[114,97673,97674,97690,97695,97707,97711,97716,97726,97730],{"__ignoreMap":112},[128,97675,97676,97678,97680,97682,97684,97686,97688],{"class":130,"line":131},[128,97677,3989],{"class":138},[128,97679,270],{"class":134},[128,97681,96372],{"class":138},[128,97683,2592],{"class":166},[128,97685,4128],{"class":138},[128,97687,4069],{"class":166},[128,97689,180],{"class":138},[128,97691,97692],{"class":130,"line":142},[128,97693,97694],{"class":3814},"#array([，2，3，4])\n",[128,97696,97697,97700,97702,97704],{"class":130,"line":156},[128,97698,97699],{"class":138},"np.roll(a,",[128,97701,409],{"class":166},[128,97703,4179],{"class":138},[128,97705,97706],{"class":3814},"#传正数向后调多少位，传负数向前调多少位\n",[128,97708,97709],{"class":130,"line":163},[128,97710,96934],{"class":3814},[128,97712,97713],{"class":130,"line":183},[128,97714,97715],{"class":3814},"#array([3, 4, 1, 2])\n",[128,97717,97718,97720,97722,97724],{"class":130,"line":188},[128,97719,97699],{"class":138},[128,97721,4281],{"class":134},[128,97723,2592],{"class":166},[128,97725,180],{"class":138},[128,97727,97728],{"class":130,"line":193},[128,97729,96934],{"class":3814},[128,97731,97732],{"class":130,"line":206},[128,97733,97734],{"class":3814},"#array([2, 3, 4, 1])\n",[19,97736,97737],{},[5074,97738],{"alt":112,"src":97739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,97741,97743],{"id":97742},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,97745,97746],{},"resize()重新调整数组的大小",[19,97748,97749],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[106,97751,97753],{"className":122,"code":97752,"language":124,"meta":112,"style":112},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[114,97754,97755,97760,97773],{"__ignoreMap":112},[128,97756,97757],{"class":130,"line":131},[128,97758,97759],{"class":3814},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[128,97761,97762,97765,97767,97769,97771],{"class":130,"line":142},[128,97763,97764],{"class":138},"np.resize(aa,(",[128,97766,409],{"class":166},[128,97768,4128],{"class":138},[128,97770,4094],{"class":166},[128,97772,3034],{"class":138},[128,97774,97775,97777,97779,97781,97783,97785],{"class":130,"line":156},[128,97776,97764],{"class":138},[128,97778,409],{"class":166},[128,97780,4128],{"class":138},[128,97782,4170],{"class":166},[128,97784,86144],{"class":138},[128,97786,97787],{"class":3814},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,97789,97791],{"id":97790},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,97793,97794],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,97796,97797],{},[5074,97798],{"alt":112,"src":97799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,97801,97803],{"id":97802},"_126-保存加载文件","12.6 保存加载文件",[19,97805,97806],{},"savetxt():将数据保存到txt文件中",[19,97808,97809],{},"loadtxt():从文件加载数据",[19,97811,97812],{},[5074,97813],{"alt":112,"src":97814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,97816,97818],{"id":97817},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,97820,97821],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,97823,97825],{"id":97824},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,97827,97828],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,97830,97831],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,97833,97834],{},[5074,97835],{"alt":112,"src":97836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,97838,97840],{"id":97839},"_129-where语句","12.9 where语句",[19,97842,97843],{},"np.where(条件,x,y)",[19,97845,97846],{},"如果条件为True,对应值为x,否则对应值为y",[19,97848,97849],{},[5074,97850],{"alt":112,"src":97851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,97853,97855],{"id":97854},"_1210-dot矩阵","12.10 dot()矩阵",[19,97857,97858],{},[5074,97859],{"alt":112,"src":97860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[3659,97862,97863],{},"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":112,"searchDepth":142,"depth":142,"links":97865},[97866,97867,97868,97869,97870,97871,97872,97873,97874,97875],{"id":97228,"depth":142,"text":97229},{"id":97451,"depth":142,"text":97452},{"id":97667,"depth":142,"text":97668},{"id":97742,"depth":142,"text":97743},{"id":97790,"depth":142,"text":97791},{"id":97802,"depth":142,"text":97803},{"id":97817,"depth":142,"text":97818},{"id":97824,"depth":142,"text":97825},{"id":97839,"depth":142,"text":97840},{"id":97854,"depth":142,"text":97855},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":97220,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":97882,"title":97883,"body":97884,"description":3686,"extension":3687,"meta":98237,"navigation":159,"path":98238,"seo":98239,"stem":98240,"__hash__":98241},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":97885,"toc":98235},[97886,97889,97892,97895,97898,97901,97966,97968,98232],[10,97887,97883],{"id":97888},"_13数组排序",[19,97890,97891],{},"排序主要用到的方法是np.sort和np.argsort",[19,97893,97894],{},"其中np.sort()对数组直接排序",[19,97896,97897],{},"而np.argsort()是返回排序后的原始索引",[19,97899,97900],{},"①一维数组",[106,97902,97904],{"className":122,"code":97903,"language":124,"meta":112,"style":112},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[114,97905,97906,97910,97950,97958],{"__ignoreMap":112},[128,97907,97908],{"class":130,"line":131},[128,97909,96475],{"class":3814},[128,97911,97912,97914,97916,97918,97920,97922,97924,97926,97928,97930,97932,97934,97936,97938,97940,97942,97944,97946,97948],{"class":130,"line":142},[128,97913,3989],{"class":138},[128,97915,270],{"class":134},[128,97917,96394],{"class":138},[128,97919,3827],{"class":166},[128,97921,4128],{"class":138},[128,97923,4247],{"class":166},[128,97925,4128],{"class":138},[128,97927,4145],{"class":166},[128,97929,4128],{"class":138},[128,97931,4524],{"class":166},[128,97933,4128],{"class":138},[128,97935,4029],{"class":166},[128,97937,4128],{"class":138},[128,97939,4641],{"class":166},[128,97941,4128],{"class":138},[128,97943,4094],{"class":166},[128,97945,4128],{"class":138},[128,97947,4196],{"class":166},[128,97949,2595],{"class":138},[128,97951,97952,97955],{"class":130,"line":156},[128,97953,97954],{"class":138},"np.sort(a)",[128,97956,97957],{"class":3814},"#升序排序\n",[128,97959,97960,97963],{"class":130,"line":163},[128,97961,97962],{"class":138},"np.argsort(a)",[128,97964,97965],{"class":3814},"#按照元素大小来索引排序\n",[19,97967,96661],{},[106,97969,97971],{"className":122,"code":97970,"language":124,"meta":112,"style":112},"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",[114,97972,97973,97985,98011,98016,98020,98025,98030,98035,98040,98044,98052,98056,98061,98066,98071,98076,98080,98085,98098,98102,98107,98112,98117,98122,98126,98131,98143,98147,98151,98155,98159,98163,98167,98172,98187,98192,98201,98206,98210,98214,98219,98223,98228],{"__ignoreMap":112},[128,97974,97975,97978,97980,97982],{"class":130,"line":131},[128,97976,97977],{"class":138},"np.random.seed(",[128,97979,2452],{"class":166},[128,97981,4179],{"class":138},[128,97983,97984],{"class":3814},"#保证每次值一样\n",[128,97986,97987,97989,97991,97993,97995,97997,97999,98001,98003,98005,98007,98009],{"class":130,"line":142},[128,97988,96676],{"class":138},[128,97990,270],{"class":134},[128,97992,96484],{"class":138},[128,97994,4061],{"class":166},[128,97996,4128],{"class":138},[128,97998,34965],{"class":266},[128,98000,270],{"class":134},[128,98002,253],{"class":138},[128,98004,4043],{"class":166},[128,98006,4128],{"class":138},[128,98008,4094],{"class":166},[128,98010,3034],{"class":138},[128,98012,98013],{"class":130,"line":156},[128,98014,98015],{"class":3814},"#原数组：\n",[128,98017,98018],{"class":130,"line":163},[128,98019,97298],{"class":176},[128,98021,98022],{"class":130,"line":183},[128,98023,98024],{"class":176},"array([[44, 47, 64, 67, 67,  9],\n",[128,98026,98027],{"class":130,"line":188},[128,98028,98029],{"class":176},"       [83, 21, 36, 87, 70, 88],\n",[128,98031,98032],{"class":130,"line":193},[128,98033,98034],{"class":176},"       [88, 12, 58, 65, 39, 87],\n",[128,98036,98037],{"class":130,"line":206},[128,98038,98039],{"class":176},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[128,98041,98042],{"class":130,"line":221},[128,98043,97298],{"class":176},[128,98045,98046,98049],{"class":130,"line":230},[128,98047,98048],{"class":138},"np.sort(aa)",[128,98050,98051],{"class":3814},"#每行进行了排序\n",[128,98053,98054],{"class":130,"line":235},[128,98055,97298],{"class":176},[128,98057,98058],{"class":130,"line":244},[128,98059,98060],{"class":176},"array([[ 9, 44, 47, 64, 67, 67],\n",[128,98062,98063],{"class":130,"line":287},[128,98064,98065],{"class":176},"       [21, 36, 70, 83, 87, 88],\n",[128,98067,98068],{"class":130,"line":301},[128,98069,98070],{"class":176},"       [12, 39, 58, 65, 87, 88],\n",[128,98072,98073],{"class":130,"line":310},[128,98074,98075],{"class":176},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[128,98077,98078],{"class":130,"line":323},[128,98079,97298],{"class":176},[128,98081,98082],{"class":130,"line":330},[128,98083,98084],{"class":3814},"#axis=0时\n",[128,98086,98087,98090,98092,98094,98096],{"class":130,"line":335},[128,98088,98089],{"class":138},"np.sort(aa,",[128,98091,50899],{"class":266},[128,98093,270],{"class":134},[128,98095,2452],{"class":166},[128,98097,180],{"class":138},[128,98099,98100],{"class":130,"line":340},[128,98101,97298],{"class":176},[128,98103,98104],{"class":130,"line":351},[128,98105,98106],{"class":176},"array([[44, 12, 36, 37, 25,  9],\n",[128,98108,98109],{"class":130,"line":384},[128,98110,98111],{"class":176},"       [46, 21, 58, 65, 39, 77],\n",[128,98113,98114],{"class":130,"line":414},[128,98115,98116],{"class":176},"       [83, 47, 64, 67, 67, 87],\n",[128,98118,98119],{"class":130,"line":419},[128,98120,98121],{"class":176},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[128,98123,98124],{"class":130,"line":424},[128,98125,97298],{"class":176},[128,98127,98128],{"class":130,"line":434},[128,98129,98130],{"class":3814},"#axis=1时,为默认值\n",[128,98132,98133,98135,98137,98139,98141],{"class":130,"line":447},[128,98134,98089],{"class":138},[128,98136,50899],{"class":266},[128,98138,270],{"class":134},[128,98140,2592],{"class":166},[128,98142,180],{"class":138},[128,98144,98145],{"class":130,"line":459},[128,98146,97298],{"class":176},[128,98148,98149],{"class":130,"line":471},[128,98150,98060],{"class":176},[128,98152,98153],{"class":130,"line":483},[128,98154,98065],{"class":176},[128,98156,98157],{"class":130,"line":495},[128,98158,98070],{"class":176},[128,98160,98161],{"class":130,"line":507},[128,98162,98075],{"class":176},[128,98164,98165],{"class":130,"line":519},[128,98166,97298],{"class":176},[128,98168,98169],{"class":130,"line":524},[128,98170,98171],{"class":3814},"#按最后一列排序\n",[128,98173,98174,98176,98178,98181,98183,98185],{"class":130,"line":529},[128,98175,4013],{"class":138},[128,98177,270],{"class":134},[128,98179,98180],{"class":138},"aa[:,",[128,98182,4281],{"class":134},[128,98184,2592],{"class":166},[128,98186,2376],{"class":138},[128,98188,98189],{"class":130,"line":540},[128,98190,98191],{"class":3814},"#获取最后一列排好序的索引\n",[128,98193,98194,98196,98198],{"class":130,"line":555},[128,98195,77432],{"class":138},[128,98197,270],{"class":134},[128,98199,98200],{"class":138},"np.argsort(b)\n",[128,98202,98203],{"class":130,"line":576},[128,98204,98205],{"class":138},"aa[index]\n",[128,98207,98208],{"class":130,"line":584},[128,98209,97298],{"class":176},[128,98211,98212],{"class":130,"line":593},[128,98213,98024],{"class":176},[128,98215,98216],{"class":130,"line":598},[128,98217,98218],{"class":176},"       [46, 88, 81, 37, 25, 77],\n",[128,98220,98221],{"class":130,"line":603},[128,98222,98034],{"class":176},[128,98224,98225],{"class":130,"line":614},[128,98226,98227],{"class":176},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[128,98229,98230],{"class":130,"line":625},[128,98231,97298],{"class":176},[3659,98233,98234],{},"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":112,"searchDepth":142,"depth":142,"links":98236},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":97883,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":98243,"title":98244,"body":98245,"description":3686,"extension":3687,"meta":98275,"navigation":159,"path":98276,"seo":98277,"stem":98278,"__hash__":98279},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":98246,"toc":98273},[98247,98250,98253,98256,98259,98262,98265,98268],[10,98248,98244],{"id":98249},"_14广播机制",[19,98251,98252],{},"广播的规则：",[19,98254,98255],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,98257,98258],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,98260,98261],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,98263,98264],{},"3.如果没有维度形状为1，则会引发异常",[19,98266,98267],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,98269,98270],{},[5074,98271],{"alt":112,"src":98272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":112,"searchDepth":142,"depth":142,"links":98274},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":98244,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":98281,"title":98282,"body":98283,"description":3686,"extension":3687,"meta":98381,"navigation":159,"path":98382,"seo":98383,"stem":98384,"__hash__":98385},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":98284,"toc":98379},[98285,98288,98291,98376],[10,98286,98282],{"id":98287},"_15比较掩码",[19,98289,98290],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[106,98292,98294],{"className":122,"code":98293,"language":124,"meta":112,"style":112},"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",[114,98295,98296,98342,98353,98367,98371],{"__ignoreMap":112},[128,98297,98298,98300,98302,98305,98307,98309,98311,98313,98315,98317,98319,98321,98323,98325,98327,98329,98331,98333,98335,98337,98339],{"class":130,"line":131},[128,98299,3989],{"class":138},[128,98301,270],{"class":134},[128,98303,98304],{"class":138},"np.array([[",[128,98306,2592],{"class":166},[128,98308,4128],{"class":138},[128,98310,409],{"class":166},[128,98312,4128],{"class":138},[128,98314,3827],{"class":166},[128,98316,51415],{"class":138},[128,98318,4222],{"class":166},[128,98320,4128],{"class":138},[128,98322,4247],{"class":166},[128,98324,4128],{"class":138},[128,98326,4272],{"class":166},[128,98328,51415],{"class":138},[128,98330,4474],{"class":166},[128,98332,4128],{"class":138},[128,98334,4499],{"class":166},[128,98336,4128],{"class":138},[128,98338,4524],{"class":166},[128,98340,98341],{"class":138},"]])\n",[128,98343,98344,98346,98348,98350],{"class":130,"line":142},[128,98345,3989],{"class":138},[128,98347,4657],{"class":134},[128,98349,4449],{"class":166},[128,98351,98352],{"class":3814},"#结果是一个由True,False组成的数组\n",[128,98354,98355,98358,98360,98362,98364],{"class":130,"line":156},[128,98356,98357],{"class":138},"a[a",[128,98359,4657],{"class":134},[128,98361,4449],{"class":166},[128,98363,1388],{"class":138},[128,98365,98366],{"class":3814},"#小于20的元素会存到这个数组中\n",[128,98368,98369],{"class":130,"line":163},[128,98370,96934],{"class":3814},[128,98372,98373],{"class":130,"line":183},[128,98374,98375],{"class":3814},"#array([ 1,  2,  3, 11, 12, 13])\n",[3659,98377,98378],{},"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":112,"searchDepth":142,"depth":142,"links":98380},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":98282,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":98387,"title":98388,"body":98389,"description":3686,"extension":3687,"meta":98481,"navigation":159,"path":98482,"seo":98483,"stem":98484,"__hash__":98485},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":98390,"toc":98479},[98391,98394,98397,98400,98403,98406,98471,98476],[10,98392,98388],{"id":98393},"_16魔法命令time",[19,98395,98396],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,98398,98399],{},"%:行模式",[19,98401,98402],{},"%%:单元格模式",[19,98404,98405],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[106,98407,98409],{"className":122,"code":98408,"language":124,"meta":112,"style":112},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[114,98410,98411,98416,98423,98428,98437,98450,98454,98462],{"__ignoreMap":112},[128,98412,98413],{"class":130,"line":131},[128,98414,98415],{"class":3814},"#程序执行时间\n",[128,98417,98418,98420],{"class":130,"line":142},[128,98419,135],{"class":134},[128,98421,98422],{"class":138}," time \n",[128,98424,98425],{"class":130,"line":156},[128,98426,98427],{"class":3814},"#获取时间\n",[128,98429,98430,98433,98435],{"class":130,"line":163},[128,98431,98432],{"class":138},"start",[128,98434,270],{"class":134},[128,98436,35885],{"class":138},[128,98438,98439,98442,98445,98447],{"class":130,"line":183},[128,98440,98441],{"class":138},"time.sleep(",[128,98443,98444],{"class":166},"0.4",[128,98446,4179],{"class":138},[128,98448,98449],{"class":3814},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[128,98451,98452],{"class":130,"line":188},[128,98453,98427],{"class":3814},[128,98455,98456,98458,98460],{"class":130,"line":193},[128,98457,49186],{"class":138},[128,98459,270],{"class":134},[128,98461,35885],{"class":138},[128,98463,98464,98466,98468],{"class":130,"line":206},[128,98465,49186],{"class":138},[128,98467,4281],{"class":134},[128,98469,98470],{"class":138},"start\n",[19,98472,98473],{},[5074,98474],{"alt":112,"src":98475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[3659,98477,98478],{},"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":112,"searchDepth":142,"depth":142,"links":98480},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":98388,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":98487,"title":98488,"body":98489,"description":3686,"extension":3687,"meta":98524,"navigation":159,"path":98525,"seo":98526,"stem":98527,"__hash__":98528},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":98490,"toc":98522},[98491,98494,98497,98500,98503,98506,98509,98512,98517],[10,98492,98488],{"id":98493},"_17魔法命令timeit",[19,98495,98496],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,98498,98499],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,98501,98502],{},"单元格模式：",[19,98504,98505],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,98507,98508],{},"初始化语句执行次数由轮数来决定",[19,98510,98511],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,98513,98514],{},[5074,98515],{"alt":112,"src":98516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,98518,98519],{},[5074,98520],{"alt":112,"src":98521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":112,"searchDepth":142,"depth":142,"links":98523},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":98488,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":98530,"title":98531,"body":98532,"description":3686,"extension":3687,"meta":98550,"navigation":159,"path":98551,"seo":98552,"stem":98553,"__hash__":98554},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":98533,"toc":98548},[98534,98537,98540,98543],[10,98535,98531],{"id":98536},"_18魔法命令writefile和run",[19,98538,98539],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,98541,98542],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,98544,98545],{},[5074,98546],{"alt":112,"src":98547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":112,"searchDepth":142,"depth":142,"links":98549},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":98531,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":98556,"title":98557,"body":98558,"description":3686,"extension":3687,"meta":98611,"navigation":159,"path":98612,"seo":98613,"stem":98614,"__hash__":98615},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":98559,"toc":98609},[98560,98563,98566,98568,98571,98574,98579,98582,98585,98588,98591,98594,98597,98600,98603,98606],[10,98561,98557],{"id":98562},"_19魔法命令memit",[19,98564,98565],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,98567,3497],{},[19,98569,98570],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,98572,98573],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,98575,98576],{},[5074,98577],{"alt":112,"src":98578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,98580,98581],{},"补充：",[19,98583,98584],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,98586,98587],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,98589,98590],{},"解决方法：",[19,98592,98593],{},"1.cmd",[19,98595,98596],{},"2.依次输入以下代码：",[19,98598,98599],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,98601,98602],{},"pip install --upgrade ipython",[19,98604,98605],{},"#升级 memory_profiler 和 setuptools",[19,98607,98608],{},"pip install --upgrade memory_profiler setuptools",{"title":112,"searchDepth":142,"depth":142,"links":98610},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":98557,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":98617,"title":98618,"body":98619,"description":3686,"extension":3687,"meta":100264,"navigation":159,"path":100265,"seo":100266,"stem":100267,"__hash__":100268},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":98620,"toc":100234},[98621,98624,98628,98632,98692,98695,98700,98704,98709,98714,98719,98724,98727,98732,98736,98740,98773,98776,98779,98782,98834,98837,98873,98876,98918,98922,98943,98945,98982,98984,98989,98991,98996,99000,99003,99031,99035,99039,99092,99096,99188,99192,99196,99199,99204,99208,99233,99238,99242,99245,99248,99251,99254,99257,99260,99263,99275,99279,99283,99286,99318,99321,99344,99347,99373,99376,99402,99405,99439,99442,99504,99508,99511,99515,99518,99544,99547,99550,99555,99558,99627,99629,99634,99695,99698,99709,99715,99720,99724,99727,99740,99744,99759,99761,99784,99786,99812,99815,99818,99821,99869,99871,99876,99880,99884,99911,99915,99942,99945,99950,99955,100045,100049,100107,100112,100115,100118,100160,100164,100220,100225,100228,100231],[10,98622,98618],{"id":98623},"_2创建数组",[14,98625,98627],{"id":98626},"_21-array函数创建数组","2.1 array()函数创建数组",[72,98629,98631],{"id":98630},"_221-函数语句","2.2.1 函数语句",[106,98633,98635],{"className":122,"code":98634,"language":124,"meta":112,"style":112},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[114,98636,98637],{"__ignoreMap":112},[128,98638,98639,98642,98645,98647,98649,98651,98653,98655,98658,98660,98662,98664,98667,98669,98671,98673,98676,98678,98681,98683,98686,98688,98690],{"class":130,"line":131},[128,98640,98641],{"class":138},"numpy.array(",[128,98643,98644],{"class":166},"object",[128,98646,258],{"class":138},[128,98648,96870],{"class":266},[128,98650,170],{"class":134},[128,98652,1000],{"class":166},[128,98654,258],{"class":138},[128,98656,98657],{"class":266},"copy",[128,98659,170],{"class":134},[128,98661,620],{"class":166},[128,98663,258],{"class":138},[128,98665,98666],{"class":266},"order",[128,98668,170],{"class":134},[128,98670,1000],{"class":166},[128,98672,258],{"class":138},[128,98674,98675],{"class":266},"subok",[128,98677,170],{"class":134},[128,98679,98680],{"class":166}," False",[128,98682,258],{"class":138},[128,98684,98685],{"class":266},"ndmin",[128,98687,170],{"class":134},[128,98689,7659],{"class":166},[128,98691,180],{"class":138},[19,98693,98694],{},"参数：",[19,98696,98697],{},[5074,98698],{"alt":112,"src":98699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[72,98701,98703],{"id":98702},"_222-实例","2.2.2 实例",[19,98705,98706],{},[5074,98707],{"alt":112,"src":98708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,98710,98711],{},[5074,98712],{"alt":112,"src":98713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,98715,98716],{},[5074,98717],{"alt":112,"src":98718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,98720,98721],{},[5074,98722],{"alt":112,"src":98723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,98725,98726],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,98728,98729],{},[5074,98730],{"alt":112,"src":98731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,98733,98735],{"id":98734},"_22-随机数创建数组","2.2 随机数创建数组",[72,98737,98739],{"id":98738},"_221-random语句","2.2.1 random语句",[106,98741,98743],{"className":122,"code":98742,"language":124,"meta":112,"style":112},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[114,98744,98745,98750,98755,98763,98768],{"__ignoreMap":112},[128,98746,98747],{"class":130,"line":131},[128,98748,98749],{"class":3814},"#random.random()\n",[128,98751,98752],{"class":130,"line":142},[128,98753,98754],{"class":3814},"#确定随机种子,就是每次运行结果是相同的\n",[128,98756,98757,98759,98761],{"class":130,"line":156},[128,98758,97977],{"class":138},[128,98760,2452],{"class":166},[128,98762,180],{"class":138},[128,98764,98765],{"class":130,"line":163},[128,98766,98767],{"class":138},"np.random.random()\n",[128,98769,98770],{"class":130,"line":183},[128,98771,98772],{"class":3814},"#生成一个随机的数目\n",[19,98774,98775],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,98777,98778],{},"可以指定数组形状 size",[19,98780,98781],{},"①生成一维数组",[106,98783,98785],{"className":122,"code":98784,"language":124,"meta":112,"style":112},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[114,98786,98787,98792,98805,98810,98826],{"__ignoreMap":112},[128,98788,98789],{"class":130,"line":131},[128,98790,98791],{"class":3814},"#random.random(size())\n",[128,98793,98794,98797,98799,98801,98803],{"class":130,"line":142},[128,98795,98796],{"class":138},"np.random.random(",[128,98798,34965],{"class":266},[128,98800,270],{"class":134},[128,98802,4069],{"class":166},[128,98804,180],{"class":138},[128,98806,98807],{"class":130,"line":156},[128,98808,98809],{"class":3814},"#生成一位的五个元素\n",[128,98811,98812,98814,98816,98818,98820,98822,98824],{"class":130,"line":163},[128,98813,3989],{"class":138},[128,98815,270],{"class":134},[128,98817,98796],{"class":138},[128,98819,34965],{"class":266},[128,98821,270],{"class":134},[128,98823,4043],{"class":166},[128,98825,180],{"class":138},[128,98827,98828,98831],{"class":130,"line":183},[128,98829,98830],{"class":138},"a.shape ",[128,98832,98833],{"class":3814},"#输出数组形状\n",[19,98835,98836],{},"②生成二维数组",[106,98838,98840],{"className":122,"code":98839,"language":124,"meta":112,"style":112},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[114,98841,98842,98846,98868],{"__ignoreMap":112},[128,98843,98844],{"class":130,"line":131},[128,98845,96671],{"class":3814},[128,98847,98848,98850,98852,98854,98856,98858,98860,98862,98864,98866],{"class":130,"line":142},[128,98849,96676],{"class":138},[128,98851,270],{"class":134},[128,98853,98796],{"class":138},[128,98855,34965],{"class":266},[128,98857,270],{"class":134},[128,98859,253],{"class":138},[128,98861,4043],{"class":166},[128,98863,4128],{"class":138},[128,98865,4069],{"class":166},[128,98867,3034],{"class":138},[128,98869,98870],{"class":130,"line":156},[128,98871,98872],{"class":3814},"#生成四行五列的数组\n",[19,98874,98875],{},"③生成三维数组",[106,98877,98879],{"className":122,"code":98878,"language":124,"meta":112,"style":112},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[114,98880,98881,98886,98913],{"__ignoreMap":112},[128,98882,98883],{"class":130,"line":131},[128,98884,98885],{"class":3814},"#三维数组\n",[128,98887,98888,98891,98893,98895,98897,98899,98901,98903,98905,98907,98909,98911],{"class":130,"line":142},[128,98889,98890],{"class":138},"aaa",[128,98892,270],{"class":134},[128,98894,98796],{"class":138},[128,98896,34965],{"class":266},[128,98898,270],{"class":134},[128,98900,253],{"class":138},[128,98902,409],{"class":166},[128,98904,4128],{"class":138},[128,98906,3827],{"class":166},[128,98908,4128],{"class":138},[128,98910,4043],{"class":166},[128,98912,3034],{"class":138},[128,98914,98915],{"class":130,"line":156},[128,98916,98917],{"class":138},"aaa.shape\n",[72,98919,98921],{"id":98920},"_222-randint语句","2.2.2 randint语句",[106,98923,98925],{"className":122,"code":98924,"language":124,"meta":112,"style":112},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[114,98926,98927,98932],{"__ignoreMap":112},[128,98928,98929],{"class":130,"line":131},[128,98930,98931],{"class":3814},"#生成随机的整数 random.randint(low,high,size)\n",[128,98933,98934,98936,98938,98940],{"class":130,"line":142},[128,98935,96484],{"class":138},[128,98937,4069],{"class":166},[128,98939,276],{"class":138},[128,98941,98942],{"class":3814},"#0~5中的随机一个数\n",[19,98944,98781],{},[106,98946,98948],{"className":122,"code":98947,"language":124,"meta":112,"style":112},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[114,98949,98950,98955,98977],{"__ignoreMap":112},[128,98951,98952],{"class":130,"line":131},[128,98953,98954],{"class":3814},"#一维\n",[128,98956,98957,98959,98961,98963,98965,98967,98969,98971,98973,98975],{"class":130,"line":142},[128,98958,96484],{"class":138},[128,98960,2592],{"class":166},[128,98962,4128],{"class":138},[128,98964,4222],{"class":166},[128,98966,4128],{"class":138},[128,98968,34965],{"class":266},[128,98970,270],{"class":134},[128,98972,253],{"class":138},[128,98974,4196],{"class":166},[128,98976,3034],{"class":138},[128,98978,98979],{"class":130,"line":156},[128,98980,98981],{"class":3814},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,98983,98836],{},[19,98985,98986],{},[5074,98987],{"alt":112,"src":98988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,98990,98875],{},[19,98992,98993],{},[5074,98994],{"alt":112,"src":98995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[72,98997,98999],{"id":98998},"_222-rand语句","2.2.2 rand语句",[19,99001,99002],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[106,99004,99006],{"className":122,"code":99005,"language":124,"meta":112,"style":112},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[114,99007,99008,99021,99026],{"__ignoreMap":112},[128,99009,99010,99013,99015,99017,99019],{"class":130,"line":131},[128,99011,99012],{"class":138},"np.random.rand(",[128,99014,4061],{"class":166},[128,99016,4128],{"class":138},[128,99018,4196],{"class":166},[128,99020,180],{"class":138},[128,99022,99023],{"class":130,"line":142},[128,99024,99025],{"class":3814},"#第一个参数100：行数，表示有100个样本\n",[128,99027,99028],{"class":130,"line":156},[128,99029,99030],{"class":3814},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,99032,99034],{"id":99033},"_23-arange创建数组","2.3 arange()创建数组",[72,99036,99038],{"id":99037},"_231-函数语句","2.3.1 函数语句",[106,99040,99042],{"className":122,"code":99041,"language":124,"meta":112,"style":112},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[114,99043,99044,99058,99063,99068,99073,99078,99083,99088],{"__ignoreMap":112},[128,99045,99046,99049,99051,99053,99056],{"class":130,"line":131},[128,99047,99048],{"class":138},"numpy.arange([start,] stop[, step], ",[128,99050,96870],{"class":266},[128,99052,270],{"class":134},[128,99054,99055],{"class":166},"None",[128,99057,180],{"class":138},[128,99059,99060],{"class":130,"line":142},[128,99061,99062],{"class":3814},"#参数\n",[128,99064,99065],{"class":130,"line":156},[128,99066,99067],{"class":176},"\"\"\"\n",[128,99069,99070],{"class":130,"line":163},[128,99071,99072],{"class":176},"start:起始值，可选，默认从 0 开始。\n",[128,99074,99075],{"class":130,"line":183},[128,99076,99077],{"class":176},"stop:结束值（不包含该值）。\n",[128,99079,99080],{"class":130,"line":188},[128,99081,99082],{"class":176},"step:步长，可选，默认是 1。可以为浮点数。\n",[128,99084,99085],{"class":130,"line":193},[128,99086,99087],{"class":176},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[128,99089,99090],{"class":130,"line":206},[128,99091,99067],{"class":176},[72,99093,99095],{"id":99094},"_232-实例","2.3.2 实例",[106,99097,99099],{"className":122,"code":99098,"language":124,"meta":112,"style":112},"#创建一维数组\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",[114,99100,99101,99105,99129,99134,99139,99143,99166,99170,99174,99179,99184],{"__ignoreMap":112},[128,99102,99103],{"class":130,"line":131},[128,99104,96475],{"class":3814},[128,99106,99107,99109,99111,99113,99115,99117,99119,99121,99123,99125,99127],{"class":130,"line":142},[128,99108,96372],{"class":138},[128,99110,2592],{"class":166},[128,99112,4128],{"class":138},[128,99114,4474],{"class":166},[128,99116,4128],{"class":138},[128,99118,2592],{"class":166},[128,99120,4128],{"class":138},[128,99122,96870],{"class":266},[128,99124,270],{"class":134},[128,99126,3763],{"class":166},[128,99128,180],{"class":138},[128,99130,99131],{"class":130,"line":156},[128,99132,99133],{"class":3814},"#输出结果：\n",[128,99135,99136],{"class":130,"line":163},[128,99137,99138],{"class":3814},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[128,99140,99141],{"class":130,"line":183},[128,99142,97317],{"class":3814},[128,99144,99145,99148,99150,99152,99154,99157,99159,99161,99163],{"class":130,"line":188},[128,99146,99147],{"class":138},"np.array([np.arange(",[128,99149,2592],{"class":166},[128,99151,4128],{"class":138},[128,99153,4043],{"class":166},[128,99155,99156],{"class":138},"),np.arange(",[128,99158,4043],{"class":166},[128,99160,4128],{"class":138},[128,99162,4119],{"class":166},[128,99164,99165],{"class":138},")])\n",[128,99167,99168],{"class":130,"line":193},[128,99169,96934],{"class":3814},[128,99171,99172],{"class":130,"line":206},[128,99173,99067],{"class":176},[128,99175,99176],{"class":130,"line":221},[128,99177,99178],{"class":176},"array([[1, 2, 3],\n",[128,99180,99181],{"class":130,"line":230},[128,99182,99183],{"class":176},"       [4, 5, 6]])\n",[128,99185,99186],{"class":130,"line":235},[128,99187,99067],{"class":176},[14,99189,99191],{"id":99190},"_24-生态分布","2.4 生态分布",[72,99193,99195],{"id":99194},"_241-标准正态分布","2.4.1 标准正态分布",[19,99197,99198],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,99200,99201],{},[5074,99202],{"alt":112,"src":99203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[72,99205,99207],{"id":99206},"_242-常规正态分布","2.4.2 常规正态分布",[106,99209,99211],{"className":122,"code":99210,"language":124,"meta":112,"style":112},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[114,99212,99213,99218,99223,99228],{"__ignoreMap":112},[128,99214,99215],{"class":130,"line":131},[128,99216,99217],{"class":138},"random.normal(loc,scale,size)也可以生成正态分布\n",[128,99219,99220],{"class":130,"line":142},[128,99221,99222],{"class":3814},"#loc:期望\n",[128,99224,99225],{"class":130,"line":156},[128,99226,99227],{"class":3814},"#scale:方差\n",[128,99229,99230],{"class":130,"line":163},[128,99231,99232],{"class":3814},"#size:用于确定是几维的数列\n",[19,99234,99235],{},[5074,99236],{"alt":112,"src":99237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,99239,99241],{"id":99240},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,99243,99244],{},"ndim:秩，维度个数",[19,99246,99247],{},"size:数组元素的个数",[19,99249,99250],{},"shape:数组的形状",[19,99252,99253],{},"dtype:数组元素的类型",[19,99255,99256],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,99258,99259],{},"他们都是属性，通过数组.属性的形式来确定",[19,99261,99262],{},"如果需要输出多个可以通过以下方式：",[106,99264,99266],{"className":122,"code":99265,"language":124,"meta":112,"style":112},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[114,99267,99268],{"__ignoreMap":112},[128,99269,99270,99272],{"class":130,"line":131},[128,99271,2469],{"class":166},[128,99273,99274],{"class":138},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,99276,99278],{"id":99277},"_26-其他方式创建数组","2.6 其他方式创建数组",[72,99280,99282],{"id":99281},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,99284,99285],{},"①创建一维数组",[106,99287,99289],{"className":122,"code":99288,"language":124,"meta":112,"style":112},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[114,99290,99291,99300,99304,99309,99314],{"__ignoreMap":112},[128,99292,99293,99296,99298],{"class":130,"line":131},[128,99294,99295],{"class":138},"np.zeros(",[128,99297,4196],{"class":166},[128,99299,180],{"class":138},[128,99301,99302],{"class":130,"line":142},[128,99303,99067],{"class":176},[128,99305,99306],{"class":130,"line":156},[128,99307,99308],{"class":176},"输出结果：\n",[128,99310,99311],{"class":130,"line":163},[128,99312,99313],{"class":176},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[128,99315,99316],{"class":130,"line":183},[128,99317,99067],{"class":176},[19,99319,99320],{},"上方代码等价于：",[106,99322,99324],{"className":122,"code":99323,"language":124,"meta":112,"style":112},"np.zeros(shape=(10))#创建10个元素的0数组\n",[114,99325,99326],{"__ignoreMap":112},[128,99327,99328,99330,99333,99335,99337,99339,99341],{"class":130,"line":131},[128,99329,99295],{"class":138},[128,99331,99332],{"class":266},"shape",[128,99334,270],{"class":134},[128,99336,253],{"class":138},[128,99338,4196],{"class":166},[128,99340,86144],{"class":138},[128,99342,99343],{"class":3814},"#创建10个元素的0数组\n",[19,99345,99346],{},"也可以指定类型",[106,99348,99350],{"className":122,"code":99349,"language":124,"meta":112,"style":112},"#指定类型\nnp.zeros(5,dtype=int)\n",[114,99351,99352,99357],{"__ignoreMap":112},[128,99353,99354],{"class":130,"line":131},[128,99355,99356],{"class":3814},"#指定类型\n",[128,99358,99359,99361,99363,99365,99367,99369,99371],{"class":130,"line":142},[128,99360,99295],{"class":138},[128,99362,4069],{"class":166},[128,99364,4128],{"class":138},[128,99366,96870],{"class":266},[128,99368,270],{"class":134},[128,99370,3763],{"class":166},[128,99372,180],{"class":138},[19,99374,99375],{},"②创建二维数组",[106,99377,99379],{"className":122,"code":99378,"language":124,"meta":112,"style":112},"np.zeros((3,4),dtype=int)\n",[114,99380,99381],{"__ignoreMap":112},[128,99382,99383,99386,99388,99390,99392,99394,99396,99398,99400],{"class":130,"line":131},[128,99384,99385],{"class":138},"np.zeros((",[128,99387,3827],{"class":166},[128,99389,4128],{"class":138},[128,99391,4043],{"class":166},[128,99393,45642],{"class":138},[128,99395,96870],{"class":266},[128,99397,270],{"class":134},[128,99399,3763],{"class":166},[128,99401,180],{"class":138},[19,99403,99404],{},"③创建三维数组",[106,99406,99408],{"className":122,"code":99407,"language":124,"meta":112,"style":112},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[114,99409,99410,99415],{"__ignoreMap":112},[128,99411,99412],{"class":130,"line":131},[128,99413,99414],{"class":3814},"#创建三维数组\n",[128,99416,99417,99419,99421,99423,99425,99427,99429,99431,99433,99435,99437],{"class":130,"line":142},[128,99418,99385],{"class":138},[128,99420,3827],{"class":166},[128,99422,4128],{"class":138},[128,99424,4043],{"class":166},[128,99426,4128],{"class":138},[128,99428,4069],{"class":166},[128,99430,45642],{"class":138},[128,99432,96870],{"class":266},[128,99434,270],{"class":134},[128,99436,3763],{"class":166},[128,99438,180],{"class":138},[19,99440,99441],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[106,99443,99445],{"className":122,"code":99444,"language":124,"meta":112,"style":112},"#使用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",[114,99446,99447,99452,99467,99472,99477,99499],{"__ignoreMap":112},[128,99448,99449],{"class":130,"line":131},[128,99450,99451],{"class":3814},"#使用zeros_like将创建的一维数组变成全0的数组\n",[128,99453,99454,99456,99458,99460,99462,99464],{"class":130,"line":142},[128,99455,3989],{"class":138},[128,99457,270],{"class":134},[128,99459,96372],{"class":138},[128,99461,4043],{"class":166},[128,99463,4179],{"class":138},[128,99465,99466],{"class":3814},"#这个得到的结果：一维数组0，1，2，3\n",[128,99468,99469],{"class":130,"line":156},[128,99470,99471],{"class":138},"np.zeros_like(a)\n",[128,99473,99474],{"class":130,"line":163},[128,99475,99476],{"class":3814},"#使用zeros_like将创建的二维数组变成全0的数组\n",[128,99478,99479,99481,99483,99485,99487,99489,99491,99493,99495,99497],{"class":130,"line":183},[128,99480,96676],{"class":138},[128,99482,270],{"class":134},[128,99484,98796],{"class":138},[128,99486,34965],{"class":266},[128,99488,270],{"class":134},[128,99490,253],{"class":138},[128,99492,4043],{"class":166},[128,99494,4128],{"class":138},[128,99496,4069],{"class":166},[128,99498,3034],{"class":138},[128,99500,99501],{"class":130,"line":188},[128,99502,99503],{"class":138},"np.zeros_like(aa)\n",[72,99505,99507],{"id":99506},"_262-ones创建数组","2.6.2 ones()创建数组",[19,99509,99510],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[72,99512,99514],{"id":99513},"_263-empty创建数组","2.6.3 empty()创建数组",[19,99516,99517],{},"①empty()用法",[106,99519,99521],{"className":122,"code":99520,"language":124,"meta":112,"style":112},"numpy.empty(shape,dtype=float,order='c')\n",[114,99522,99523],{"__ignoreMap":112},[128,99524,99525,99528,99530,99532,99534,99536,99538,99540,99542],{"class":130,"line":131},[128,99526,99527],{"class":138},"numpy.empty(shape,",[128,99529,96870],{"class":266},[128,99531,270],{"class":134},[128,99533,3798],{"class":166},[128,99535,4128],{"class":138},[128,99537,98666],{"class":266},[128,99539,270],{"class":134},[128,99541,79402],{"class":176},[128,99543,180],{"class":138},[19,99545,99546],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,99548,99549],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,99551,99552],{},[5074,99553],{"alt":112,"src":99554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,99556,99557],{},"②empty()用法",[106,99559,99561],{"className":122,"code":99560,"language":124,"meta":112,"style":112},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[114,99562,99563,99584,99596,99617,99622],{"__ignoreMap":112},[128,99564,99565,99567,99569,99572,99574,99576,99578,99580,99582],{"class":130,"line":131},[128,99566,4593],{"class":138},[128,99568,270],{"class":134},[128,99570,99571],{"class":138},"np.empty(",[128,99573,4196],{"class":166},[128,99575,4128],{"class":138},[128,99577,96870],{"class":266},[128,99579,270],{"class":134},[128,99581,3763],{"class":166},[128,99583,180],{"class":138},[128,99585,99586,99588,99590,99592,99594],{"class":130,"line":142},[128,99587,4568],{"class":138},[128,99589,270],{"class":134},[128,99591,96372],{"class":138},[128,99593,4069],{"class":166},[128,99595,180],{"class":138},[128,99597,99598,99601,99603,99606,99608,99610,99613,99615],{"class":130,"line":156},[128,99599,99600],{"class":138},"np.add(",[128,99602,409],{"class":166},[128,99604,99605],{"class":138},",x,",[128,99607,96424],{"class":266},[128,99609,270],{"class":134},[128,99611,99612],{"class":138},"y[:",[128,99614,4069],{"class":166},[128,99616,2595],{"class":138},[128,99618,99619],{"class":130,"line":163},[128,99620,99621],{"class":3814},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[128,99623,99624],{"class":130,"line":183},[128,99625,99626],{"class":138},"y\n",[19,99628,15041],{},[19,99630,99631],{},[5074,99632],{"alt":112,"src":99633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[106,99635,99637],{"className":122,"code":99636,"language":124,"meta":112,"style":112},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[114,99638,99639,99655,99675,99690],{"__ignoreMap":112},[128,99640,99641,99643,99645,99647,99649,99651,99653],{"class":130,"line":131},[128,99642,4568],{"class":138},[128,99644,270],{"class":134},[128,99646,96372],{"class":138},[128,99648,2592],{"class":166},[128,99650,4128],{"class":138},[128,99652,4094],{"class":166},[128,99654,180],{"class":138},[128,99656,99657,99659,99661,99663,99665,99667,99669,99671,99673],{"class":130,"line":142},[128,99658,4593],{"class":138},[128,99660,270],{"class":134},[128,99662,99571],{"class":138},[128,99664,4069],{"class":166},[128,99666,4128],{"class":138},[128,99668,96870],{"class":266},[128,99670,270],{"class":134},[128,99672,3763],{"class":166},[128,99674,180],{"class":138},[128,99676,99677,99680,99682,99684,99686,99688],{"class":130,"line":156},[128,99678,99679],{"class":138},"np.add(x,",[128,99681,409],{"class":166},[128,99683,4128],{"class":138},[128,99685,96424],{"class":266},[128,99687,270],{"class":134},[128,99689,96819],{"class":138},[128,99691,99692],{"class":130,"line":163},[128,99693,99694],{"class":3814},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,99696,99697],{},"③empty_like()",[19,99699,99700],{},[3903,99701,99702,99703,99708],{},"创建一个",[3903,99704,99705],{},[3903,99706,99707],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,99710,99711,99714],{},[114,99712,99713],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,99716,99717],{},[5074,99718],{"alt":112,"src":99719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[72,99721,99723],{"id":99722},"_264-用法","2.6.4 ？？用法",[19,99725,99726],{},"当想查看一个函数的参数时，可以通过？？来实现",[106,99728,99730],{"className":122,"code":99729,"language":124,"meta":112,"style":112},"np.full??\n",[114,99731,99732],{"__ignoreMap":112},[128,99733,99734,99737],{"class":130,"line":131},[128,99735,99736],{"class":138},"np.full",[128,99738,99739],{"class":80777},"??\n",[72,99741,99743],{"id":99742},"_265-full创建数组","2.6.5 full()创建数组",[106,99745,99747],{"className":122,"code":99746,"language":124,"meta":112,"style":112},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[114,99748,99749,99754],{"__ignoreMap":112},[128,99750,99751],{"class":130,"line":131},[128,99752,99753],{"class":138},"full(shape,fill_value)\n",[128,99755,99756],{"class":130,"line":142},[128,99757,99758],{"class":138},"创建全为某个指定值的数组\n",[19,99760,97900],{},[106,99762,99764],{"className":122,"code":99763,"language":124,"meta":112,"style":112},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[114,99765,99766,99771],{"__ignoreMap":112},[128,99767,99768],{"class":130,"line":131},[128,99769,99770],{"class":3814},"#创建一个一维数组,以20进行填充\n",[128,99772,99773,99776,99778,99780,99782],{"class":130,"line":142},[128,99774,99775],{"class":138},"np.full(",[128,99777,4196],{"class":166},[128,99779,4128],{"class":138},[128,99781,4449],{"class":166},[128,99783,180],{"class":138},[19,99785,96661],{},[106,99787,99789],{"className":122,"code":99788,"language":124,"meta":112,"style":112},"#创建二维数组\nnp.full((3,5),11)\n",[114,99790,99791,99795],{"__ignoreMap":112},[128,99792,99793],{"class":130,"line":131},[128,99794,97317],{"class":3814},[128,99796,99797,99800,99802,99804,99806,99808,99810],{"class":130,"line":142},[128,99798,99799],{"class":138},"np.full((",[128,99801,3827],{"class":166},[128,99803,4128],{"class":138},[128,99805,4069],{"class":166},[128,99807,45642],{"class":138},[128,99809,4222],{"class":166},[128,99811,180],{"class":138},[19,99813,99814],{},"③full_like用法",[19,99816,99817],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,99819,99820],{},"这里是指定填充而已",[106,99822,99824],{"className":122,"code":99823,"language":124,"meta":112,"style":112},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[114,99825,99826,99831,99855,99860],{"__ignoreMap":112},[128,99827,99828],{"class":130,"line":131},[128,99829,99830],{"class":3814},"#创建一个指定形状数组\n",[128,99832,99833,99835,99837,99839,99841,99843,99845,99847,99849,99851,99853],{"class":130,"line":142},[128,99834,3989],{"class":138},[128,99836,270],{"class":134},[128,99838,96372],{"class":138},[128,99840,2592],{"class":166},[128,99842,4128],{"class":138},[128,99844,4075],{"class":166},[128,99846,96377],{"class":138},[128,99848,4043],{"class":166},[128,99850,4128],{"class":138},[128,99852,4170],{"class":166},[128,99854,180],{"class":138},[128,99856,99857],{"class":130,"line":156},[128,99858,99859],{"class":3814},"#进行指定填充\n",[128,99861,99862,99865,99867],{"class":130,"line":163},[128,99863,99864],{"class":138},"np.full_like(a,",[128,99866,4196],{"class":166},[128,99868,180],{"class":138},[19,99870,15041],{},[19,99872,99873],{},[5074,99874],{"alt":112,"src":99875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[72,99877,99879],{"id":99878},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[25485,99881,99883],{"id":99882},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[106,99885,99887],{"className":122,"code":99886,"language":124,"meta":112,"style":112},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[114,99888,99889,99906],{"__ignoreMap":112},[128,99890,99891,99894,99896,99898,99900,99902,99904],{"class":130,"line":131},[128,99892,99893],{"class":138},"np.eye(",[128,99895,4043],{"class":166},[128,99897,4128],{"class":138},[128,99899,96870],{"class":266},[128,99901,270],{"class":134},[128,99903,3763],{"class":166},[128,99905,180],{"class":138},[128,99907,99908],{"class":130,"line":142},[128,99909,99910],{"class":3814},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[25485,99912,99914],{"id":99913},"_2662-法2identity","2.6.6.2 法2：identity()",[106,99916,99918],{"className":122,"code":99917,"language":124,"meta":112,"style":112},"#identity()\nnp.identity(5,dtype=int)\n",[114,99919,99920,99925],{"__ignoreMap":112},[128,99921,99922],{"class":130,"line":131},[128,99923,99924],{"class":3814},"#identity()\n",[128,99926,99927,99930,99932,99934,99936,99938,99940],{"class":130,"line":142},[128,99928,99929],{"class":138},"np.identity(",[128,99931,4069],{"class":166},[128,99933,4128],{"class":138},[128,99935,96870],{"class":266},[128,99937,270],{"class":134},[128,99939,3763],{"class":166},[128,99941,180],{"class":138},[19,99943,99944],{},"两个函数是有区别的",[19,99946,99947],{},[5074,99948],{"alt":112,"src":99949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,99951,99952],{},[5074,99953],{"alt":112,"src":99954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[106,99956,99958],{"className":122,"code":99957,"language":124,"meta":112,"style":112},"# 创建一个 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",[114,99959,99960,99965,99977,99982,99987,99992,99997,100001,100006,100026,100030,100035,100040],{"__ignoreMap":112},[128,99961,99962],{"class":130,"line":131},[128,99963,99964],{"class":3814},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[128,99966,99967,99969,99971,99973,99975],{"class":130,"line":142},[128,99968,99893],{"class":138},[128,99970,3827],{"class":166},[128,99972,258],{"class":138},[128,99974,4043],{"class":166},[128,99976,180],{"class":138},[128,99978,99979],{"class":130,"line":156},[128,99980,99981],{"class":3814},"# 输出:\n",[128,99983,99984],{"class":130,"line":163},[128,99985,99986],{"class":3814},"# [[1. 0. 0. 0.]\n",[128,99988,99989],{"class":130,"line":183},[128,99990,99991],{"class":3814},"#  [0. 1. 0. 0.]\n",[128,99993,99994],{"class":130,"line":188},[128,99995,99996],{"class":3814},"#  [0. 0. 1. 0.]]\n",[128,99998,99999],{"class":130,"line":193},[128,100000,160],{"emptyLinePlaceholder":159},[128,100002,100003],{"class":130,"line":206},[128,100004,100005],{"class":3814},"# 对角线向上偏移1\n",[128,100007,100008,100010,100012,100014,100016,100018,100020,100022,100024],{"class":130,"line":221},[128,100009,99893],{"class":138},[128,100011,3827],{"class":166},[128,100013,258],{"class":138},[128,100015,4043],{"class":166},[128,100017,258],{"class":138},[128,100019,4242],{"class":266},[128,100021,270],{"class":134},[128,100023,2592],{"class":166},[128,100025,180],{"class":138},[128,100027,100028],{"class":130,"line":230},[128,100029,99981],{"class":3814},[128,100031,100032],{"class":130,"line":235},[128,100033,100034],{"class":3814},"# [[0. 1. 0. 0.]\n",[128,100036,100037],{"class":130,"line":244},[128,100038,100039],{"class":3814},"#  [0. 0. 1. 0.]\n",[128,100041,100042],{"class":130,"line":287},[128,100043,100044],{"class":3814},"#  [0. 0. 0. 1.]]\n",[72,100046,100048],{"id":100047},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[106,100050,100052],{"className":122,"code":100051,"language":124,"meta":112,"style":112},"#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",[114,100053,100054,100059,100063,100068,100073,100078,100083,100088,100093,100098,100103],{"__ignoreMap":112},[128,100055,100056],{"class":130,"line":131},[128,100057,100058],{"class":3814},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[128,100060,100061],{"class":130,"line":142},[128,100062,99067],{"class":176},[128,100064,100065],{"class":130,"line":156},[128,100066,100067],{"class":176},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[128,100069,100070],{"class":130,"line":163},[128,100071,100072],{"class":176},"参数介绍：\n",[128,100074,100075],{"class":130,"line":183},[128,100076,100077],{"class":176},"start：序列的起始值\n",[128,100079,100080],{"class":130,"line":188},[128,100081,100082],{"class":176},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[128,100084,100085],{"class":130,"line":193},[128,100086,100087],{"class":176},"num：要生长的等步长的样本数量，默认为50\n",[128,100089,100090],{"class":130,"line":206},[128,100091,100092],{"class":176},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[128,100094,100095],{"class":130,"line":221},[128,100096,100097],{"class":176},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[128,100099,100100],{"class":130,"line":230},[128,100101,100102],{"class":176},"dtype：ndarry的数据类型\n",[128,100104,100105],{"class":130,"line":235},[128,100106,99067],{"class":176},[19,100108,100109],{},[5074,100110],{"alt":112,"src":100111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,100113,100114],{},"这里num=是可以省略的",[19,100116,100117],{},"也就是下方两行代码结果是一模一样的",[106,100119,100121],{"className":122,"code":100120,"language":124,"meta":112,"style":112},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[114,100122,100123,100140],{"__ignoreMap":112},[128,100124,100125,100128,100130,100132,100134,100136,100138],{"class":130,"line":131},[128,100126,100127],{"class":138},"np.linspace(",[128,100129,2592],{"class":166},[128,100131,4128],{"class":138},[128,100133,4069],{"class":166},[128,100135,4128],{"class":138},[128,100137,4069],{"class":166},[128,100139,180],{"class":138},[128,100141,100142,100144,100146,100148,100150,100152,100154,100156,100158],{"class":130,"line":142},[128,100143,100127],{"class":138},[128,100145,2592],{"class":166},[128,100147,4128],{"class":138},[128,100149,4069],{"class":166},[128,100151,4128],{"class":138},[128,100153,5267],{"class":266},[128,100155,270],{"class":134},[128,100157,4069],{"class":166},[128,100159,180],{"class":138},[72,100161,100163],{"id":100162},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[106,100165,100167],{"className":122,"code":100166,"language":124,"meta":112,"style":112},"#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",[114,100168,100169,100174,100178,100183,100188,100193,100198,100202,100207,100212,100216],{"__ignoreMap":112},[128,100170,100171],{"class":130,"line":131},[128,100172,100173],{"class":3814},"#logspace函数用于创建一个等比数列，格式如下：\n",[128,100175,100176],{"class":130,"line":142},[128,100177,99067],{"class":176},[128,100179,100180],{"class":130,"line":156},[128,100181,100182],{"class":176},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[128,100184,100185],{"class":130,"line":163},[128,100186,100187],{"class":176},"参数为：\n",[128,100189,100190],{"class":130,"line":183},[128,100191,100192],{"class":176},"start:序列的起始位置为：base**start\n",[128,100194,100195],{"class":130,"line":188},[128,100196,100197],{"class":176},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[128,100199,100200],{"class":130,"line":193},[128,100201,100087],{"class":176},[128,100203,100204],{"class":130,"line":206},[128,100205,100206],{"class":176},"endpoint：是否包含 stop 这个值，默认是 True\n",[128,100208,100209],{"class":130,"line":221},[128,100210,100211],{"class":176},"base：对数的底数，默认是 10（常见对数）\n",[128,100213,100214],{"class":130,"line":230},[128,100215,100102],{"class":176},[128,100217,100218],{"class":130,"line":235},[128,100219,99067],{"class":176},[19,100221,100222],{},[5074,100223],{"alt":112,"src":100224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,100226,100227],{},"logspace()函数中的num参数也是可以不写num=的",[19,100229,100230],{},"endpoint是不可以省略的",[3659,100232,100233],{},"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":112,"searchDepth":142,"depth":142,"links":100235},[100236,100240,100245,100249,100253,100254],{"id":98626,"depth":142,"text":98627,"children":100237},[100238,100239],{"id":98630,"depth":156,"text":98631},{"id":98702,"depth":156,"text":98703},{"id":98734,"depth":142,"text":98735,"children":100241},[100242,100243,100244],{"id":98738,"depth":156,"text":98739},{"id":98920,"depth":156,"text":98921},{"id":98998,"depth":156,"text":98999},{"id":99033,"depth":142,"text":99034,"children":100246},[100247,100248],{"id":99037,"depth":156,"text":99038},{"id":99094,"depth":156,"text":99095},{"id":99190,"depth":142,"text":99191,"children":100250},[100251,100252],{"id":99194,"depth":156,"text":99195},{"id":99206,"depth":156,"text":99207},{"id":99240,"depth":142,"text":99241},{"id":99277,"depth":142,"text":99278,"children":100255},[100256,100257,100258,100259,100260,100261,100262,100263],{"id":99281,"depth":156,"text":99282},{"id":99506,"depth":156,"text":99507},{"id":99513,"depth":156,"text":99514},{"id":99722,"depth":156,"text":99723},{"id":99742,"depth":156,"text":99743},{"id":99878,"depth":156,"text":99879},{"id":100047,"depth":156,"text":100048},{"id":100162,"depth":156,"text":100163},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":98618,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":100270,"title":100271,"body":100272,"description":3686,"extension":3687,"meta":100365,"navigation":159,"path":100366,"seo":100367,"stem":100368,"__hash__":100369},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":100273,"toc":100363},[100274,100277,100280,100283,100286,100289,100292,100295,100298,100301,100304,100307,100309,100312,100315,100320,100323,100326,100360],[10,100275,100271],{"id":100276},"_20魔法命令mprun",[19,100278,100279],{},"逐行分析数据内存的使用情况",[19,100281,100282],{},"语法格式：",[19,100284,100285],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,100287,100288],{},"分析结果列如下：",[19,100290,100291],{},"Line行号",[19,100293,100294],{},"Mem usage内存使用大小",[19,100296,100297],{},"increment内存增量",[19,100299,100300],{},"Line content代码内容",[19,100302,100303],{},"补充说明：",[19,100305,100306],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,100308,98573],{},[19,100310,100311],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,100313,100314],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,100316,100317],{},[5074,100318],{"alt":112,"src":100319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,100321,100322],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,100324,100325],{},"这时候需要重新加载模块",[106,100327,100329],{"className":122,"code":100328,"language":124,"meta":112,"style":112},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[114,100330,100331,100336,100343,100348],{"__ignoreMap":112},[128,100332,100333],{"class":130,"line":131},[128,100334,100335],{"class":3814},"#重新加载模块\n",[128,100337,100338,100340],{"class":130,"line":142},[128,100339,135],{"class":134},[128,100341,100342],{"class":138}," importlib\n",[128,100344,100345],{"class":130,"line":156},[128,100346,100347],{"class":138},"importlib.reload(mprun_test)\n",[128,100349,100350,100352,100355,100357],{"class":130,"line":163},[128,100351,4078],{"class":134},[128,100353,100354],{"class":138},"mprun ",[128,100356,4281],{"class":134},[128,100358,100359],{"class":138},"f mprun_test.fun_test mprun_test.fun_test()\n",[3659,100361,100362],{},"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":112,"searchDepth":142,"depth":142,"links":100364},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":100271,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":100371,"title":100372,"body":100373,"description":3686,"extension":3687,"meta":100390,"navigation":159,"path":100391,"seo":100392,"stem":100393,"__hash__":100394},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":100374,"toc":100388},[100375,100378,100383],[10,100376,100372],{"id":100377},"_3一维数组的索引和切片",[19,100379,100380],{},[5074,100381],{"alt":112,"src":100382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,100384,100385],{},[5074,100386],{"alt":112,"src":100387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":112,"searchDepth":142,"depth":142,"links":100389},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":100372,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":100396,"title":100397,"body":100398,"description":3686,"extension":3687,"meta":100881,"navigation":159,"path":100882,"seo":100883,"stem":100884,"__hash__":100885},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":100399,"toc":100879},[100400,100403,100406,100411,100444,100447,100485,100488,100522,100525,100630,100633,100670,100673,100774,100777,100828,100831,100873,100876],[10,100401,100397],{"id":100402},"_4二维数组的索引与切片",[19,100404,100405],{},"①获取指定单个元素",[19,100407,100408],{},[5074,100409],{"alt":112,"src":100410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[106,100412,100414],{"className":122,"code":100413,"language":124,"meta":112,"style":112},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[114,100415,100416,100421,100426,100431],{"__ignoreMap":112},[128,100417,100418],{"class":130,"line":131},[128,100419,100420],{"class":3814},"#获取元素9\n",[128,100422,100423],{"class":130,"line":142},[128,100424,100425],{"class":3814},"#先获取所在行，再获取所在列\n",[128,100427,100428],{"class":130,"line":156},[128,100429,100430],{"class":3814},"#数组[行索引号，列索引号]\n",[128,100432,100433,100436,100438,100440,100442],{"class":130,"line":163},[128,100434,100435],{"class":138},"a[",[128,100437,2592],{"class":166},[128,100439,4128],{"class":138},[128,100441,409],{"class":166},[128,100443,2376],{"class":138},[19,100445,100446],{},"②获取整行元素",[106,100448,100450],{"className":122,"code":100449,"language":124,"meta":112,"style":112},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[114,100451,100452,100457,100462,100470,100475],{"__ignoreMap":112},[128,100453,100454],{"class":130,"line":131},[128,100455,100456],{"class":3814},"#获取整行 数组[行索引号]\n",[128,100458,100459],{"class":130,"line":142},[128,100460,100461],{"class":3814},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[128,100463,100464,100466,100468],{"class":130,"line":156},[128,100465,100435],{"class":138},[128,100467,409],{"class":166},[128,100469,2376],{"class":138},[128,100471,100472],{"class":130,"line":163},[128,100473,100474],{"class":3814},"#也可以负索引获取一行\n",[128,100476,100477,100479,100481,100483],{"class":130,"line":183},[128,100478,100435],{"class":138},[128,100480,4281],{"class":134},[128,100482,2592],{"class":166},[128,100484,2376],{"class":138},[19,100486,100487],{},"③获取整列元素",[106,100489,100491],{"className":122,"code":100490,"language":124,"meta":112,"style":112},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[114,100492,100493,100498,100507,100512],{"__ignoreMap":112},[128,100494,100495],{"class":130,"line":131},[128,100496,100497],{"class":3814},"#获取整列 数组名[:,列索引]\n",[128,100499,100500,100503,100505],{"class":130,"line":142},[128,100501,100502],{"class":138},"a[:,",[128,100504,409],{"class":166},[128,100506,2376],{"class":138},[128,100508,100509],{"class":130,"line":156},[128,100510,100511],{"class":3814},"#也可以负索引获取一列\n",[128,100513,100514,100516,100518,100520],{"class":130,"line":163},[128,100515,100502],{"class":138},[128,100517,4281],{"class":134},[128,100519,2592],{"class":166},[128,100521,2376],{"class":138},[19,100523,100524],{},"④部分行部分列的元素",[106,100526,100528],{"className":122,"code":100527,"language":124,"meta":112,"style":112},"#部分行部分列 数组名[行切片，列切片]\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",[114,100529,100530,100535,100545,100549,100553,100558,100563,100567,100579,100583,100587,100592,100597,100602,100607,100611,100616],{"__ignoreMap":112},[128,100531,100532],{"class":130,"line":131},[128,100533,100534],{"class":3814},"#部分行部分列 数组名[行切片，列切片]\n",[128,100536,100537,100540,100542],{"class":130,"line":142},[128,100538,100539],{"class":138},"a[:",[128,100541,409],{"class":166},[128,100543,100544],{"class":138},",:]\n",[128,100546,100547],{"class":130,"line":156},[128,100548,96934],{"class":3814},[128,100550,100551],{"class":130,"line":163},[128,100552,97298],{"class":176},[128,100554,100555],{"class":130,"line":183},[128,100556,100557],{"class":176},"array([[ 1,  2,  3,  4,  5,  6],\n",[128,100559,100560],{"class":130,"line":188},[128,100561,100562],{"class":176},"       [ 7,  8,  9, 10, 11, 12]])\n",[128,100564,100565],{"class":130,"line":193},[128,100566,97298],{"class":176},[128,100568,100569,100571,100573,100575,100577],{"class":130,"line":206},[128,100570,100502],{"class":138},[128,100572,2592],{"class":166},[128,100574,4607],{"class":138},[128,100576,4043],{"class":166},[128,100578,2376],{"class":138},[128,100580,100581],{"class":130,"line":221},[128,100582,96934],{"class":3814},[128,100584,100585],{"class":130,"line":230},[128,100586,97298],{"class":176},[128,100588,100589],{"class":130,"line":235},[128,100590,100591],{"class":176},"array([[ 2,  3,  4],\n",[128,100593,100594],{"class":130,"line":244},[128,100595,100596],{"class":176},"       [ 8,  9, 10],\n",[128,100598,100599],{"class":130,"line":287},[128,100600,100601],{"class":176},"       [14, 15, 16],\n",[128,100603,100604],{"class":130,"line":301},[128,100605,100606],{"class":176},"       [20, 21, 22]])\n",[128,100608,100609],{"class":130,"line":310},[128,100610,97298],{"class":176},[128,100612,100613],{"class":130,"line":323},[128,100614,100615],{"class":3814},"#对列行同时进行切片，使用了step参数\n",[128,100617,100618,100621,100623,100626,100628],{"class":130,"line":330},[128,100619,100620],{"class":138},"a[::",[128,100622,409],{"class":166},[128,100624,100625],{"class":138},",::",[128,100627,409],{"class":166},[128,100629,2376],{"class":138},[19,100631,100632],{},"⑤同时获取两个元素",[106,100634,100636],{"className":122,"code":100635,"language":124,"meta":112,"style":112},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[114,100637,100638,100643,100648],{"__ignoreMap":112},[128,100639,100640],{"class":130,"line":131},[128,100641,100642],{"class":3814},"#同时获取第三行第二列，第四行第一列\n",[128,100644,100645],{"class":130,"line":142},[128,100646,100647],{"class":3814},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[128,100649,100650,100653,100655,100657,100659,100661,100663,100665,100667],{"class":130,"line":156},[128,100651,100652],{"class":138},"a[(",[128,100654,409],{"class":166},[128,100656,4128],{"class":138},[128,100658,3827],{"class":166},[128,100660,45633],{"class":138},[128,100662,2592],{"class":166},[128,100664,4128],{"class":138},[128,100666,2452],{"class":166},[128,100668,100669],{"class":138},")]\n",[19,100671,100672],{},"⑥切片，对行进行反向获取",[106,100674,100676],{"className":122,"code":100675,"language":124,"meta":112,"style":112},"#切片 对所有行进行反向获取\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",[114,100677,100678,100683,100693,100697,100701,100706,100711,100716,100721,100725,100730,100746,100750,100755,100760,100765,100770],{"__ignoreMap":112},[128,100679,100680],{"class":130,"line":131},[128,100681,100682],{"class":3814},"#切片 对所有行进行反向获取\n",[128,100684,100685,100687,100689,100691],{"class":130,"line":142},[128,100686,100620],{"class":138},[128,100688,4281],{"class":134},[128,100690,2592],{"class":166},[128,100692,2376],{"class":138},[128,100694,100695],{"class":130,"line":156},[128,100696,96934],{"class":3814},[128,100698,100699],{"class":130,"line":163},[128,100700,97298],{"class":176},[128,100702,100703],{"class":130,"line":183},[128,100704,100705],{"class":176},"array([[19, 20, 21, 22, 23, 24],\n",[128,100707,100708],{"class":130,"line":188},[128,100709,100710],{"class":176},"       [13, 14, 15, 16, 17, 18],\n",[128,100712,100713],{"class":130,"line":193},[128,100714,100715],{"class":176},"       [ 7,  8,  9, 10, 11, 12],\n",[128,100717,100718],{"class":130,"line":206},[128,100719,100720],{"class":176},"       [ 1,  2,  3,  4,  5,  6]])\n",[128,100722,100723],{"class":130,"line":221},[128,100724,97298],{"class":176},[128,100726,100727],{"class":130,"line":230},[128,100728,100729],{"class":3814},"#对行列都进行反向切片获取\n",[128,100731,100732,100734,100736,100738,100740,100742,100744],{"class":130,"line":235},[128,100733,100620],{"class":138},[128,100735,4281],{"class":134},[128,100737,2592],{"class":166},[128,100739,100625],{"class":138},[128,100741,4281],{"class":134},[128,100743,2592],{"class":166},[128,100745,2376],{"class":138},[128,100747,100748],{"class":130,"line":244},[128,100749,97298],{"class":176},[128,100751,100752],{"class":130,"line":287},[128,100753,100754],{"class":176},"array([[24, 23, 22, 21, 20, 19],\n",[128,100756,100757],{"class":130,"line":301},[128,100758,100759],{"class":176},"       [18, 17, 16, 15, 14, 13],\n",[128,100761,100762],{"class":130,"line":310},[128,100763,100764],{"class":176},"       [12, 11, 10,  9,  8,  7],\n",[128,100766,100767],{"class":130,"line":323},[128,100768,100769],{"class":176},"       [ 6,  5,  4,  3,  2,  1]])\n",[128,100771,100772],{"class":130,"line":330},[128,100773,97298],{"class":176},[19,100775,100776],{},"⑦修改元素",[106,100778,100780],{"className":122,"code":100779,"language":124,"meta":112,"style":112},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[114,100781,100782,100787,100805,100810],{"__ignoreMap":112},[128,100783,100784],{"class":130,"line":131},[128,100785,100786],{"class":3814},"#获取前两行和前两列\n",[128,100788,100789,100792,100794,100796,100798,100801,100803],{"class":130,"line":142},[128,100790,100791],{"class":138},"sub_a",[128,100793,270],{"class":134},[128,100795,100539],{"class":138},[128,100797,409],{"class":166},[128,100799,100800],{"class":138},",:",[128,100802,409],{"class":166},[128,100804,2376],{"class":138},[128,100806,100807],{"class":130,"line":156},[128,100808,100809],{"class":3814},"#修改sub_a第一个元素的值\n",[128,100811,100812,100815,100817,100819,100821,100823,100825],{"class":130,"line":163},[128,100813,100814],{"class":138},"sub_a[",[128,100816,2452],{"class":166},[128,100818,4128],{"class":138},[128,100820,2452],{"class":166},[128,100822,1388],{"class":138},[128,100824,270],{"class":134},[128,100826,100827],{"class":166},"100\n",[19,100829,100830],{},"⑧数组复制copy()",[106,100832,100834],{"className":122,"code":100833,"language":124,"meta":112,"style":112},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[114,100835,100836,100841,100851,100856],{"__ignoreMap":112},[128,100837,100838],{"class":130,"line":131},[128,100839,100840],{"class":3814},"#数组复制\n",[128,100842,100843,100846,100848],{"class":130,"line":142},[128,100844,100845],{"class":138},"copy_a",[128,100847,270],{"class":134},[128,100849,100850],{"class":138},"np.copy(sub_a)\n",[128,100852,100853],{"class":130,"line":156},[128,100854,100855],{"class":3814},"#修改copy_a后不影响原数组\n",[128,100857,100858,100861,100863,100865,100867,100869,100871],{"class":130,"line":163},[128,100859,100860],{"class":138},"copy_a[",[128,100862,2452],{"class":166},[128,100864,4128],{"class":138},[128,100866,2452],{"class":166},[128,100868,1388],{"class":138},[128,100870,270],{"class":134},[128,100872,100827],{"class":166},[19,100874,100875],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[3659,100877,100878],{},"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":112,"searchDepth":142,"depth":142,"links":100880},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":100397,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":100887,"title":100888,"body":100889,"description":3686,"extension":3687,"meta":101381,"navigation":159,"path":101382,"seo":101383,"stem":101384,"__hash__":101385},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":100890,"toc":101373},[100891,100894,100898,100901,100904,100957,100960,100985,100988,101007,101027,101030,101046,101050,101096,101100,101142,101146,101149,101152,101155,101158,101161,101223,101283,101287,101290,101347,101351,101356,101365,101370],[10,100892,100888],{"id":100893},"_5改变数组的维度",[14,100895,100897],{"id":100896},"_51-使用reshape","5.1 使用reshape()",[19,100899,100900],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,100902,100903],{},"①一维数组转换为二维数组",[106,100905,100907],{"className":122,"code":100906,"language":124,"meta":112,"style":112},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[114,100908,100909,100925,100930,100935,100940],{"__ignoreMap":112},[128,100910,100911,100913,100915,100917,100919,100921,100923],{"class":130,"line":131},[128,100912,3989],{"class":138},[128,100914,270],{"class":134},[128,100916,96372],{"class":138},[128,100918,2592],{"class":166},[128,100920,4128],{"class":138},[128,100922,4272],{"class":166},[128,100924,180],{"class":138},[128,100926,100927],{"class":130,"line":142},[128,100928,100929],{"class":3814},"#将一维数组进行转换\n",[128,100931,100932],{"class":130,"line":156},[128,100933,100934],{"class":3814},"#注意点：元素个数不可以变\n",[128,100936,100937],{"class":130,"line":163},[128,100938,100939],{"class":3814},"#转换维度要保持一致，不一致就异常！！！\n",[128,100941,100942,100944,100946,100949,100951,100953,100955],{"class":130,"line":183},[128,100943,96676],{"class":138},[128,100945,270],{"class":134},[128,100947,100948],{"class":138},"a.reshape(",[128,100950,409],{"class":166},[128,100952,4128],{"class":138},[128,100954,4094],{"class":166},[128,100956,180],{"class":138},[19,100958,100959],{},"②一维数组转换为三维数组",[106,100961,100963],{"className":122,"code":100962,"language":124,"meta":112,"style":112},"aaa=a.reshape(2,3,2)\n",[114,100964,100965],{"__ignoreMap":112},[128,100966,100967,100969,100971,100973,100975,100977,100979,100981,100983],{"class":130,"line":131},[128,100968,98890],{"class":138},[128,100970,270],{"class":134},[128,100972,100948],{"class":138},[128,100974,409],{"class":166},[128,100976,4128],{"class":138},[128,100978,3827],{"class":166},[128,100980,4128],{"class":138},[128,100982,409],{"class":166},[128,100984,180],{"class":138},[19,100986,100987],{},"③二维数组转化为一维数组",[106,100989,100991],{"className":122,"code":100990,"language":124,"meta":112,"style":112},"#知道元素个数：\naa.reshape(12)\n",[114,100992,100993,100998],{"__ignoreMap":112},[128,100994,100995],{"class":130,"line":131},[128,100996,100997],{"class":3814},"#知道元素个数：\n",[128,100999,101000,101003,101005],{"class":130,"line":142},[128,101001,101002],{"class":138},"aa.reshape(",[128,101004,4247],{"class":166},[128,101006,180],{"class":138},[106,101008,101010],{"className":122,"code":101009,"language":124,"meta":112,"style":112},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[114,101011,101012,101017],{"__ignoreMap":112},[128,101013,101014],{"class":130,"line":131},[128,101015,101016],{"class":3814},"#不知道元素个数，参数传递-1\n",[128,101018,101019,101021,101023,101025],{"class":130,"line":142},[128,101020,101002],{"class":138},[128,101022,4281],{"class":134},[128,101024,2592],{"class":166},[128,101026,180],{"class":138},[19,101028,101029],{},"④三维数组转换为一维数组",[106,101031,101033],{"className":122,"code":101032,"language":124,"meta":112,"style":112},"aaa.reshape(-1)\n",[114,101034,101035],{"__ignoreMap":112},[128,101036,101037,101040,101042,101044],{"class":130,"line":131},[128,101038,101039],{"class":138},"aaa.reshape(",[128,101041,4281],{"class":134},[128,101043,2592],{"class":166},[128,101045,180],{"class":138},[14,101047,101049],{"id":101048},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[106,101051,101053],{"className":122,"code":101052,"language":124,"meta":112,"style":112},"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",[114,101054,101055,101082,101087,101091],{"__ignoreMap":112},[128,101056,101057,101059,101061,101063,101065,101067,101069,101071,101073,101075,101077,101079],{"class":130,"line":131},[128,101058,96676],{"class":138},[128,101060,270],{"class":134},[128,101062,96372],{"class":138},[128,101064,2592],{"class":166},[128,101066,4128],{"class":138},[128,101068,4272],{"class":166},[128,101070,96377],{"class":138},[128,101072,409],{"class":166},[128,101074,4128],{"class":138},[128,101076,4094],{"class":166},[128,101078,4179],{"class":138},[128,101080,101081],{"class":3814},"#转换为2行6列的数组\n",[128,101083,101084],{"class":130,"line":142},[128,101085,101086],{"class":138},"aa.revel()\n",[128,101088,101089],{"class":130,"line":156},[128,101090,96934],{"class":3814},[128,101092,101093],{"class":130,"line":163},[128,101094,101095],{"class":3814},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,101097,101099],{"id":101098},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[106,101101,101103],{"className":122,"code":101102,"language":124,"meta":112,"style":112},"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",[114,101104,101105,101129,101134,101138],{"__ignoreMap":112},[128,101106,101107,101109,101111,101113,101115,101117,101119,101121,101123,101125,101127],{"class":130,"line":131},[128,101108,96676],{"class":138},[128,101110,270],{"class":134},[128,101112,96372],{"class":138},[128,101114,2592],{"class":166},[128,101116,4128],{"class":138},[128,101118,4272],{"class":166},[128,101120,96377],{"class":138},[128,101122,409],{"class":166},[128,101124,4128],{"class":138},[128,101126,4094],{"class":166},[128,101128,180],{"class":138},[128,101130,101131],{"class":130,"line":142},[128,101132,101133],{"class":138},"aa.flatten()\n",[128,101135,101136],{"class":130,"line":156},[128,101137,96934],{"class":3814},[128,101139,101140],{"class":130,"line":163},[128,101141,101095],{"class":3814},[14,101143,101145],{"id":101144},"_54-使用resize","5.4 使用resize()",[19,101147,101148],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,101150,101151],{},"通过resize方法可以改变数组的维度",[19,101153,101154],{},"#resize修改数组维度",[19,101156,101157],{},"#以元组的形式指定形状",[19,101159,101160],{},"#改变的是原数组",[106,101162,101164],{"className":122,"code":101163,"language":124,"meta":112,"style":112},"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",[114,101165,101166,101182,101202,101215,101219],{"__ignoreMap":112},[128,101167,101168,101170,101172,101174,101176,101178,101180],{"class":130,"line":131},[128,101169,3989],{"class":138},[128,101171,270],{"class":134},[128,101173,96372],{"class":138},[128,101175,2592],{"class":166},[128,101177,4128],{"class":138},[128,101179,4272],{"class":166},[128,101181,180],{"class":138},[128,101183,101184,101187,101189,101191,101193,101195,101197,101199],{"class":130,"line":142},[128,101185,101186],{"class":138},"a.shape",[128,101188,270],{"class":134},[128,101190,253],{"class":138},[128,101192,409],{"class":166},[128,101194,4128],{"class":138},[128,101196,4094],{"class":166},[128,101198,4179],{"class":138},[128,101200,101201],{"class":3814},"#改变了原数组\n",[128,101203,101204,101206,101208,101211,101213],{"class":130,"line":156},[128,101205,3989],{"class":138},[128,101207,270],{"class":134},[128,101209,101210],{"class":138},"resize((",[128,101212,4247],{"class":166},[128,101214,3034],{"class":138},[128,101216,101217],{"class":130,"line":163},[128,101218,96934],{"class":3814},[128,101220,101221],{"class":130,"line":183},[128,101222,101095],{"class":3814},[106,101224,101226],{"className":122,"code":101225,"language":124,"meta":112,"style":112},"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",[114,101227,101228,101241,101245,101249,101254,101259,101264,101269,101274,101279],{"__ignoreMap":112},[128,101229,101230,101233,101235,101237,101239],{"class":130,"line":131},[128,101231,101232],{"class":138},"a.resize((",[128,101234,4094],{"class":166},[128,101236,4128],{"class":138},[128,101238,409],{"class":166},[128,101240,3034],{"class":138},[128,101242,101243],{"class":130,"line":142},[128,101244,96934],{"class":3814},[128,101246,101247],{"class":130,"line":156},[128,101248,97298],{"class":176},[128,101250,101251],{"class":130,"line":163},[128,101252,101253],{"class":176},"array([[ 1,  2],\n",[128,101255,101256],{"class":130,"line":183},[128,101257,101258],{"class":176},"       [ 3,  4],\n",[128,101260,101261],{"class":130,"line":188},[128,101262,101263],{"class":176},"       [ 5,  6],\n",[128,101265,101266],{"class":130,"line":193},[128,101267,101268],{"class":176},"       [ 7,  8],\n",[128,101270,101271],{"class":130,"line":206},[128,101272,101273],{"class":176},"       [ 9, 10],\n",[128,101275,101276],{"class":130,"line":221},[128,101277,101278],{"class":176},"       [11, 12]])\n",[128,101280,101281],{"class":130,"line":230},[128,101282,97298],{"class":176},[14,101284,101286],{"id":101285},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,101288,101289],{},"改变了原数组",[106,101291,101293],{"className":122,"code":101292,"language":124,"meta":112,"style":112},"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",[114,101294,101295,101311,101327,101331,101335,101339,101343],{"__ignoreMap":112},[128,101296,101297,101299,101301,101303,101305,101307,101309],{"class":130,"line":131},[128,101298,3989],{"class":138},[128,101300,270],{"class":134},[128,101302,96372],{"class":138},[128,101304,2592],{"class":166},[128,101306,4128],{"class":138},[128,101308,4272],{"class":166},[128,101310,180],{"class":138},[128,101312,101313,101315,101317,101319,101321,101323,101325],{"class":130,"line":142},[128,101314,101186],{"class":138},[128,101316,270],{"class":134},[128,101318,253],{"class":138},[128,101320,409],{"class":166},[128,101322,4128],{"class":138},[128,101324,4094],{"class":166},[128,101326,180],{"class":138},[128,101328,101329],{"class":130,"line":156},[128,101330,96934],{"class":3814},[128,101332,101333],{"class":130,"line":163},[128,101334,97298],{"class":176},[128,101336,101337],{"class":130,"line":183},[128,101338,100557],{"class":176},[128,101340,101341],{"class":130,"line":188},[128,101342,100562],{"class":176},[128,101344,101345],{"class":130,"line":193},[128,101346,97298],{"class":176},[14,101348,101350],{"id":101349},"_56-重要比较","5.6 重要比较：",[19,101352,101353],{},[5074,101354],{"alt":112,"src":101355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,101357,101358,101359,101361,101362,101364],{},"口诀：NumPy 函数要么用 ",[114,101360,99332],{},"，要么用 ",[114,101363,34965],{},"，创建结构用 shape，造数据用 size",[19,101366,101367],{},[5074,101368],{"alt":112,"src":101369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[3659,101371,101372],{},"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":112,"searchDepth":142,"depth":142,"links":101374},[101375,101376,101377,101378,101379,101380],{"id":100896,"depth":142,"text":100897},{"id":101048,"depth":142,"text":101049},{"id":101098,"depth":142,"text":101099},{"id":101144,"depth":142,"text":101145},{"id":101285,"depth":142,"text":101286},{"id":101349,"depth":142,"text":101350},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":100888,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":101387,"title":101388,"body":101389,"description":3686,"extension":3687,"meta":102461,"navigation":159,"path":102462,"seo":102463,"stem":102464,"__hash__":102465},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":101390,"toc":102455},[101391,101394,101398,101401,101404,101407,101472,101475,101515,101518,101600,101603,101608,101630,101632,101637,101642,101645,101648,101803,101806,102008,102012,102015,102018,102086,102088,102093,102096,102099,102179,102183,102186,102188,102261,102263,102268,102270,102350,102354,102357,102360,102363,102366,102369,102372,102452],[10,101392,101388],{"id":101393},"_6数组的拼接",[14,101395,101397],{"id":101396},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,101399,101400],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,101402,101403],{},"函数内部传两个数列构成的数列或者元组",[19,101405,101406],{},"①一维数组的拼接",[106,101408,101410],{"className":122,"code":101409,"language":124,"meta":112,"style":112},"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",[114,101411,101412,101432,101452,101457,101462,101467],{"__ignoreMap":112},[128,101413,101414,101416,101418,101420,101422,101424,101426,101428,101430],{"class":130,"line":131},[128,101415,3989],{"class":138},[128,101417,270],{"class":134},[128,101419,96394],{"class":138},[128,101421,2592],{"class":166},[128,101423,4128],{"class":138},[128,101425,409],{"class":166},[128,101427,4128],{"class":138},[128,101429,3827],{"class":166},[128,101431,2595],{"class":138},[128,101433,101434,101436,101438,101440,101442,101444,101446,101448,101450],{"class":130,"line":142},[128,101435,4013],{"class":138},[128,101437,270],{"class":134},[128,101439,96394],{"class":138},[128,101441,4043],{"class":166},[128,101443,4128],{"class":138},[128,101445,4069],{"class":166},[128,101447,4128],{"class":138},[128,101449,4094],{"class":166},[128,101451,2595],{"class":138},[128,101453,101454],{"class":130,"line":156},[128,101455,101456],{"class":3814},"#调用concatenate进行数组拼接\n",[128,101458,101459],{"class":130,"line":163},[128,101460,101461],{"class":138},"np.concatenate((a,b))\n",[128,101463,101464],{"class":130,"line":183},[128,101465,101466],{"class":3814},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[128,101468,101469],{"class":130,"line":188},[128,101470,101471],{"class":3814},"#np.concatenate([a,b])\n",[19,101473,101474],{},"②一维多个数组拼接",[106,101476,101478],{"className":122,"code":101477,"language":124,"meta":112,"style":112},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[114,101479,101480,101485,101505,101510],{"__ignoreMap":112},[128,101481,101482],{"class":130,"line":131},[128,101483,101484],{"class":3814},"#也可以多个数组进行拼接\n",[128,101486,101487,101489,101491,101493,101495,101497,101499,101501,101503],{"class":130,"line":142},[128,101488,4038],{"class":138},[128,101490,270],{"class":134},[128,101492,96394],{"class":138},[128,101494,4196],{"class":166},[128,101496,4128],{"class":138},[128,101498,4222],{"class":166},[128,101500,4128],{"class":138},[128,101502,4272],{"class":166},[128,101504,2595],{"class":138},[128,101506,101507],{"class":130,"line":156},[128,101508,101509],{"class":138},"c\n",[128,101511,101512],{"class":130,"line":163},[128,101513,101514],{"class":138},"np.concatenate((a,b,c))\n",[19,101516,101517],{},"③二维数组拼接",[106,101519,101521],{"className":122,"code":101520,"language":124,"meta":112,"style":112},"#二维数组使用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",[114,101522,101523,101528,101552,101577,101582,101587],{"__ignoreMap":112},[128,101524,101525],{"class":130,"line":131},[128,101526,101527],{"class":3814},"#二维数组使用concatenate进行拼接\n",[128,101529,101530,101532,101534,101536,101538,101540,101542,101544,101546,101548,101550],{"class":130,"line":142},[128,101531,96676],{"class":138},[128,101533,270],{"class":134},[128,101535,96372],{"class":138},[128,101537,2592],{"class":166},[128,101539,4128],{"class":138},[128,101541,4272],{"class":166},[128,101543,96377],{"class":138},[128,101545,3827],{"class":166},[128,101547,4128],{"class":138},[128,101549,4043],{"class":166},[128,101551,180],{"class":138},[128,101553,101554,101557,101559,101561,101563,101565,101567,101569,101571,101573,101575],{"class":130,"line":156},[128,101555,101556],{"class":138},"bb",[128,101558,270],{"class":134},[128,101560,96372],{"class":138},[128,101562,4087],{"class":166},[128,101564,4128],{"class":138},[128,101566,4391],{"class":166},[128,101568,96377],{"class":138},[128,101570,3827],{"class":166},[128,101572,4128],{"class":138},[128,101574,4043],{"class":166},[128,101576,180],{"class":138},[128,101578,101579],{"class":130,"line":163},[128,101580,101581],{"class":3814},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[128,101583,101584],{"class":130,"line":183},[128,101585,101586],{"class":3814},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[128,101588,101589,101592,101594,101596,101598],{"class":130,"line":188},[128,101590,101591],{"class":138},"np.concatenate((aa,bb),",[128,101593,50899],{"class":266},[128,101595,270],{"class":134},[128,101597,2452],{"class":166},[128,101599,180],{"class":138},[19,101601,101602],{},"结果：",[19,101604,101605],{},[5074,101606],{"alt":112,"src":101607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[106,101609,101611],{"className":122,"code":101610,"language":124,"meta":112,"style":112},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[114,101612,101613,101618],{"__ignoreMap":112},[128,101614,101615],{"class":130,"line":131},[128,101616,101617],{"class":3814},"#指定axis为1进行拼接\n",[128,101619,101620,101622,101624,101626,101628],{"class":130,"line":142},[128,101621,101591],{"class":138},[128,101623,50899],{"class":266},[128,101625,270],{"class":134},[128,101627,2592],{"class":166},[128,101629,180],{"class":138},[19,101631,101602],{},[19,101633,101634],{},[5074,101635],{"alt":112,"src":101636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,101638,101639],{},[3903,101640,101641],{},"二维数组总结：0竖着方向，1横着方向",[19,101643,101644],{},"④三维数组拼接",[19,101646,101647],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[106,101649,101651],{"className":122,"code":101650,"language":124,"meta":112,"style":112},"#两个三行六列\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",[114,101652,101653,101658,101686,101716,101721,101738,101743,101748,101753,101770,101775,101780,101785,101798],{"__ignoreMap":112},[128,101654,101655],{"class":130,"line":131},[128,101656,101657],{"class":3814},"#两个三行六列\n",[128,101659,101660,101662,101664,101666,101668,101670,101672,101674,101676,101678,101680,101682,101684],{"class":130,"line":142},[128,101661,98890],{"class":138},[128,101663,270],{"class":134},[128,101665,96372],{"class":138},[128,101667,2592],{"class":166},[128,101669,4128],{"class":138},[128,101671,4075],{"class":166},[128,101673,96377],{"class":138},[128,101675,409],{"class":166},[128,101677,4128],{"class":138},[128,101679,3827],{"class":166},[128,101681,4128],{"class":138},[128,101683,4094],{"class":166},[128,101685,180],{"class":138},[128,101687,101688,101691,101693,101695,101697,101699,101702,101704,101706,101708,101710,101712,101714],{"class":130,"line":156},[128,101689,101690],{"class":138},"bbb",[128,101692,270],{"class":134},[128,101694,96372],{"class":138},[128,101696,4087],{"class":166},[128,101698,4128],{"class":138},[128,101700,101701],{"class":166},"137",[128,101703,96377],{"class":138},[128,101705,409],{"class":166},[128,101707,4128],{"class":138},[128,101709,3827],{"class":166},[128,101711,4128],{"class":138},[128,101713,4094],{"class":166},[128,101715,180],{"class":138},[128,101717,101718],{"class":130,"line":163},[128,101719,101720],{"class":3814},"#axis=0\n",[128,101722,101723,101725,101727,101730,101732,101734,101736],{"class":130,"line":183},[128,101724,4444],{"class":138},[128,101726,270],{"class":134},[128,101728,101729],{"class":138},"np.concatenate((aaa,bbb),",[128,101731,50899],{"class":266},[128,101733,270],{"class":134},[128,101735,2452],{"class":166},[128,101737,180],{"class":138},[128,101739,101740],{"class":130,"line":188},[128,101741,101742],{"class":138},"s.shape\n",[128,101744,101745],{"class":130,"line":193},[128,101746,101747],{"class":3814},"#输出：(4,3,6)\n",[128,101749,101750],{"class":130,"line":206},[128,101751,101752],{"class":3814},"#axis=1\n",[128,101754,101755,101758,101760,101762,101764,101766,101768],{"class":130,"line":221},[128,101756,101757],{"class":138},"ss",[128,101759,270],{"class":134},[128,101761,101729],{"class":138},[128,101763,50899],{"class":266},[128,101765,270],{"class":134},[128,101767,2592],{"class":166},[128,101769,180],{"class":138},[128,101771,101772],{"class":130,"line":230},[128,101773,101774],{"class":138},"ss.shape\n",[128,101776,101777],{"class":130,"line":235},[128,101778,101779],{"class":3814},"#输出：(2,6,6)\n",[128,101781,101782],{"class":130,"line":244},[128,101783,101784],{"class":3814},"#axis=2\n",[128,101786,101787,101789,101791,101793,101795],{"class":130,"line":287},[128,101788,101729],{"class":138},[128,101790,50899],{"class":266},[128,101792,270],{"class":134},[128,101794,409],{"class":166},[128,101796,101797],{"class":138},").shape\n",[128,101799,101800],{"class":130,"line":301},[128,101801,101802],{"class":3814},"#输出：（2，3，12）\n",[19,101804,101805],{},"⑤四维数组拼接",[106,101807,101809],{"className":122,"code":101808,"language":124,"meta":112,"style":112},"#两个三行六列\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",[114,101810,101811,101815,101843,101871,101896,101922,101926,101939,101944,101948,101960,101965,101969,101981,101986,101991,102003],{"__ignoreMap":112},[128,101812,101813],{"class":130,"line":131},[128,101814,101657],{"class":3814},[128,101816,101817,101819,101821,101823,101825,101827,101829,101831,101833,101835,101837,101839,101841],{"class":130,"line":142},[128,101818,98890],{"class":138},[128,101820,270],{"class":134},[128,101822,96372],{"class":138},[128,101824,2592],{"class":166},[128,101826,4128],{"class":138},[128,101828,4075],{"class":166},[128,101830,96377],{"class":138},[128,101832,409],{"class":166},[128,101834,4128],{"class":138},[128,101836,3827],{"class":166},[128,101838,4128],{"class":138},[128,101840,4094],{"class":166},[128,101842,180],{"class":138},[128,101844,101845,101847,101849,101851,101853,101855,101857,101859,101861,101863,101865,101867,101869],{"class":130,"line":156},[128,101846,101690],{"class":138},[128,101848,270],{"class":134},[128,101850,96372],{"class":138},[128,101852,4087],{"class":166},[128,101854,4128],{"class":138},[128,101856,101701],{"class":166},[128,101858,96377],{"class":138},[128,101860,409],{"class":166},[128,101862,4128],{"class":138},[128,101864,3827],{"class":166},[128,101866,4128],{"class":138},[128,101868,4094],{"class":166},[128,101870,180],{"class":138},[128,101872,101873,101876,101878,101880,101882,101884,101886,101888,101890,101892,101894],{"class":130,"line":163},[128,101874,101875],{"class":138},"aaaa",[128,101877,270],{"class":134},[128,101879,101039],{"class":138},[128,101881,409],{"class":166},[128,101883,4128],{"class":138},[128,101885,3827],{"class":166},[128,101887,4128],{"class":138},[128,101889,3827],{"class":166},[128,101891,4128],{"class":138},[128,101893,409],{"class":166},[128,101895,180],{"class":138},[128,101897,101898,101901,101903,101906,101908,101910,101912,101914,101916,101918,101920],{"class":130,"line":183},[128,101899,101900],{"class":138},"bbbb",[128,101902,270],{"class":134},[128,101904,101905],{"class":138},"bbb.reshape(",[128,101907,409],{"class":166},[128,101909,4128],{"class":138},[128,101911,3827],{"class":166},[128,101913,4128],{"class":138},[128,101915,3827],{"class":166},[128,101917,4128],{"class":138},[128,101919,409],{"class":166},[128,101921,180],{"class":138},[128,101923,101924],{"class":130,"line":188},[128,101925,101720],{"class":3814},[128,101927,101928,101931,101933,101935,101937],{"class":130,"line":193},[128,101929,101930],{"class":138},"np.concatenate((aaaa,bbbb),",[128,101932,50899],{"class":266},[128,101934,270],{"class":134},[128,101936,2452],{"class":166},[128,101938,101797],{"class":138},[128,101940,101941],{"class":130,"line":206},[128,101942,101943],{"class":3814},"#结果：（4，3，3，2）\n",[128,101945,101946],{"class":130,"line":221},[128,101947,101752],{"class":3814},[128,101949,101950,101952,101954,101956,101958],{"class":130,"line":230},[128,101951,101930],{"class":138},[128,101953,50899],{"class":266},[128,101955,270],{"class":134},[128,101957,2592],{"class":166},[128,101959,101797],{"class":138},[128,101961,101962],{"class":130,"line":235},[128,101963,101964],{"class":3814},"#结果：（2，6，3，2）\n",[128,101966,101967],{"class":130,"line":244},[128,101968,101784],{"class":3814},[128,101970,101971,101973,101975,101977,101979],{"class":130,"line":287},[128,101972,101930],{"class":138},[128,101974,50899],{"class":266},[128,101976,270],{"class":134},[128,101978,409],{"class":166},[128,101980,101797],{"class":138},[128,101982,101983],{"class":130,"line":301},[128,101984,101985],{"class":3814},"#结果：（2，3，6，2）\n",[128,101987,101988],{"class":130,"line":310},[128,101989,101990],{"class":3814},"#axis=3\n",[128,101992,101993,101995,101997,101999,102001],{"class":130,"line":323},[128,101994,101930],{"class":138},[128,101996,50899],{"class":266},[128,101998,270],{"class":134},[128,102000,3827],{"class":166},[128,102002,101797],{"class":138},[128,102004,102005],{"class":130,"line":330},[128,102006,102007],{"class":3814},"#结果：（2，3，3，4）\n",[14,102009,102011],{"id":102010},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,102013,102014],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,102016,102017],{},"①二维数组",[106,102019,102021],{"className":122,"code":102020,"language":124,"meta":112,"style":112},"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",[114,102022,102023,102047,102071,102076,102081],{"__ignoreMap":112},[128,102024,102025,102027,102029,102031,102033,102035,102037,102039,102041,102043,102045],{"class":130,"line":131},[128,102026,96676],{"class":138},[128,102028,270],{"class":134},[128,102030,96372],{"class":138},[128,102032,2592],{"class":166},[128,102034,4128],{"class":138},[128,102036,4272],{"class":166},[128,102038,96377],{"class":138},[128,102040,3827],{"class":166},[128,102042,4128],{"class":138},[128,102044,4043],{"class":166},[128,102046,180],{"class":138},[128,102048,102049,102051,102053,102055,102057,102059,102061,102063,102065,102067,102069],{"class":130,"line":142},[128,102050,101556],{"class":138},[128,102052,270],{"class":134},[128,102054,96372],{"class":138},[128,102056,4087],{"class":166},[128,102058,4128],{"class":138},[128,102060,4391],{"class":166},[128,102062,96377],{"class":138},[128,102064,3827],{"class":166},[128,102066,4128],{"class":138},[128,102068,4043],{"class":166},[128,102070,180],{"class":138},[128,102072,102073],{"class":130,"line":156},[128,102074,102075],{"class":138},"np.hstack((aa,bb))\n",[128,102077,102078],{"class":130,"line":163},[128,102079,102080],{"class":3814},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[128,102082,102083],{"class":130,"line":183},[128,102084,102085],{"class":3814},"#np.hstack([aa,bb])\n",[19,102087,101602],{},[19,102089,102090],{},[5074,102091],{"alt":112,"src":102092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,102094,102095],{},"等效于concatenate()函数中axis=1时的情况",[19,102097,102098],{},"②三维数组",[106,102100,102102],{"className":122,"code":102101,"language":124,"meta":112,"style":112},"#两个三行六列\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",[114,102103,102104,102108,102136,102164,102169,102174],{"__ignoreMap":112},[128,102105,102106],{"class":130,"line":131},[128,102107,101657],{"class":3814},[128,102109,102110,102112,102114,102116,102118,102120,102122,102124,102126,102128,102130,102132,102134],{"class":130,"line":142},[128,102111,98890],{"class":138},[128,102113,270],{"class":134},[128,102115,96372],{"class":138},[128,102117,2592],{"class":166},[128,102119,4128],{"class":138},[128,102121,4075],{"class":166},[128,102123,96377],{"class":138},[128,102125,409],{"class":166},[128,102127,4128],{"class":138},[128,102129,3827],{"class":166},[128,102131,4128],{"class":138},[128,102133,4094],{"class":166},[128,102135,180],{"class":138},[128,102137,102138,102140,102142,102144,102146,102148,102150,102152,102154,102156,102158,102160,102162],{"class":130,"line":156},[128,102139,101690],{"class":138},[128,102141,270],{"class":134},[128,102143,96372],{"class":138},[128,102145,4087],{"class":166},[128,102147,4128],{"class":138},[128,102149,101701],{"class":166},[128,102151,96377],{"class":138},[128,102153,409],{"class":166},[128,102155,4128],{"class":138},[128,102157,3827],{"class":166},[128,102159,4128],{"class":138},[128,102161,4094],{"class":166},[128,102163,180],{"class":138},[128,102165,102166],{"class":130,"line":163},[128,102167,102168],{"class":3814},"#使用hstack\n",[128,102170,102171],{"class":130,"line":183},[128,102172,102173],{"class":138},"np.hstack((aaa,bbb)).shape\n",[128,102175,102176],{"class":130,"line":188},[128,102177,102178],{"class":3814},"#输出：（2，6，6）\n",[14,102180,102182],{"id":102181},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,102184,102185],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,102187,102017],{},[106,102189,102191],{"className":122,"code":102190,"language":124,"meta":112,"style":112},"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",[114,102192,102193,102217,102241,102246,102251,102256],{"__ignoreMap":112},[128,102194,102195,102197,102199,102201,102203,102205,102207,102209,102211,102213,102215],{"class":130,"line":131},[128,102196,96676],{"class":138},[128,102198,270],{"class":134},[128,102200,96372],{"class":138},[128,102202,2592],{"class":166},[128,102204,4128],{"class":138},[128,102206,4272],{"class":166},[128,102208,96377],{"class":138},[128,102210,3827],{"class":166},[128,102212,4128],{"class":138},[128,102214,4043],{"class":166},[128,102216,180],{"class":138},[128,102218,102219,102221,102223,102225,102227,102229,102231,102233,102235,102237,102239],{"class":130,"line":142},[128,102220,101556],{"class":138},[128,102222,270],{"class":134},[128,102224,96372],{"class":138},[128,102226,4087],{"class":166},[128,102228,4128],{"class":138},[128,102230,4391],{"class":166},[128,102232,96377],{"class":138},[128,102234,3827],{"class":166},[128,102236,4128],{"class":138},[128,102238,4043],{"class":166},[128,102240,180],{"class":138},[128,102242,102243],{"class":130,"line":156},[128,102244,102245],{"class":3814},"#vstack 垂直方向进行堆叠\n",[128,102247,102248],{"class":130,"line":163},[128,102249,102250],{"class":138},"np.vstack((aa,bb))\n",[128,102252,102253],{"class":130,"line":183},[128,102254,102255],{"class":3814},"#与hstack传的参数类似，等价于：\n",[128,102257,102258],{"class":130,"line":188},[128,102259,102260],{"class":138},"np.vstack([aa,bb])\n",[19,102262,101602],{},[19,102264,102265],{},[5074,102266],{"alt":112,"src":102267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,102269,102098],{},[106,102271,102273],{"className":122,"code":102272,"language":124,"meta":112,"style":112},"#两个三行六列\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",[114,102274,102275,102279,102307,102335,102340,102345],{"__ignoreMap":112},[128,102276,102277],{"class":130,"line":131},[128,102278,101657],{"class":3814},[128,102280,102281,102283,102285,102287,102289,102291,102293,102295,102297,102299,102301,102303,102305],{"class":130,"line":142},[128,102282,98890],{"class":138},[128,102284,270],{"class":134},[128,102286,96372],{"class":138},[128,102288,2592],{"class":166},[128,102290,4128],{"class":138},[128,102292,4075],{"class":166},[128,102294,96377],{"class":138},[128,102296,409],{"class":166},[128,102298,4128],{"class":138},[128,102300,3827],{"class":166},[128,102302,4128],{"class":138},[128,102304,4094],{"class":166},[128,102306,180],{"class":138},[128,102308,102309,102311,102313,102315,102317,102319,102321,102323,102325,102327,102329,102331,102333],{"class":130,"line":156},[128,102310,101690],{"class":138},[128,102312,270],{"class":134},[128,102314,96372],{"class":138},[128,102316,4087],{"class":166},[128,102318,4128],{"class":138},[128,102320,101701],{"class":166},[128,102322,96377],{"class":138},[128,102324,409],{"class":166},[128,102326,4128],{"class":138},[128,102328,3827],{"class":166},[128,102330,4128],{"class":138},[128,102332,4094],{"class":166},[128,102334,180],{"class":138},[128,102336,102337],{"class":130,"line":163},[128,102338,102339],{"class":3814},"#使用vstack\n",[128,102341,102342],{"class":130,"line":183},[128,102343,102344],{"class":138},"np.vstack((aaa,bbb)).shape\n",[128,102346,102347],{"class":130,"line":188},[128,102348,102349],{"class":3814},"#输出：（4，3，6）\n",[14,102351,102353],{"id":102352},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,102355,102356],{},"该方法是三维数组特有的方法",[19,102358,102359],{},"也就是说",[19,102361,102362],{},"一维数组拼接方法用：concatenate()",[19,102364,102365],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,102367,102368],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,102370,102371],{},"四维数组及多维数组只能用concatenate进行拼接",[106,102373,102375],{"className":122,"code":102374,"language":124,"meta":112,"style":112},"#两个三行六列\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",[114,102376,102377,102381,102409,102437,102442,102447],{"__ignoreMap":112},[128,102378,102379],{"class":130,"line":131},[128,102380,101657],{"class":3814},[128,102382,102383,102385,102387,102389,102391,102393,102395,102397,102399,102401,102403,102405,102407],{"class":130,"line":142},[128,102384,98890],{"class":138},[128,102386,270],{"class":134},[128,102388,96372],{"class":138},[128,102390,2592],{"class":166},[128,102392,4128],{"class":138},[128,102394,4075],{"class":166},[128,102396,96377],{"class":138},[128,102398,409],{"class":166},[128,102400,4128],{"class":138},[128,102402,3827],{"class":166},[128,102404,4128],{"class":138},[128,102406,4094],{"class":166},[128,102408,180],{"class":138},[128,102410,102411,102413,102415,102417,102419,102421,102423,102425,102427,102429,102431,102433,102435],{"class":130,"line":156},[128,102412,101690],{"class":138},[128,102414,270],{"class":134},[128,102416,96372],{"class":138},[128,102418,4087],{"class":166},[128,102420,4128],{"class":138},[128,102422,101701],{"class":166},[128,102424,96377],{"class":138},[128,102426,409],{"class":166},[128,102428,4128],{"class":138},[128,102430,3827],{"class":166},[128,102432,4128],{"class":138},[128,102434,4094],{"class":166},[128,102436,180],{"class":138},[128,102438,102439],{"class":130,"line":163},[128,102440,102441],{"class":3814},"#使用dstack\n",[128,102443,102444],{"class":130,"line":183},[128,102445,102446],{"class":138},"np.dstack((aaa,bbb)).shape\n",[128,102448,102449],{"class":130,"line":188},[128,102450,102451],{"class":3814},"#结果：（2，3，12）\n",[3659,102453,102454],{},"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":112,"searchDepth":142,"depth":142,"links":102456},[102457,102458,102459,102460],{"id":101396,"depth":142,"text":101397},{"id":102010,"depth":142,"text":102011},{"id":102181,"depth":142,"text":102182},{"id":102352,"depth":142,"text":102353},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":101388,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":102467,"title":102468,"body":102469,"description":3686,"extension":3687,"meta":102744,"navigation":159,"path":102745,"seo":102746,"stem":102747,"__hash__":102748},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":102470,"toc":102742},[102471,102474,102477,102571,102574,102577,102580,102583,102586,102589,102592,102595,102739],[10,102472,102468],{"id":102473},"_7数组转置",[19,102475,102476],{},"使用transpose()函数",[106,102478,102480],{"className":122,"code":102479,"language":124,"meta":112,"style":112},"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",[114,102481,102482,102492,102516,102521,102526,102531,102536,102544,102548,102552,102557,102562,102567],{"__ignoreMap":112},[128,102483,102484,102486,102488,102490],{"class":130,"line":131},[128,102485,135],{"class":134},[128,102487,34851],{"class":138},[128,102489,279],{"class":134},[128,102491,34856],{"class":138},[128,102493,102494,102496,102498,102500,102502,102504,102506,102508,102510,102512,102514],{"class":130,"line":142},[128,102495,3989],{"class":138},[128,102497,270],{"class":134},[128,102499,35186],{"class":138},[128,102501,2592],{"class":166},[128,102503,4128],{"class":138},[128,102505,4272],{"class":166},[128,102507,96377],{"class":138},[128,102509,4043],{"class":166},[128,102511,4128],{"class":138},[128,102513,3827],{"class":166},[128,102515,180],{"class":138},[128,102517,102518],{"class":130,"line":156},[128,102519,102520],{"class":3814},"#二维数组转置\n",[128,102522,102523],{"class":130,"line":163},[128,102524,102525],{"class":3814},"#调用transpose()函数\n",[128,102527,102528],{"class":130,"line":183},[128,102529,102530],{"class":138},"a.transpose()\n",[128,102532,102533],{"class":130,"line":188},[128,102534,102535],{"class":3814},"#对于二维数组也可以采用.T来实现\n",[128,102537,102538,102541],{"class":130,"line":193},[128,102539,102540],{"class":138},"a.T",[128,102542,102543],{"class":3814},"#与上述代码一样\n",[128,102545,102546],{"class":130,"line":206},[128,102547,96934],{"class":3814},[128,102549,102550],{"class":130,"line":221},[128,102551,97298],{"class":176},[128,102553,102554],{"class":130,"line":230},[128,102555,102556],{"class":176},"array([[ 1,  4,  7, 10],\n",[128,102558,102559],{"class":130,"line":235},[128,102560,102561],{"class":176},"       [ 2,  5,  8, 11],\n",[128,102563,102564],{"class":130,"line":244},[128,102565,102566],{"class":176},"       [ 3,  6,  9, 12]])\n",[128,102568,102569],{"class":130,"line":287},[128,102570,97298],{"class":176},[19,102572,102573],{},"也可以使用np.transpose()的形式",[19,102575,102576],{},"#多维数组进行转置 np.transpose()",[19,102578,102579],{},"#对二维数组也可以使用np.transpose()进行转置",[19,102581,102582],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,102584,102585],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,102587,102588],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,102590,102591],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,102593,102594],{},"四维及以上的数组也是一样的道理",[106,102596,102598],{"className":122,"code":102597,"language":124,"meta":112,"style":112},"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",[114,102599,102600,102628,102633,102638,102643,102661,102666,102698,102703,102708,102713,102734],{"__ignoreMap":112},[128,102601,102602,102604,102606,102608,102610,102612,102614,102616,102618,102620,102622,102624,102626],{"class":130,"line":131},[128,102603,4568],{"class":138},[128,102605,270],{"class":134},[128,102607,96372],{"class":138},[128,102609,2592],{"class":166},[128,102611,4128],{"class":138},[128,102613,4075],{"class":166},[128,102615,96377],{"class":138},[128,102617,3827],{"class":166},[128,102619,4128],{"class":138},[128,102621,4094],{"class":166},[128,102623,4128],{"class":138},[128,102625,409],{"class":166},[128,102627,180],{"class":138},[128,102629,102630],{"class":130,"line":142},[128,102631,102632],{"class":138},"x.shape\n",[128,102634,102635],{"class":130,"line":156},[128,102636,102637],{"class":3814},"#结果：（3,6,2）\n",[128,102639,102640],{"class":130,"line":163},[128,102641,102642],{"class":3814},"#使用np.transpose()进行转置 变为(2,6,3)\n",[128,102644,102645,102648,102650,102652,102654,102656,102658],{"class":130,"line":183},[128,102646,102647],{"class":138},"np.transpose(x,(",[128,102649,409],{"class":166},[128,102651,4128],{"class":138},[128,102653,2592],{"class":166},[128,102655,4128],{"class":138},[128,102657,2452],{"class":166},[128,102659,102660],{"class":138},")).shape\n",[128,102662,102663],{"class":130,"line":188},[128,102664,102665],{"class":3814},"#结果：(2,6,3)\n",[128,102667,102668,102670,102672,102674,102676,102678,102680,102682,102684,102686,102688,102690,102692,102694,102696],{"class":130,"line":193},[128,102669,101875],{"class":138},[128,102671,270],{"class":134},[128,102673,96372],{"class":138},[128,102675,2592],{"class":166},[128,102677,4128],{"class":138},[128,102679,4075],{"class":166},[128,102681,96377],{"class":138},[128,102683,3827],{"class":166},[128,102685,4128],{"class":138},[128,102687,409],{"class":166},[128,102689,4128],{"class":138},[128,102691,2592],{"class":166},[128,102693,4128],{"class":138},[128,102695,4094],{"class":166},[128,102697,180],{"class":138},[128,102699,102700],{"class":130,"line":206},[128,102701,102702],{"class":138},"aaaa.shape\n",[128,102704,102705],{"class":130,"line":221},[128,102706,102707],{"class":3814},"#结果：（3，2，1，6）\n",[128,102709,102710],{"class":130,"line":230},[128,102711,102712],{"class":3814},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[128,102714,102715,102718,102720,102722,102724,102726,102728,102730,102732],{"class":130,"line":235},[128,102716,102717],{"class":138},"np.transpose(aaaa,(",[128,102719,2592],{"class":166},[128,102721,4128],{"class":138},[128,102723,409],{"class":166},[128,102725,4128],{"class":138},[128,102727,2452],{"class":166},[128,102729,4128],{"class":138},[128,102731,3827],{"class":166},[128,102733,102660],{"class":138},[128,102735,102736],{"class":130,"line":244},[128,102737,102738],{"class":3814},"#结果：(2,1,3,6)\n",[3659,102740,102741],{},"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":112,"searchDepth":142,"depth":142,"links":102743},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":102468,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":102750,"title":102751,"body":102752,"description":3686,"extension":3687,"meta":103486,"navigation":159,"path":103487,"seo":103488,"stem":103489,"__hash__":103490},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":102753,"toc":103484},[102754,102757,102760,102763,102766,102769,102772,102775,102778,102887,102890,102893,103481],[10,102755,102751],{"id":102756},"_8数组分割",[19,102758,102759],{},"split分割",[19,102761,102762],{},"numpy.split(ary,indics_or_sections,axis)",[19,102764,102765],{},"解释：",[19,102767,102768],{},"ary:被分割的数组",[19,102770,102771],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,102773,102774],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,102776,102777],{},"①一维数组的分割",[106,102779,102781],{"className":122,"code":102780,"language":124,"meta":112,"style":112},"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",[114,102782,102783,102799,102804,102813,102817,102822,102830,102834,102839,102844,102857,102861,102866,102878,102882],{"__ignoreMap":112},[128,102784,102785,102787,102789,102791,102793,102795,102797],{"class":130,"line":131},[128,102786,3989],{"class":138},[128,102788,270],{"class":134},[128,102790,96372],{"class":138},[128,102792,2592],{"class":166},[128,102794,4128],{"class":138},[128,102796,4170],{"class":166},[128,102798,180],{"class":138},[128,102800,102801],{"class":130,"line":142},[128,102802,102803],{"class":3814},"#如果传入整数，必须能够平分，否则会报错\n",[128,102805,102806,102809,102811],{"class":130,"line":156},[128,102807,102808],{"class":138},"np.split(a,",[128,102810,409],{"class":166},[128,102812,180],{"class":138},[128,102814,102815],{"class":130,"line":163},[128,102816,96934],{"class":3814},[128,102818,102819],{"class":130,"line":183},[128,102820,102821],{"class":3814},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[128,102823,102824,102826,102828],{"class":130,"line":188},[128,102825,102808],{"class":138},[128,102827,4043],{"class":166},[128,102829,180],{"class":138},[128,102831,102832],{"class":130,"line":193},[128,102833,96934],{"class":3814},[128,102835,102836],{"class":130,"line":206},[128,102837,102838],{"class":3814},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[128,102840,102841],{"class":130,"line":221},[128,102842,102843],{"class":3814},"#传入数组\n",[128,102845,102846,102849,102851,102853,102855],{"class":130,"line":230},[128,102847,102848],{"class":138},"np.split(a,[",[128,102850,3827],{"class":166},[128,102852,4128],{"class":138},[128,102854,4069],{"class":166},[128,102856,2595],{"class":138},[128,102858,102859],{"class":130,"line":235},[128,102860,96934],{"class":3814},[128,102862,102863],{"class":130,"line":244},[128,102864,102865],{"class":3814},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[128,102867,102868,102870,102872,102874,102876],{"class":130,"line":287},[128,102869,102848],{"class":138},[128,102871,4069],{"class":166},[128,102873,4128],{"class":138},[128,102875,4119],{"class":166},[128,102877,2595],{"class":138},[128,102879,102880],{"class":130,"line":301},[128,102881,96934],{"class":3814},[128,102883,102884],{"class":130,"line":310},[128,102885,102886],{"class":3814},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,102888,102889],{},"②二维数组的分割",[19,102891,102892],{},"使用split()",[106,102894,102896],{"className":122,"code":102895,"language":124,"meta":112,"style":112},"#二维数组分割\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",[114,102897,102898,102903,102927,102932,102941,102945,102949,102954,102959,102964,102969,102974,102979,102984,102988,103001,103005,103009,103013,103017,103021,103026,103031,103036,103040,103045,103061,103065,103069,103074,103079,103084,103089,103094,103099,103104,103109,103114,103119,103124,103129,103134,103139,103144,103149,103154,103159,103163,103167,103187,103191,103195,103200,103205,103210,103215,103220,103225,103230,103235,103240,103245,103250,103255,103260,103265,103270,103275,103280,103285,103289,103294,103303,103307,103311,103315,103319,103323,103327,103331,103335,103339,103348,103352,103356,103360,103364,103368,103372,103376,103380,103384,103388,103392,103396,103400,103404,103408,103412,103416,103420,103424,103428,103432,103445,103449,103453,103457,103461,103465,103469,103473,103477],{"__ignoreMap":112},[128,102899,102900],{"class":130,"line":131},[128,102901,102902],{"class":3814},"#二维数组分割\n",[128,102904,102905,102907,102909,102911,102913,102915,102917,102919,102921,102923,102925],{"class":130,"line":142},[128,102906,96676],{"class":138},[128,102908,270],{"class":134},[128,102910,96372],{"class":138},[128,102912,2592],{"class":166},[128,102914,4128],{"class":138},[128,102916,4075],{"class":166},[128,102918,96377],{"class":138},[128,102920,4094],{"class":166},[128,102922,4128],{"class":138},[128,102924,4094],{"class":166},[128,102926,180],{"class":138},[128,102928,102929],{"class":130,"line":156},[128,102930,102931],{"class":3814},"#默认axis=0  传入整数平均分,按行来的\n",[128,102933,102934,102937,102939],{"class":130,"line":163},[128,102935,102936],{"class":138},"np.split(aa,",[128,102938,3827],{"class":166},[128,102940,180],{"class":138},[128,102942,102943],{"class":130,"line":183},[128,102944,99133],{"class":3814},[128,102946,102947],{"class":130,"line":188},[128,102948,97298],{"class":176},[128,102950,102951],{"class":130,"line":193},[128,102952,102953],{"class":176},"[array([[ 1,  2,  3,  4,  5,  6],\n",[128,102955,102956],{"class":130,"line":206},[128,102957,102958],{"class":176},"        [ 7,  8,  9, 10, 11, 12]]),\n",[128,102960,102961],{"class":130,"line":221},[128,102962,102963],{"class":176}," array([[13, 14, 15, 16, 17, 18],\n",[128,102965,102966],{"class":130,"line":230},[128,102967,102968],{"class":176},"        [19, 20, 21, 22, 23, 24]]),\n",[128,102970,102971],{"class":130,"line":235},[128,102972,102973],{"class":176}," array([[25, 26, 27, 28, 29, 30],\n",[128,102975,102976],{"class":130,"line":244},[128,102977,102978],{"class":176},"        [31, 32, 33, 34, 35, 36]])]\n",[128,102980,102981],{"class":130,"line":287},[128,102982,102983],{"class":176}," '''\n",[128,102985,102986],{"class":130,"line":301},[128,102987,102843],{"class":3814},[128,102989,102990,102993,102995,102997,102999],{"class":130,"line":310},[128,102991,102992],{"class":138},"np.split(aa,[",[128,102994,409],{"class":166},[128,102996,4128],{"class":138},[128,102998,4069],{"class":166},[128,103000,2595],{"class":138},[128,103002,103003],{"class":130,"line":323},[128,103004,99133],{"class":3814},[128,103006,103007],{"class":130,"line":330},[128,103008,97298],{"class":176},[128,103010,103011],{"class":130,"line":335},[128,103012,102953],{"class":176},[128,103014,103015],{"class":130,"line":340},[128,103016,102958],{"class":176},[128,103018,103019],{"class":130,"line":351},[128,103020,102963],{"class":176},[128,103022,103023],{"class":130,"line":384},[128,103024,103025],{"class":176},"        [19, 20, 21, 22, 23, 24],\n",[128,103027,103028],{"class":130,"line":414},[128,103029,103030],{"class":176},"        [25, 26, 27, 28, 29, 30]]),\n",[128,103032,103033],{"class":130,"line":419},[128,103034,103035],{"class":176}," array([[31, 32, 33, 34, 35, 36]])]\n",[128,103037,103038],{"class":130,"line":424},[128,103039,97298],{"class":176},[128,103041,103042],{"class":130,"line":434},[128,103043,103044],{"class":3814},"#axis=1 按照列来分\n",[128,103046,103047,103049,103051,103053,103055,103057,103059],{"class":130,"line":447},[128,103048,102936],{"class":138},[128,103050,3827],{"class":166},[128,103052,4128],{"class":138},[128,103054,50899],{"class":266},[128,103056,270],{"class":134},[128,103058,2592],{"class":166},[128,103060,180],{"class":138},[128,103062,103063],{"class":130,"line":459},[128,103064,99133],{"class":3814},[128,103066,103067],{"class":130,"line":471},[128,103068,97298],{"class":176},[128,103070,103071],{"class":130,"line":483},[128,103072,103073],{"class":176},"[array([[ 1,  2],\n",[128,103075,103076],{"class":130,"line":495},[128,103077,103078],{"class":176},"        [ 7,  8],\n",[128,103080,103081],{"class":130,"line":507},[128,103082,103083],{"class":176},"        [13, 14],\n",[128,103085,103086],{"class":130,"line":519},[128,103087,103088],{"class":176},"        [19, 20],\n",[128,103090,103091],{"class":130,"line":524},[128,103092,103093],{"class":176},"        [25, 26],\n",[128,103095,103096],{"class":130,"line":529},[128,103097,103098],{"class":176},"        [31, 32]]),\n",[128,103100,103101],{"class":130,"line":540},[128,103102,103103],{"class":176}," array([[ 3,  4],\n",[128,103105,103106],{"class":130,"line":555},[128,103107,103108],{"class":176},"        [ 9, 10],\n",[128,103110,103111],{"class":130,"line":576},[128,103112,103113],{"class":176},"        [15, 16],\n",[128,103115,103116],{"class":130,"line":584},[128,103117,103118],{"class":176},"        [21, 22],\n",[128,103120,103121],{"class":130,"line":593},[128,103122,103123],{"class":176},"        [27, 28],\n",[128,103125,103126],{"class":130,"line":598},[128,103127,103128],{"class":176},"        [33, 34]]),\n",[128,103130,103131],{"class":130,"line":603},[128,103132,103133],{"class":176}," array([[ 5,  6],\n",[128,103135,103136],{"class":130,"line":614},[128,103137,103138],{"class":176},"        [11, 12],\n",[128,103140,103141],{"class":130,"line":625},[128,103142,103143],{"class":176},"        [17, 18],\n",[128,103145,103146],{"class":130,"line":633},[128,103147,103148],{"class":176},"        [23, 24],\n",[128,103150,103151],{"class":130,"line":649},[128,103152,103153],{"class":176},"        [29, 30],\n",[128,103155,103156],{"class":130,"line":660},[128,103157,103158],{"class":176},"        [35, 36]])]\n",[128,103160,103161],{"class":130,"line":673},[128,103162,102983],{"class":176},[128,103164,103165],{"class":130,"line":678},[128,103166,102843],{"class":3814},[128,103168,103169,103171,103173,103175,103177,103179,103181,103183,103185],{"class":130,"line":683},[128,103170,102992],{"class":138},[128,103172,2592],{"class":166},[128,103174,4128],{"class":138},[128,103176,409],{"class":166},[128,103178,44995],{"class":138},[128,103180,50899],{"class":266},[128,103182,270],{"class":134},[128,103184,2592],{"class":166},[128,103186,180],{"class":138},[128,103188,103189],{"class":130,"line":693},[128,103190,96934],{"class":3814},[128,103192,103193],{"class":130,"line":702},[128,103194,97298],{"class":176},[128,103196,103197],{"class":130,"line":709},[128,103198,103199],{"class":176},"[array([[ 1],\n",[128,103201,103202],{"class":130,"line":723},[128,103203,103204],{"class":176},"        [ 7],\n",[128,103206,103207],{"class":130,"line":732},[128,103208,103209],{"class":176},"        [13],\n",[128,103211,103212],{"class":130,"line":744},[128,103213,103214],{"class":176},"        [19],\n",[128,103216,103217],{"class":130,"line":749},[128,103218,103219],{"class":176},"        [25],\n",[128,103221,103222],{"class":130,"line":754},[128,103223,103224],{"class":176},"        [31]]),\n",[128,103226,103227],{"class":130,"line":764},[128,103228,103229],{"class":176}," array([[ 2],\n",[128,103231,103232],{"class":130,"line":782},[128,103233,103234],{"class":176},"        [ 8],\n",[128,103236,103237],{"class":130,"line":787},[128,103238,103239],{"class":176},"        [14],\n",[128,103241,103242],{"class":130,"line":795},[128,103243,103244],{"class":176},"        [20],\n",[128,103246,103247],{"class":130,"line":807},[128,103248,103249],{"class":176},"        [26],\n",[128,103251,103252],{"class":130,"line":813},[128,103253,103254],{"class":176},"        [32]]),\n",[128,103256,103257],{"class":130,"line":818},[128,103258,103259],{"class":176}," array([[ 3,  4,  5,  6],\n",[128,103261,103262],{"class":130,"line":835},[128,103263,103264],{"class":176},"        [ 9, 10, 11, 12],\n",[128,103266,103267],{"class":130,"line":851},[128,103268,103269],{"class":176},"        [15, 16, 17, 18],\n",[128,103271,103272],{"class":130,"line":867},[128,103273,103274],{"class":176},"        [21, 22, 23, 24],\n",[128,103276,103277],{"class":130,"line":872},[128,103278,103279],{"class":176},"        [27, 28, 29, 30],\n",[128,103281,103282],{"class":130,"line":878},[128,103283,103284],{"class":176},"        [33, 34, 35, 36]])]\n",[128,103286,103287],{"class":130,"line":887},[128,103288,97298],{"class":176},[128,103290,103291],{"class":130,"line":896},[128,103292,103293],{"class":3814},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[128,103295,103296,103299,103301],{"class":130,"line":905},[128,103297,103298],{"class":138},"np.vsplit(aa,",[128,103300,3827],{"class":166},[128,103302,180],{"class":138},[128,103304,103305],{"class":130,"line":914},[128,103306,96934],{"class":3814},[128,103308,103309],{"class":130,"line":920},[128,103310,97298],{"class":176},[128,103312,103313],{"class":130,"line":926},[128,103314,102953],{"class":176},[128,103316,103317],{"class":130,"line":938},[128,103318,102958],{"class":176},[128,103320,103321],{"class":130,"line":943},[128,103322,102963],{"class":176},[128,103324,103325],{"class":130,"line":948},[128,103326,102968],{"class":176},[128,103328,103329],{"class":130,"line":958},[128,103330,102973],{"class":176},[128,103332,103333],{"class":130,"line":974},[128,103334,102978],{"class":176},[128,103336,103337],{"class":130,"line":985},[128,103338,97298],{"class":176},[128,103340,103341,103344,103346],{"class":130,"line":990},[128,103342,103343],{"class":138},"np.hsplit(aa,",[128,103345,3827],{"class":166},[128,103347,180],{"class":138},[128,103349,103350],{"class":130,"line":1005},[128,103351,96934],{"class":3814},[128,103353,103354],{"class":130,"line":1017},[128,103355,97298],{"class":176},[128,103357,103358],{"class":130,"line":1022},[128,103359,103073],{"class":176},[128,103361,103362],{"class":130,"line":1027},[128,103363,103078],{"class":176},[128,103365,103366],{"class":130,"line":1033},[128,103367,103083],{"class":176},[128,103369,103370],{"class":130,"line":1038},[128,103371,103088],{"class":176},[128,103373,103374],{"class":130,"line":1050},[128,103375,103093],{"class":176},[128,103377,103378],{"class":130,"line":1055},[128,103379,103098],{"class":176},[128,103381,103382],{"class":130,"line":1060},[128,103383,103103],{"class":176},[128,103385,103386],{"class":130,"line":1070},[128,103387,103108],{"class":176},[128,103389,103390],{"class":130,"line":1086},[128,103391,103113],{"class":176},[128,103393,103394],{"class":130,"line":1095},[128,103395,103118],{"class":176},[128,103397,103398],{"class":130,"line":1100},[128,103399,103123],{"class":176},[128,103401,103402],{"class":130,"line":1113},[128,103403,103128],{"class":176},[128,103405,103406],{"class":130,"line":1124},[128,103407,103133],{"class":176},[128,103409,103410],{"class":130,"line":1129},[128,103411,103138],{"class":176},[128,103413,103414],{"class":130,"line":1134},[128,103415,103143],{"class":176},[128,103417,103418],{"class":130,"line":1150},[128,103419,103148],{"class":176},[128,103421,103422],{"class":130,"line":1164},[128,103423,103153],{"class":176},[128,103425,103426],{"class":130,"line":1178},[128,103427,103158],{"class":176},[128,103429,103430],{"class":130,"line":1183},[128,103431,97298],{"class":176},[128,103433,103434,103437,103439,103441,103443],{"class":130,"line":1199},[128,103435,103436],{"class":138},"np.vsplit(aa,[",[128,103438,409],{"class":166},[128,103440,4128],{"class":138},[128,103442,4069],{"class":166},[128,103444,2595],{"class":138},[128,103446,103447],{"class":130,"line":1214},[128,103448,96934],{"class":3814},[128,103450,103451],{"class":130,"line":1229},[128,103452,97298],{"class":176},[128,103454,103455],{"class":130,"line":1234},[128,103456,102953],{"class":176},[128,103458,103459],{"class":130,"line":1239},[128,103460,102958],{"class":176},[128,103462,103463],{"class":130,"line":1251},[128,103464,102963],{"class":176},[128,103466,103467],{"class":130,"line":1256},[128,103468,103025],{"class":176},[128,103470,103471],{"class":130,"line":1261},[128,103472,103030],{"class":176},[128,103474,103475],{"class":130,"line":1271},[128,103476,103035],{"class":176},[128,103478,103479],{"class":130,"line":1287},[128,103480,102983],{"class":176},[3659,103482,103483],{},"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":112,"searchDepth":142,"depth":142,"links":103485},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":102751,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":103492,"title":103493,"body":103494,"description":3686,"extension":3687,"meta":103988,"navigation":159,"path":103989,"seo":103990,"stem":103991,"__hash__":103992},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":103495,"toc":103979},[103496,103499,103502,103527,103531,103590,103642,103646,103648,103684,103738,103740,103778,103849,103853,103858,103862,103865,103898,103901,103905,103908,103911,103914,103917,103922,103926,103929,103932,103935,103938,103943,103947,103952,103955,103976],[10,103497,103493],{"id":103498},"_9数学函数",[19,103500,103501],{},"补充回顾：python的列表推导式",[106,103503,103505],{"className":122,"code":103504,"language":124,"meta":112,"style":112},"[1\u002Fi for i in a]\n",[114,103506,103507],{"__ignoreMap":112},[128,103508,103509,103511,103513,103515,103518,103520,103522,103524],{"class":130,"line":131},[128,103510,4638],{"class":138},[128,103512,2592],{"class":166},[128,103514,4333],{"class":134},[128,103516,103517],{"class":138},"i ",[128,103519,2404],{"class":134},[128,103521,12984],{"class":138},[128,103523,549],{"class":134},[128,103525,103526],{"class":138}," a]\n",[14,103528,103530],{"id":103529},"_91-求倒数","9.1 求倒数",[106,103532,103534],{"className":122,"code":103533,"language":124,"meta":112,"style":112},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[114,103535,103536,103541,103569,103581],{"__ignoreMap":112},[128,103537,103538],{"class":130,"line":131},[128,103539,103540],{"class":3814},"#数组求倒数\n",[128,103542,103543,103545,103547,103549,103551,103553,103555,103557,103559,103561,103563,103565,103567],{"class":130,"line":142},[128,103544,3989],{"class":138},[128,103546,270],{"class":134},[128,103548,4638],{"class":138},[128,103550,2592],{"class":166},[128,103552,4128],{"class":138},[128,103554,409],{"class":166},[128,103556,4128],{"class":138},[128,103558,3827],{"class":166},[128,103560,4128],{"class":138},[128,103562,4043],{"class":166},[128,103564,4128],{"class":138},[128,103566,4069],{"class":166},[128,103568,2376],{"class":138},[128,103570,103571,103573,103575,103578],{"class":130,"line":156},[128,103572,4013],{"class":138},[128,103574,270],{"class":134},[128,103576,103577],{"class":138},"np.array(a)",[128,103579,103580],{"class":3814},"#将列表转换为数组\n",[128,103582,103583,103585,103587],{"class":130,"line":163},[128,103584,2592],{"class":166},[128,103586,4333],{"class":134},[128,103588,103589],{"class":138},"b\n",[106,103591,103593],{"className":122,"code":103592,"language":124,"meta":112,"style":112},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[114,103594,103595,103623,103632,103637],{"__ignoreMap":112},[128,103596,103597,103599,103601,103603,103605,103607,103609,103611,103613,103615,103617,103619,103621],{"class":130,"line":131},[128,103598,3989],{"class":138},[128,103600,270],{"class":134},[128,103602,4638],{"class":138},[128,103604,2592],{"class":166},[128,103606,4128],{"class":138},[128,103608,409],{"class":166},[128,103610,4128],{"class":138},[128,103612,3827],{"class":166},[128,103614,4128],{"class":138},[128,103616,4043],{"class":166},[128,103618,4128],{"class":138},[128,103620,4069],{"class":166},[128,103622,2376],{"class":138},[128,103624,103625,103627,103629],{"class":130,"line":142},[128,103626,4013],{"class":138},[128,103628,270],{"class":134},[128,103630,103631],{"class":138},"np.array(a)\n",[128,103633,103634],{"class":130,"line":156},[128,103635,103636],{"class":3814},"#调用numpy中的函数reciprocal()\n",[128,103638,103639],{"class":130,"line":163},[128,103640,103641],{"class":138},"np.reciprocal(b)\n",[14,103643,103645],{"id":103644},"_92-求平方","9.2 求平方",[19,103647,97900],{},[106,103649,103651],{"className":122,"code":103650,"language":124,"meta":112,"style":112},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[114,103652,103653,103658,103663,103679],{"__ignoreMap":112},[128,103654,103655],{"class":130,"line":131},[128,103656,103657],{"class":3814},"#square()，求平方\n",[128,103659,103660],{"class":130,"line":142},[128,103661,103662],{"class":3814},"#一维数组\n",[128,103664,103665,103667,103669,103671,103673,103675,103677],{"class":130,"line":156},[128,103666,3989],{"class":138},[128,103668,270],{"class":134},[128,103670,96372],{"class":138},[128,103672,2592],{"class":166},[128,103674,4128],{"class":138},[128,103676,4196],{"class":166},[128,103678,180],{"class":138},[128,103680,103681],{"class":130,"line":163},[128,103682,103683],{"class":138},"np.square(a)\n",[106,103685,103687],{"className":122,"code":103686,"language":124,"meta":112,"style":112},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[114,103688,103689,103694,103699,103720],{"__ignoreMap":112},[128,103690,103691],{"class":130,"line":131},[128,103692,103693],{"class":3814},"#或者通过循环遍历的形式来计算\n",[128,103695,103696],{"class":130,"line":142},[128,103697,103698],{"class":3814},"#这是一个列表\n",[128,103700,103701,103704,103706,103708,103710,103712,103714,103717],{"class":130,"line":156},[128,103702,103703],{"class":138},"[i",[128,103705,4205],{"class":134},[128,103707,103517],{"class":138},[128,103709,2404],{"class":134},[128,103711,12984],{"class":138},[128,103713,549],{"class":134},[128,103715,103716],{"class":138}," a]",[128,103718,103719],{"class":3814},"#这个求完之后在数列当中\n",[128,103721,103722,103725,103727,103729,103731,103733,103735],{"class":130,"line":163},[128,103723,103724],{"class":138},"np.array([i",[128,103726,4205],{"class":134},[128,103728,103517],{"class":138},[128,103730,2404],{"class":134},[128,103732,12984],{"class":138},[128,103734,549],{"class":134},[128,103736,103737],{"class":138}," a])\n",[19,103739,96661],{},[106,103741,103743],{"className":122,"code":103742,"language":124,"meta":112,"style":112},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[114,103744,103745,103749,103773],{"__ignoreMap":112},[128,103746,103747],{"class":130,"line":131},[128,103748,96671],{"class":3814},[128,103750,103751,103753,103755,103757,103759,103761,103763,103765,103767,103769,103771],{"class":130,"line":142},[128,103752,96676],{"class":138},[128,103754,270],{"class":134},[128,103756,96372],{"class":138},[128,103758,2592],{"class":166},[128,103760,4128],{"class":138},[128,103762,4272],{"class":166},[128,103764,96377],{"class":138},[128,103766,4043],{"class":166},[128,103768,4128],{"class":138},[128,103770,3827],{"class":166},[128,103772,180],{"class":138},[128,103774,103775],{"class":130,"line":156},[128,103776,103777],{"class":138},"np.square(aa)\n",[106,103779,103781],{"className":122,"code":103780,"language":124,"meta":112,"style":112},"#传统的方式\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",[114,103782,103783,103788,103797,103813,103829,103844],{"__ignoreMap":112},[128,103784,103785],{"class":130,"line":131},[128,103786,103787],{"class":3814},"#传统的方式\n",[128,103789,103790,103792,103794],{"class":130,"line":142},[128,103791,101556],{"class":138},[128,103793,270],{"class":134},[128,103795,103796],{"class":138},"np.empty_like(aa)\n",[128,103798,103799,103801,103803,103805,103807,103809,103811],{"class":130,"line":156},[128,103800,2404],{"class":134},[128,103802,12984],{"class":138},[128,103804,549],{"class":134},[128,103806,35910],{"class":166},[128,103808,253],{"class":138},[128,103810,4043],{"class":166},[128,103812,34264],{"class":138},[128,103814,103815,103817,103819,103821,103823,103825,103827],{"class":130,"line":163},[128,103816,543],{"class":134},[128,103818,13046],{"class":138},[128,103820,549],{"class":134},[128,103822,35910],{"class":166},[128,103824,253],{"class":138},[128,103826,3827],{"class":166},[128,103828,34264],{"class":138},[128,103830,103831,103834,103836,103839,103841],{"class":130,"line":183},[128,103832,103833],{"class":138},"        bb[i,j]",[128,103835,270],{"class":134},[128,103837,103838],{"class":138},"aa[i,j]",[128,103840,4205],{"class":134},[128,103842,103843],{"class":138},"aa[i,j]\n",[128,103845,103846],{"class":130,"line":188},[128,103847,103848],{"class":138},"bb\n",[14,103850,103852],{"id":103851},"_93-求各元素的符号","9.3 求各元素的符号",[19,103854,103855],{},[5074,103856],{"alt":112,"src":103857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,103859,103861],{"id":103860},"_94-modf函数","9.4 modf函数",[19,103863,103864],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[106,103866,103868],{"className":122,"code":103867,"language":124,"meta":112,"style":112},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[114,103869,103870,103893],{"__ignoreMap":112},[128,103871,103872,103874,103876,103878,103880,103882,103884,103886,103888,103891],{"class":130,"line":131},[128,103873,3989],{"class":138},[128,103875,270],{"class":134},[128,103877,96372],{"class":138},[128,103879,4281],{"class":134},[128,103881,4196],{"class":166},[128,103883,4128],{"class":138},[128,103885,4196],{"class":166},[128,103887,4128],{"class":138},[128,103889,103890],{"class":166},"0.3",[128,103892,180],{"class":138},[128,103894,103895],{"class":130,"line":142},[128,103896,103897],{"class":138},"np.modf(a)\n",[19,103899,103900],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,103902,103904],{"id":103903},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,103906,103907],{},"np.cell()",[19,103909,103910],{},"np.floor()",[19,103912,103913],{},"np.rint()",[19,103915,103916],{},"对各元素分别向上取整、向下取整、四舍五入",[19,103918,103919],{},[5074,103920],{"alt":112,"src":103921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,103923,103925],{"id":103924},"_96-around函数","9.6 around()函数",[19,103927,103928],{},"around()函数也可以实现对数的小数位数进行操作",[19,103930,103931],{},"其中的参数：",[19,103933,103934],{},"1.要传的数组",[19,103936,103937],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,103939,103940],{},[5074,103941],{"alt":112,"src":103942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,103944,103946],{"id":103945},"_97-三角函数","9.7 三角函数",[19,103948,103949],{},[5074,103950],{"alt":112,"src":103951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,103953,103954],{},"引入图像模块非常重要",[106,103956,103958],{"className":122,"code":103957,"language":124,"meta":112,"style":112},"from matplotlib import pyplot as plt\n",[114,103959,103960],{"__ignoreMap":112},[128,103961,103962,103964,103967,103969,103972,103974],{"class":130,"line":131},[128,103963,145],{"class":134},[128,103965,103966],{"class":138}," matplotlib ",[128,103968,135],{"class":134},[128,103970,103971],{"class":138}," pyplot ",[128,103973,279],{"class":134},[128,103975,34907],{"class":138},[3659,103977,103978],{},"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":112,"searchDepth":142,"depth":142,"links":103980},[103981,103982,103983,103984,103985,103986,103987],{"id":103529,"depth":142,"text":103530},{"id":103644,"depth":142,"text":103645},{"id":103851,"depth":142,"text":103852},{"id":103860,"depth":142,"text":103861},{"id":103903,"depth":142,"text":103904},{"id":103924,"depth":142,"text":103925},{"id":103945,"depth":142,"text":103946},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":103493,"description":3686},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":103994,"title":3562,"body":103995,"description":3686,"extension":3687,"meta":103999,"navigation":159,"path":104000,"seo":104001,"stem":104002,"__hash__":104003},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md",{"type":7,"value":103996,"toc":103997},[],{"title":112,"searchDepth":142,"depth":142,"links":103998},[],{"category":53805},"\u002Fwiki\u002F2025-08-14-numpy",{"title":3562,"description":3686},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":104005,"title":104006,"body":104007,"description":112,"extension":3687,"meta":106010,"navigation":159,"path":106011,"seo":106012,"stem":106013,"__hash__":106014},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":104008,"toc":105986},[104009,104012,104016,104019,104022,104028,104031,104054,104057,104091,104094,104135,104139,104142,104235,104238,104282,104285,104302,104305,104319,104322,104325,104370,104373,104409,104413,104416,104422,104427,104447,104451,104454,104520,104523,104541,104545,104548,104577,104587,104593,104597,104600,104606,104617,104621,104624,104654,104657,104934,104937,104940,104951,104954,104957,104979,104986,104989,105007,105010,105013,105026,105034,105037,105063,105069,105072,105075,105085,105097,105117,105126,105146,105156,105180,105193,105207,105212,105253,105270,105295,105307,105327,105333,105378,105397,105414,105427,105443,105450,105462,105471,105506,105527,105552,105565,105589,105604,105629,105632,105653,105662,105665,105676,105680,105683,105689,105701,105708,105712,105715,105727,105730,105744,105747,105757,105767,105770,105810,105813,105817,105823,105826,105840,105844,105847,105880,105884,105887,105910,105918,105921,105927,105933,105936,105939,105967,105971,105974,105980,105983],[10,104010,104006],{"id":104011},"_1环境安装与第一个-mujoco-程序",[14,104013,104015],{"id":104014},"_1目标说明","1.目标说明",[19,104017,104018],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,104020,104021],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[106,104023,104026],{"className":104024,"code":104025,"language":111,"meta":112},[109],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[114,104027,104025],{"__ignoreMap":112},[19,104029,104030],{},"需要掌握:",[26,104032,104033,104036,104039,104044,104049],{},[29,104034,104035],{},"Fedora 44 下 MuJoCo 的系统依赖",[29,104037,104038],{},"Python 虚拟环境创建",[29,104040,104041],{},[114,104042,104043],{},"mujoco.MjModel",[29,104045,104046],{},[114,104047,104048],{},"mujoco.MjData",[29,104050,104051],{},[114,104052,104053],{},"mujoco.mj_step(model, data)",[19,104055,104056],{},"MuJoCo 中最重要的两个对象:",[3891,104058,104059,104069],{},[3894,104060,104061],{},[3897,104062,104063,104066],{},[3900,104064,104065],{"align":27223},"对象",[3900,104067,104068],{"align":27223},"含义",[3938,104070,104071,104081],{},[3897,104072,104073,104078],{},[3943,104074,104075],{"align":27223},[114,104076,104077],{},"MjModel",[3943,104079,104080],{"align":27223},"模型结构，来自 XML，基本不随时间变化",[3897,104082,104083,104088],{},[3943,104084,104085],{"align":27223},[114,104086,104087],{},"MjData",[3943,104089,104090],{"align":27223},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,104092,104093],{},"可以先用一个类比理解：",[3891,104095,104096,104106],{},[3894,104097,104098],{},[3897,104099,104100,104103],{},[3900,104101,104102],{"align":27223},"类比",[3900,104104,104105],{"align":27223},"MuJoCo 对象",[3938,104107,104108,104117,104126],{},[3897,104109,104110,104113],{},[3943,104111,104112],{"align":27223},"游戏地图和角色配置",[3943,104114,104115],{"align":27223},[114,104116,104077],{},[3897,104118,104119,104122],{},[3943,104120,104121],{"align":27223},"游戏运行到当前帧的状态",[3943,104123,104124],{"align":27223},[114,104125,104087],{},[3897,104127,104128,104131],{},[3943,104129,104130],{"align":27223},"前进一帧",[3943,104132,104133],{"align":27223},[114,104134,104053],{},[14,104136,104138],{"id":104137},"_2环境与依赖安装","2.环境与依赖安装",[19,104140,104141],{},"Fedora 44 系统依赖:",[106,104143,104145],{"className":27309,"code":104144,"language":27311,"meta":112,"style":112},"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",[114,104146,104147,104159,104172,104185,104195,104205,104224],{"__ignoreMap":112},[128,104148,104149,104151,104153,104155,104157],{"class":130,"line":131},[128,104150,28064],{"class":199},[128,104152,29800],{"class":176},[128,104154,27321],{"class":176},[128,104156,29885],{"class":166},[128,104158,28165],{"class":166},[128,104160,104161,104164,104167,104170],{"class":130,"line":142},[128,104162,104163],{"class":176},"  python3",[128,104165,104166],{"class":176}," python3-pip",[128,104168,104169],{"class":176}," python3-virtualenv",[128,104171,28165],{"class":166},[128,104173,104174,104177,104180,104183],{"class":130,"line":156},[128,104175,104176],{"class":176},"  mesa-libGL",[128,104178,104179],{"class":176}," mesa-libGLU",[128,104181,104182],{"class":176}," mesa-dri-drivers",[128,104184,28165],{"class":166},[128,104186,104187,104190,104193],{"class":130,"line":163},[128,104188,104189],{"class":176},"  libglvnd-glx",[128,104191,104192],{"class":176}," libglvnd-opengl",[128,104194,28165],{"class":166},[128,104196,104197,104200,104203],{"class":130,"line":183},[128,104198,104199],{"class":176},"  glfw",[128,104201,104202],{"class":176}," glfw-devel",[128,104204,28165],{"class":166},[128,104206,104207,104210,104213,104216,104219,104222],{"class":130,"line":188},[128,104208,104209],{"class":176},"  libX11",[128,104211,104212],{"class":176}," libXcursor",[128,104214,104215],{"class":176}," libXi",[128,104217,104218],{"class":176}," libXinerama",[128,104220,104221],{"class":176}," libXrandr",[128,104223,28165],{"class":166},[128,104225,104226,104229,104232],{"class":130,"line":193},[128,104227,104228],{"class":176},"  gcc",[128,104230,104231],{"class":176}," gcc-c++",[128,104233,104234],{"class":176}," make\n",[19,104236,104237],{},"创建 Python 环境:",[106,104239,104241],{"className":27309,"code":104240,"language":27311,"meta":112,"style":112},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[114,104242,104243,104257,104265],{"__ignoreMap":112},[128,104244,104245,104248,104251,104254],{"class":130,"line":131},[128,104246,104247],{"class":199},"python3",[128,104249,104250],{"class":166}," -m",[128,104252,104253],{"class":176}," venv",[128,104255,104256],{"class":176}," .venv\n",[128,104258,104259,104262],{"class":130,"line":142},[128,104260,104261],{"class":166},"source",[128,104263,104264],{"class":176}," .venv\u002Fbin\u002Factivate\n",[128,104266,104267,104269,104271,104274,104276,104279],{"class":130,"line":156},[128,104268,124],{"class":199},[128,104270,104250],{"class":166},[128,104272,104273],{"class":176}," pip",[128,104275,27321],{"class":176},[128,104277,104278],{"class":166}," --upgrade",[128,104280,104281],{"class":176}," pip\n",[19,104283,104284],{},"pip 安装:",[106,104286,104288],{"className":27309,"code":104287,"language":27311,"meta":112,"style":112},"pip install \"mujoco>=2.3\" numpy\n",[114,104289,104290],{"__ignoreMap":112},[128,104291,104292,104294,104296,104299],{"class":130,"line":131},[128,104293,27318],{"class":199},[128,104295,27321],{"class":176},[128,104297,104298],{"class":176}," \"mujoco>=2.3\"",[128,104300,104301],{"class":176}," numpy\n",[19,104303,104304],{},"安装完成后，先做最小检查：",[106,104306,104308],{"className":27309,"code":104307,"language":27311,"meta":112,"style":112},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[114,104309,104310],{"__ignoreMap":112},[128,104311,104312,104314,104316],{"class":130,"line":131},[128,104313,124],{"class":199},[128,104315,33842],{"class":166},[128,104317,104318],{"class":176}," \"import mujoco; print(mujoco.__version__)\"\n",[19,104320,104321],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,104323,104324],{},"conda 安装:",[106,104326,104328],{"className":27309,"code":104327,"language":27311,"meta":112,"style":112},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[114,104329,104330,104350,104360],{"__ignoreMap":112},[128,104331,104332,104334,104336,104338,104341,104344,104347],{"class":130,"line":131},[128,104333,33814],{"class":199},[128,104335,32660],{"class":176},[128,104337,28602],{"class":166},[128,104339,104340],{"class":176}," mujoco-study",[128,104342,104343],{"class":176}," python=",[128,104345,104346],{"class":166},"3.10",[128,104348,104349],{"class":166}," -y\n",[128,104351,104352,104354,104357],{"class":130,"line":142},[128,104353,33814],{"class":199},[128,104355,104356],{"class":176}," activate",[128,104358,104359],{"class":176}," mujoco-study\n",[128,104361,104362,104364,104366,104368],{"class":130,"line":156},[128,104363,27318],{"class":199},[128,104365,27321],{"class":176},[128,104367,104298],{"class":176},[128,104369,104301],{"class":176},[19,104371,104372],{},"版本冲突说明:",[26,104374,104375,104381,104390,104399],{},[29,104376,104377,104378,1842],{},"不要安装 ",[114,104379,104380],{},"mujoco-py",[29,104382,104383,104384,3330,104386,104389],{},"如果旧项目里同时安装了 ",[114,104385,104380],{},[114,104387,104388],{},"mujoco","，建议新建干净虚拟环境。",[29,104391,104392,104395,104396,1842],{},[114,104393,104394],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[114,104397,104398],{},"~\u002F.mujoco\u002Fmujoco210",[29,104400,104401,104402,85912,104405,104408],{},"离屏渲染可能涉及 OpenGL 后端，",[114,104403,104404],{},"MUJOCO_GL=egl",[114,104406,104407],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,104410,104412],{"id":104411},"_3核心概念解释","3.核心概念解释",[19,104414,104415],{},"MuJoCo 的基本执行流程:",[106,104417,104420],{"className":104418,"code":104419,"language":111,"meta":112},[109],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[114,104421,104419],{"__ignoreMap":112},[19,104423,104424,104426],{},[114,104425,104077],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,104428,104429,104431,104432,3550,104435,3550,104438,3550,104441,3550,104444,1842],{},[114,104430,104087],{}," 存放仿真运行时状态，例如 ",[114,104433,104434],{},"data.time",[114,104436,104437],{},"data.qpos",[114,104439,104440],{},"data.qvel",[114,104442,104443],{},"data.ctrl",[114,104445,104446],{},"data.xpos",[72,104448,104450],{"id":104449},"xml-是什么","XML 是什么",[19,104452,104453],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[106,104455,104457],{"className":56449,"code":104456,"language":56451,"meta":112,"style":112},"\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",[114,104458,104459,104481,104512],{"__ignoreMap":112},[128,104460,104461,104463,104465,104467,104469,104471,104474,104476,104479],{"class":130,"line":131},[128,104462,4657],{"class":138},[128,104464,55183],{"class":54685},[128,104466,18442],{"class":199},[128,104468,270],{"class":138},[128,104470,56873],{"class":176},[128,104472,104473],{"class":199}," pos",[128,104475,270],{"class":138},[128,104477,104478],{"class":176},"\"0 0 1\"",[128,104480,54692],{"class":138},[128,104482,104483,104485,104488,104490,104492,104495,104497,104499,104501,104504,104506,104509],{"class":130,"line":142},[128,104484,55526],{"class":138},[128,104486,104487],{"class":54685},"geom",[128,104489,18442],{"class":199},[128,104491,270],{"class":138},[128,104493,104494],{"class":176},"\"box_geom\"",[128,104496,57205],{"class":199},[128,104498,270],{"class":138},[128,104500,56873],{"class":176},[128,104502,104503],{"class":199}," size",[128,104505,270],{"class":138},[128,104507,104508],{"class":176},"\"0.1 0.1 0.1\"",[128,104510,104511],{"class":138},"\u002F>\n",[128,104513,104514,104516,104518],{"class":130,"line":156},[128,104515,55168],{"class":138},[128,104517,55183],{"class":54685},[128,104519,54692],{"class":138},[19,104521,104522],{},"这段意思是：",[26,104524,104525,104531,104538],{},[29,104526,104527,104528,104530],{},"创建一个叫 ",[114,104529,57096],{}," 的刚体。",[29,104532,104533,104534,104537],{},"它初始放在 ",[114,104535,104536],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[29,104539,104540],{},"它里面有一个盒子形状的几何体。",[72,104542,104544],{"id":104543},"timestep-是什么","timestep 是什么",[19,104546,104547],{},"XML 里的：",[106,104549,104551],{"className":56449,"code":104550,"language":56451,"meta":112,"style":112},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[114,104552,104553],{"__ignoreMap":112},[128,104554,104555,104557,104559,104562,104564,104567,104570,104572,104575],{"class":130,"line":131},[128,104556,4657],{"class":138},[128,104558,72543],{"class":54685},[128,104560,104561],{"class":199}," timestep",[128,104563,270],{"class":138},[128,104565,104566],{"class":176},"\"0.01\"",[128,104568,104569],{"class":199}," gravity",[128,104571,270],{"class":138},[128,104573,104574],{"class":176},"\"0 0 -9.81\"",[128,104576,104511],{"class":138},[19,104578,104579,104580,104583,104584,104586],{},"表示每调用一次 ",[114,104581,104582],{},"mj_step","，仿真时间前进 ",[114,104585,42372],{}," 秒。循环 100 次，大约就是 1 秒：",[106,104588,104591],{"className":104589,"code":104590,"language":111,"meta":112},[109],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[114,104592,104590],{"__ignoreMap":112},[72,104594,104596],{"id":104595},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,104598,104599],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[106,104601,104604],{"className":104602,"code":104603,"language":111,"meta":112},[109],"x y z qw qx qy qz\n",[114,104605,104603],{"__ignoreMap":112},[19,104607,104608,104609,104612,104613,104616],{},"表示一个自由刚体的位置和姿态。其中 ",[114,104610,104611],{},"x y z"," 是位置，",[114,104614,104615],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,104618,104620],{"id":104619},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,104622,104623],{},"新建文件:",[106,104625,104627],{"className":27309,"code":104626,"language":27311,"meta":112,"style":112},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[114,104628,104629,104639,104646],{"__ignoreMap":112},[128,104630,104631,104634,104636],{"class":130,"line":131},[128,104632,104633],{"class":199},"mkdir",[128,104635,32700],{"class":166},[128,104637,104638],{"class":176}," mujoco_tutorial\n",[128,104640,104641,104644],{"class":130,"line":142},[128,104642,104643],{"class":166},"cd",[128,104645,104638],{"class":176},[128,104647,104648,104651],{"class":130,"line":156},[128,104649,104650],{"class":199},"touch",[128,104652,104653],{"class":176}," ch1_first_sim.py\n",[19,104655,104656],{},"写入:",[106,104658,104660],{"className":122,"code":104659,"language":124,"meta":112,"style":112},"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",[114,104661,104662,104669,104673,104677,104687,104692,104697,104701,104706,104711,104715,104720,104725,104730,104735,104740,104745,104749,104753,104757,104770,104784,104794,104798,104810,104822,104834,104846,104858,104862,104879,104884,104888,104899,104910,104914,104918,104930],{"__ignoreMap":112},[128,104663,104664,104666],{"class":130,"line":131},[128,104665,135],{"class":134},[128,104667,104668],{"class":138}," mujoco\n",[128,104670,104671],{"class":130,"line":142},[128,104672,160],{"emptyLinePlaceholder":159},[128,104674,104675],{"class":130,"line":156},[128,104676,160],{"emptyLinePlaceholder":159},[128,104678,104679,104682,104684],{"class":130,"line":163},[128,104680,104681],{"class":166},"XML",[128,104683,170],{"class":134},[128,104685,104686],{"class":176}," \"\"\"\n",[128,104688,104689],{"class":130,"line":183},[128,104690,104691],{"class":176},"\u003Cmujoco model=\"first_sim\">\n",[128,104693,104694],{"class":130,"line":188},[128,104695,104696],{"class":176},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[128,104698,104699],{"class":130,"line":193},[128,104700,160],{"emptyLinePlaceholder":159},[128,104702,104703],{"class":130,"line":206},[128,104704,104705],{"class":176},"  \u003Cworldbody>\n",[128,104707,104708],{"class":130,"line":221},[128,104709,104710],{"class":176},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[128,104712,104713],{"class":130,"line":230},[128,104714,160],{"emptyLinePlaceholder":159},[128,104716,104717],{"class":130,"line":235},[128,104718,104719],{"class":176},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[128,104721,104722],{"class":130,"line":244},[128,104723,104724],{"class":176},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[128,104726,104727],{"class":130,"line":287},[128,104728,104729],{"class":176},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[128,104731,104732],{"class":130,"line":301},[128,104733,104734],{"class":176},"    \u003C\u002Fbody>\n",[128,104736,104737],{"class":130,"line":310},[128,104738,104739],{"class":176},"  \u003C\u002Fworldbody>\n",[128,104741,104742],{"class":130,"line":323},[128,104743,104744],{"class":176},"\u003C\u002Fmujoco>\n",[128,104746,104747],{"class":130,"line":330},[128,104748,99067],{"class":176},[128,104750,104751],{"class":130,"line":335},[128,104752,160],{"emptyLinePlaceholder":159},[128,104754,104755],{"class":130,"line":340},[128,104756,160],{"emptyLinePlaceholder":159},[128,104758,104759,104761,104763,104766,104768],{"class":130,"line":351},[128,104760,196],{"class":134},[128,104762,1575],{"class":199},[128,104764,104765],{"class":138},"() -> ",[128,104767,99055],{"class":166},[128,104769,241],{"class":138},[128,104771,104772,104775,104777,104780,104782],{"class":130,"line":384},[128,104773,104774],{"class":138},"    model ",[128,104776,270],{"class":134},[128,104778,104779],{"class":138}," mujoco.MjModel.from_xml_string(",[128,104781,104681],{"class":166},[128,104783,180],{"class":138},[128,104785,104786,104789,104791],{"class":130,"line":414},[128,104787,104788],{"class":138},"    data ",[128,104790,270],{"class":134},[128,104792,104793],{"class":138}," mujoco.MjData(model)\n",[128,104795,104796],{"class":130,"line":419},[128,104797,160],{"emptyLinePlaceholder":159},[128,104799,104800,104802,104804,104807],{"class":130,"line":424},[128,104801,437],{"class":166},[128,104803,253],{"class":138},[128,104805,104806],{"class":176},"\"nq:\"",[128,104808,104809],{"class":138},", model.nq)\n",[128,104811,104812,104814,104816,104819],{"class":130,"line":434},[128,104813,437],{"class":166},[128,104815,253],{"class":138},[128,104817,104818],{"class":176},"\"nv:\"",[128,104820,104821],{"class":138},", model.nv)\n",[128,104823,104824,104826,104828,104831],{"class":130,"line":447},[128,104825,437],{"class":166},[128,104827,253],{"class":138},[128,104829,104830],{"class":176},"\"nu:\"",[128,104832,104833],{"class":138},", model.nu)\n",[128,104835,104836,104838,104840,104843],{"class":130,"line":459},[128,104837,437],{"class":166},[128,104839,253],{"class":138},[128,104841,104842],{"class":176},"\"initial time:\"",[128,104844,104845],{"class":138},", data.time)\n",[128,104847,104848,104850,104852,104855],{"class":130,"line":471},[128,104849,437],{"class":166},[128,104851,253],{"class":138},[128,104853,104854],{"class":176},"\"initial qpos:\"",[128,104856,104857],{"class":138},", data.qpos.copy())\n",[128,104859,104860],{"class":130,"line":483},[128,104861,160],{"emptyLinePlaceholder":159},[128,104863,104864,104866,104869,104871,104873,104875,104877],{"class":130,"line":495},[128,104865,543],{"class":134},[128,104867,104868],{"class":138}," _ ",[128,104870,549],{"class":134},[128,104872,35910],{"class":166},[128,104874,253],{"class":138},[128,104876,4061],{"class":166},[128,104878,34264],{"class":138},[128,104880,104881],{"class":130,"line":507},[128,104882,104883],{"class":138},"        mujoco.mj_step(model, data)\n",[128,104885,104886],{"class":130,"line":519},[128,104887,160],{"emptyLinePlaceholder":159},[128,104889,104890,104892,104894,104897],{"class":130,"line":524},[128,104891,437],{"class":166},[128,104893,253],{"class":138},[128,104895,104896],{"class":176},"\"final time:\"",[128,104898,104845],{"class":138},[128,104900,104901,104903,104905,104908],{"class":130,"line":529},[128,104902,437],{"class":166},[128,104904,253],{"class":138},[128,104906,104907],{"class":176},"\"final qpos:\"",[128,104909,104857],{"class":138},[128,104911,104912],{"class":130,"line":540},[128,104913,160],{"emptyLinePlaceholder":159},[128,104915,104916],{"class":130,"line":555},[128,104917,160],{"emptyLinePlaceholder":159},[128,104919,104920,104922,104924,104926,104928],{"class":130,"line":576},[128,104921,1800],{"class":134},[128,104923,1803],{"class":166},[128,104925,1806],{"class":134},[128,104927,1809],{"class":176},[128,104929,241],{"class":138},[128,104931,104932],{"class":130,"line":584},[128,104933,1817],{"class":138},[72,104935,104936],{"id":104936},"代码逐段解释",[19,104938,104939],{},"导入库：",[106,104941,104943],{"className":122,"code":104942,"language":124,"meta":112,"style":112},"import mujoco\n",[114,104944,104945],{"__ignoreMap":112},[128,104946,104947,104949],{"class":130,"line":131},[128,104948,135],{"class":134},[128,104950,104668],{"class":138},[19,104952,104953],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,104955,104956],{},"定义 XML：",[106,104958,104960],{"className":122,"code":104959,"language":124,"meta":112,"style":112},"XML = \"\"\"\n...\n\"\"\"\n",[114,104961,104962,104970,104975],{"__ignoreMap":112},[128,104963,104964,104966,104968],{"class":130,"line":131},[128,104965,104681],{"class":166},[128,104967,170],{"class":134},[128,104969,104686],{"class":176},[128,104971,104972],{"class":130,"line":142},[128,104973,104974],{"class":176},"...\n",[128,104976,104977],{"class":130,"line":156},[128,104978,99067],{"class":176},[19,104980,104981,104982,104985],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[114,104983,104984],{},"freejoint"," 的方块。",[19,104987,104988],{},"编译模型：",[106,104990,104992],{"className":122,"code":104991,"language":124,"meta":112,"style":112},"model = mujoco.MjModel.from_xml_string(XML)\n",[114,104993,104994],{"__ignoreMap":112},[128,104995,104996,104999,105001,105003,105005],{"class":130,"line":131},[128,104997,104998],{"class":138},"model ",[128,105000,270],{"class":134},[128,105002,104779],{"class":138},[128,105004,104681],{"class":166},[128,105006,180],{"class":138},[19,105008,105009],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,105011,105012],{},"创建数据：",[106,105014,105016],{"className":122,"code":105015,"language":124,"meta":112,"style":112},"data = mujoco.MjData(model)\n",[114,105017,105018],{"__ignoreMap":112},[128,105019,105020,105022,105024],{"class":130,"line":131},[128,105021,2857],{"class":138},[128,105023,270],{"class":134},[128,105025,104793],{"class":138},[19,105027,105028,105030,105031,105033],{},[114,105029,36797],{}," 会保存仿真当前状态。刚创建时，时间是 ",[114,105032,2452],{},"，方块还在初始位置。",[19,105035,105036],{},"推进仿真：",[106,105038,105040],{"className":122,"code":105039,"language":124,"meta":112,"style":112},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[114,105041,105042,105058],{"__ignoreMap":112},[128,105043,105044,105046,105048,105050,105052,105054,105056],{"class":130,"line":131},[128,105045,2404],{"class":134},[128,105047,104868],{"class":138},[128,105049,549],{"class":134},[128,105051,35910],{"class":166},[128,105053,253],{"class":138},[128,105055,4061],{"class":166},[128,105057,34264],{"class":138},[128,105059,105060],{"class":130,"line":142},[128,105061,105062],{"class":138},"    mujoco.mj_step(model, data)\n",[19,105064,105065,105066,105068],{},"每次 ",[114,105067,104582],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[72,105070,105071],{"id":105071},"代码逐行细讲",[19,105073,105074],{},"下面把完整代码按新手视角拆开讲。",[106,105076,105077],{"className":122,"code":104942,"language":124,"meta":112,"style":112},[114,105078,105079],{"__ignoreMap":112},[128,105080,105081,105083],{"class":130,"line":131},[128,105082,135],{"class":134},[128,105084,104668],{"class":138},[19,105086,105087,105089,105090,3550,105092,3550,105094,1842],{},[114,105088,135],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[114,105091,104043],{},[114,105093,104048],{},[114,105095,105096],{},"mujoco.mj_step",[106,105098,105099],{"className":122,"code":104959,"language":124,"meta":112,"style":112},[114,105100,105101,105109,105113],{"__ignoreMap":112},[128,105102,105103,105105,105107],{"class":130,"line":131},[128,105104,104681],{"class":166},[128,105106,170],{"class":134},[128,105108,104686],{"class":176},[128,105110,105111],{"class":130,"line":142},[128,105112,104974],{"class":176},[128,105114,105115],{"class":130,"line":156},[128,105116,99067],{"class":176},[19,105118,105119,105121,105122,105125],{},[114,105120,104681],{}," 是一个变量名。右边的三引号 ",[114,105123,105124],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[106,105127,105128],{"className":56449,"code":104691,"language":56451,"meta":112,"style":112},[114,105129,105130],{"__ignoreMap":112},[128,105131,105132,105134,105136,105139,105141,105144],{"class":130,"line":131},[128,105133,4657],{"class":138},[128,105135,104388],{"class":54685},[128,105137,105138],{"class":199}," model",[128,105140,270],{"class":138},[128,105142,105143],{"class":176},"\"first_sim\"",[128,105145,54692],{"class":138},[19,105147,105148,105149,105152,105153,1842],{},"这是 XML 的根标签。",[114,105150,105151],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[114,105154,105155],{},"first_sim",[106,105157,105158],{"className":56449,"code":104550,"language":56451,"meta":112,"style":112},[114,105159,105160],{"__ignoreMap":112},[128,105161,105162,105164,105166,105168,105170,105172,105174,105176,105178],{"class":130,"line":131},[128,105163,4657],{"class":138},[128,105165,72543],{"class":54685},[128,105167,104561],{"class":199},[128,105169,270],{"class":138},[128,105171,104566],{"class":176},[128,105173,104569],{"class":199},[128,105175,270],{"class":138},[128,105177,104574],{"class":176},[128,105179,104511],{"class":138},[19,105181,105182,105184,105185,105188,105189,105192],{},[114,105183,72543],{}," 用来设置仿真参数。",[114,105186,105187],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[114,105190,105191],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[106,105194,105196],{"className":56449,"code":105195,"language":56451,"meta":112,"style":112},"\u003Cworldbody>\n",[114,105197,105198],{"__ignoreMap":112},[128,105199,105200,105202,105205],{"class":130,"line":131},[128,105201,4657],{"class":138},[128,105203,105204],{"class":54685},"worldbody",[128,105206,54692],{"class":138},[19,105208,105209,105211],{},[114,105210,105204],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[106,105213,105215],{"className":56449,"code":105214,"language":56451,"meta":112,"style":112},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[114,105216,105217],{"__ignoreMap":112},[128,105218,105219,105221,105223,105225,105227,105230,105232,105234,105237,105239,105241,105244,105246,105248,105251],{"class":130,"line":131},[128,105220,4657],{"class":138},[128,105222,104487],{"class":54685},[128,105224,18442],{"class":199},[128,105226,270],{"class":138},[128,105228,105229],{"class":176},"\"floor\"",[128,105231,57205],{"class":199},[128,105233,270],{"class":138},[128,105235,105236],{"class":176},"\"plane\"",[128,105238,104503],{"class":199},[128,105240,270],{"class":138},[128,105242,105243],{"class":176},"\"2 2 0.1\"",[128,105245,82141],{"class":199},[128,105247,270],{"class":138},[128,105249,105250],{"class":176},"\"0.8 0.8 0.8 1\"",[128,105252,104511],{"class":138},[19,105254,105255,105256,105258,105259,105262,105263,105266,105267,105269],{},"这行创建地面。",[114,105257,104487],{}," 是几何体。",[114,105260,105261],{},"name=\"floor\""," 是名字。",[114,105264,105265],{},"type=\"plane\""," 表示平面。",[114,105268,58491],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[106,105271,105273],{"className":56449,"code":105272,"language":56451,"meta":112,"style":112},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[114,105274,105275],{"__ignoreMap":112},[128,105276,105277,105279,105281,105283,105285,105287,105289,105291,105293],{"class":130,"line":131},[128,105278,4657],{"class":138},[128,105280,55183],{"class":54685},[128,105282,18442],{"class":199},[128,105284,270],{"class":138},[128,105286,56873],{"class":176},[128,105288,104473],{"class":199},[128,105290,270],{"class":138},[128,105292,104478],{"class":176},[128,105294,54692],{"class":138},[19,105296,105297,105298,1842,105300,105303,105304,105306],{},"这行创建一个刚体，名字叫 ",[114,105299,57096],{},[114,105301,105302],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[114,105305,104536],{},"，也就是离地面 1 米高。",[106,105308,105310],{"className":56449,"code":105309,"language":56451,"meta":112,"style":112},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[114,105311,105312],{"__ignoreMap":112},[128,105313,105314,105316,105318,105320,105322,105325],{"class":130,"line":131},[128,105315,4657],{"class":138},[128,105317,104984],{"class":54685},[128,105319,18442],{"class":199},[128,105321,270],{"class":138},[128,105323,105324],{"class":176},"\"box_free\"",[128,105326,104511],{"class":138},[19,105328,105329,105330,105332],{},"这行很重要。",[114,105331,104984],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[106,105334,105336],{"className":56449,"code":105335,"language":56451,"meta":112,"style":112},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[114,105337,105338],{"__ignoreMap":112},[128,105339,105340,105342,105344,105346,105348,105350,105352,105354,105356,105358,105360,105362,105365,105367,105369,105371,105373,105376],{"class":130,"line":131},[128,105341,4657],{"class":138},[128,105343,104487],{"class":54685},[128,105345,18442],{"class":199},[128,105347,270],{"class":138},[128,105349,104494],{"class":176},[128,105351,57205],{"class":199},[128,105353,270],{"class":138},[128,105355,56873],{"class":176},[128,105357,104503],{"class":199},[128,105359,270],{"class":138},[128,105361,104508],{"class":176},[128,105363,105364],{"class":199}," mass",[128,105366,270],{"class":138},[128,105368,7246],{"class":176},[128,105370,82141],{"class":199},[128,105372,270],{"class":138},[128,105374,105375],{"class":176},"\"1 0 0 1\"",[128,105377,104511],{"class":138},[19,105379,105380,105381,105384,105385,105388,105389,105392,105393,105396],{},"这行给 box body 添加一个盒子形状。",[114,105382,105383],{},"type=\"box\""," 表示形状是盒子。",[114,105386,105387],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[114,105390,105391],{},"mass=\"1\""," 表示质量是 1。",[114,105394,105395],{},"rgba=\"1 0 0 1\""," 表示红色。",[106,105398,105400],{"className":122,"code":105399,"language":124,"meta":112,"style":112},"def main() -> None:\n",[114,105401,105402],{"__ignoreMap":112},[128,105403,105404,105406,105408,105410,105412],{"class":130,"line":131},[128,105405,196],{"class":134},[128,105407,1575],{"class":199},[128,105409,104765],{"class":138},[128,105411,99055],{"class":166},[128,105413,241],{"class":138},[19,105415,105416,105418,105419,105422,105423,105426],{},[114,105417,196],{}," 用来定义函数。这里定义了一个叫 ",[114,105420,105421],{},"main"," 的函数。",[114,105424,105425],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[106,105428,105429],{"className":122,"code":104991,"language":124,"meta":112,"style":112},[114,105430,105431],{"__ignoreMap":112},[128,105432,105433,105435,105437,105439,105441],{"class":130,"line":131},[128,105434,104998],{"class":138},[128,105436,270],{"class":134},[128,105438,104779],{"class":138},[128,105440,104681],{"class":166},[128,105442,180],{"class":138},[19,105444,105445,105446,105449],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[114,105447,105448],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[106,105451,105452],{"className":122,"code":105015,"language":124,"meta":112,"style":112},[114,105453,105454],{"__ignoreMap":112},[128,105455,105456,105458,105460],{"class":130,"line":131},[128,105457,2857],{"class":138},[128,105459,270],{"class":134},[128,105461,104793],{"class":138},[19,105463,105464,105465,105467,105468,105470],{},"这行创建仿真数据。",[114,105466,36797],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[114,105469,36797],{}," 都会变化。",[106,105472,105474],{"className":122,"code":105473,"language":124,"meta":112,"style":112},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[114,105475,105476,105486,105496],{"__ignoreMap":112},[128,105477,105478,105480,105482,105484],{"class":130,"line":131},[128,105479,2469],{"class":166},[128,105481,253],{"class":138},[128,105483,104806],{"class":176},[128,105485,104809],{"class":138},[128,105487,105488,105490,105492,105494],{"class":130,"line":142},[128,105489,2469],{"class":166},[128,105491,253],{"class":138},[128,105493,104818],{"class":176},[128,105495,104821],{"class":138},[128,105497,105498,105500,105502,105504],{"class":130,"line":156},[128,105499,2469],{"class":166},[128,105501,253],{"class":138},[128,105503,104830],{"class":176},[128,105505,104833],{"class":138},[19,105507,105508,105510,105511,105514,105515,105518,105519,105522,105523,105526],{},[114,105509,2469],{}," 用来输出信息。",[114,105512,105513],{},"model.nq"," 是位置变量数量，",[114,105516,105517],{},"model.nv"," 是速度变量数量，",[114,105520,105521],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[114,105524,105525],{},"nu"," 是 0。",[106,105528,105530],{"className":122,"code":105529,"language":124,"meta":112,"style":112},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[114,105531,105532,105542],{"__ignoreMap":112},[128,105533,105534,105536,105538,105540],{"class":130,"line":131},[128,105535,2469],{"class":166},[128,105537,253],{"class":138},[128,105539,104842],{"class":176},[128,105541,104845],{"class":138},[128,105543,105544,105546,105548,105550],{"class":130,"line":142},[128,105545,2469],{"class":166},[128,105547,253],{"class":138},[128,105549,104854],{"class":176},[128,105551,104857],{"class":138},[19,105553,105554,105555,105557,105558,105560,105561,105564],{},"这里打印初始时间和初始位置。",[114,105556,104434],{}," 一开始是 0。",[114,105559,104437],{}," 是位置数组。",[114,105562,105563],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[106,105566,105567],{"className":122,"code":105039,"language":124,"meta":112,"style":112},[114,105568,105569,105585],{"__ignoreMap":112},[128,105570,105571,105573,105575,105577,105579,105581,105583],{"class":130,"line":131},[128,105572,2404],{"class":134},[128,105574,104868],{"class":138},[128,105576,549],{"class":134},[128,105578,35910],{"class":166},[128,105580,253],{"class":138},[128,105582,4061],{"class":166},[128,105584,34264],{"class":138},[128,105586,105587],{"class":130,"line":142},[128,105588,105062],{"class":138},[19,105590,105591,105593,105594,105597,105598,105600,105601,105603],{},[114,105592,2404],{}," 是循环。",[114,105595,105596],{},"range(100)"," 表示循环 100 次。",[114,105599,4737],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[114,105602,104582],{},"，仿真就前进一步。",[106,105605,105607],{"className":122,"code":105606,"language":124,"meta":112,"style":112},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[114,105608,105609,105619],{"__ignoreMap":112},[128,105610,105611,105613,105615,105617],{"class":130,"line":131},[128,105612,2469],{"class":166},[128,105614,253],{"class":138},[128,105616,104896],{"class":176},[128,105618,104845],{"class":138},[128,105620,105621,105623,105625,105627],{"class":130,"line":142},[128,105622,2469],{"class":166},[128,105624,253],{"class":138},[128,105626,104907],{"class":176},[128,105628,104857],{"class":138},[19,105630,105631],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[106,105633,105635],{"className":122,"code":105634,"language":124,"meta":112,"style":112},"if __name__ == \"__main__\":\n    main()\n",[114,105636,105637,105649],{"__ignoreMap":112},[128,105638,105639,105641,105643,105645,105647],{"class":130,"line":131},[128,105640,1800],{"class":134},[128,105642,1803],{"class":166},[128,105644,1806],{"class":134},[128,105646,1809],{"class":176},[128,105648,241],{"class":138},[128,105650,105651],{"class":130,"line":142},[128,105652,1817],{"class":138},[19,105654,105655,105656,105659,105660,1842],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[114,105657,105658],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[114,105661,105658],{},[19,105663,105664],{},"运行:",[106,105666,105668],{"className":27309,"code":105667,"language":27311,"meta":112,"style":112},"python ch1_first_sim.py\n",[114,105669,105670],{"__ignoreMap":112},[128,105671,105672,105674],{"class":130,"line":131},[128,105673,124],{"class":199},[128,105675,104653],{"class":176},[14,105677,105679],{"id":105678},"_5运行结果说明","5.运行结果说明",[19,105681,105682],{},"你应该看到类似输出:",[106,105684,105687],{"className":105685,"code":105686,"language":111,"meta":112},[109],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[114,105688,105686],{"__ignoreMap":112},[19,105690,105691,105693,105694,105697,105698,1842],{},[114,105692,104984],{}," 有 7 个位置变量: ",[114,105695,105696],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[114,105699,105700],{},"vx vy vz wx wy wz",[19,105702,105703,105704,105707],{},"你还会看到 ",[114,105705,105706],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,105709,105711],{"id":105710},"_6验证步骤","6.验证步骤",[19,105713,105714],{},"确认版本:",[106,105716,105717],{"className":27309,"code":104307,"language":27311,"meta":112,"style":112},[114,105718,105719],{"__ignoreMap":112},[128,105720,105721,105723,105725],{"class":130,"line":131},[128,105722,124],{"class":199},[128,105724,33842],{"class":166},[128,105726,104318],{"class":176},[19,105728,105729],{},"确认导入的是官方 bindings:",[106,105731,105733],{"className":27309,"code":105732,"language":27311,"meta":112,"style":112},"python -c \"import mujoco; print(mujoco)\"\n",[114,105734,105735],{"__ignoreMap":112},[128,105736,105737,105739,105741],{"class":130,"line":131},[128,105738,124],{"class":199},[128,105740,33842],{"class":166},[128,105742,105743],{"class":176}," \"import mujoco; print(mujoco)\"\n",[19,105745,105746],{},"运行程序:",[106,105748,105749],{"className":27309,"code":105667,"language":27311,"meta":112,"style":112},[114,105750,105751],{"__ignoreMap":112},[128,105752,105753,105755],{"class":130,"line":131},[128,105754,124],{"class":199},[128,105756,104653],{"class":176},[19,105758,105759,105760,105763,105764,1842],{},"检查 ",[114,105761,105762],{},"final time"," 是否约等于 ",[114,105765,105766],{},"1.0",[19,105768,105769],{},"再做几个小实验：",[26,105771,105772,105782,105790,105803],{},[29,105773,105774,105775,105777,105778,105781],{},"把 ",[114,105776,105302],{}," 改成 ",[114,105779,105780],{},"pos=\"0 0 2\"","，观察初始高度变化。",[29,105783,105774,105784,105777,105786,105789],{},[114,105785,105191],{},[114,105787,105788],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[29,105791,105774,105792,105777,105794,105797,105798,105800,105801,1842],{},[114,105793,105187],{},[114,105795,105796],{},"timestep=\"0.005\"","，观察 100 步后的 ",[114,105799,105762],{}," 是否变成约 ",[114,105802,38721],{},[29,105804,105805,105806,105809],{},"删除 ",[114,105807,105808],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,105811,105812],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,105814,105816],{"id":105815},"_7常见错误与解决方案","7.常见错误与解决方案",[72,105818,105820],{"id":105819},"modulenotfounderror-no-module-named-mujoco",[114,105821,105822],{},"ModuleNotFoundError: No module named 'mujoco'",[19,105824,105825],{},"解决:",[106,105827,105829],{"className":27309,"code":105828,"language":27311,"meta":112,"style":112},"pip install \"mujoco>=2.3\"\n",[114,105830,105831],{"__ignoreMap":112},[128,105832,105833,105835,105837],{"class":130,"line":131},[128,105834,27318],{"class":199},[128,105836,27321],{"class":176},[128,105838,105839],{"class":176}," \"mujoco>=2.3\"\n",[72,105841,105843],{"id":105842},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,105845,105846],{},"先安装系统依赖:",[106,105848,105850],{"className":27309,"code":105849,"language":27311,"meta":112,"style":112},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[114,105851,105852],{"__ignoreMap":112},[128,105853,105854,105856,105858,105860,105862,105865,105867,105870,105872,105875,105877],{"class":130,"line":131},[128,105855,28064],{"class":199},[128,105857,29800],{"class":176},[128,105859,27321],{"class":176},[128,105861,29885],{"class":166},[128,105863,105864],{"class":176}," mesa-libGL",[128,105866,104182],{"class":176},[128,105868,105869],{"class":176}," glfw",[128,105871,104202],{"class":176},[128,105873,105874],{"class":176}," libX11",[128,105876,104215],{"class":176},[128,105878,105879],{"class":176}," libXrandr\n",[72,105881,105883],{"id":105882},"xml-解析失败","XML 解析失败",[19,105885,105886],{},"检查:",[26,105888,105889,105892,105895,105901],{},[29,105890,105891],{},"标签是否闭合",[29,105893,105894],{},"属性是否带引号",[29,105896,105897,105898],{},"根节点是否是 ",[114,105899,105900],{},"\u003Cmujoco>",[29,105902,105903,105905,105906,105909],{},[114,105904,55183],{}," 是否放在 ",[114,105907,105908],{},"\u003Cworldbody>"," 内部",[72,105911,105913,105915,105916],{"id":105912},"final-time-不是严格等于-10",[114,105914,105762],{}," 不是严格等于 ",[114,105917,105766],{},[19,105919,105920],{},"这通常不是错误。浮点数计算可能得到：",[106,105922,105925],{"className":105923,"code":105924,"language":111,"meta":112},[109],"1.0000000000000007\n",[114,105926,105924],{"__ignoreMap":112},[19,105928,105929,105930,105932],{},"只要接近 ",[114,105931,105766],{}," 就正常。",[72,105934,105935],{"id":105935},"方块没有掉下来",[19,105937,105938],{},"检查：",[26,105940,105941,105947,105953,105958],{},[29,105942,105943,105944],{},"方块 body 里是否有 ",[114,105945,105946],{},"\u003Cfreejoint\u002F>",[29,105948,105949,105950],{},"重力是否是 ",[114,105951,105952],{},"0 0 -9.81",[29,105954,105955,105956],{},"是否真的调用了 ",[114,105957,104053],{},[29,105959,105960,105961,105963,105964],{},"你看的是否是 ",[114,105962,105706],{},"，不是 ",[114,105965,105966],{},"initial qpos",[14,105968,105970],{"id":105969},"_8本章小结","8.本章小结",[19,105972,105973],{},"本章你已经完成了 MuJoCo 的最小闭环：",[106,105975,105978],{"className":105976,"code":105977,"language":111,"meta":112},[109],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[114,105979,105977],{"__ignoreMap":112},[19,105981,105982],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[3659,105984,105985],{},"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":112,"searchDepth":142,"depth":142,"links":105987},[105988,105989,105990,105995,105999,106000,106001,106009],{"id":104014,"depth":142,"text":104015},{"id":104137,"depth":142,"text":104138},{"id":104411,"depth":142,"text":104412,"children":105991},[105992,105993,105994],{"id":104449,"depth":156,"text":104450},{"id":104543,"depth":156,"text":104544},{"id":104595,"depth":156,"text":104596},{"id":104619,"depth":142,"text":104620,"children":105996},[105997,105998],{"id":104936,"depth":156,"text":104936},{"id":105071,"depth":156,"text":105071},{"id":105678,"depth":142,"text":105679},{"id":105710,"depth":142,"text":105711},{"id":105815,"depth":142,"text":105816,"children":106002},[106003,106004,106005,106006,106008],{"id":105819,"depth":156,"text":105822},{"id":105842,"depth":156,"text":105843},{"id":105882,"depth":156,"text":105883},{"id":105912,"depth":156,"text":106007},"final time 不是严格等于 1.0",{"id":105935,"depth":156,"text":105935},{"id":105969,"depth":142,"text":105970},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":104006,"description":112},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":106016,"title":106017,"body":106018,"description":112,"extension":3687,"meta":107674,"navigation":159,"path":107675,"seo":107676,"stem":107677,"__hash__":107678},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":106019,"toc":107650},[106020,106023,106025,106028,106031,106048,106143,106146,106152,106154,106156,106180,106183,106197,106200,106241,106243,106256,106258,106261,106309,106321,106324,106327,106333,106346,106413,106416,106435,106438,106441,106447,106449,106458,106461,106465,106474,106556,106565,106569,106575,106589,106599,106601,106931,106934,106946,106948,106959,106961,106964,106982,106985,106988,107006,107017,107020,107035,107045,107047,107068,107085,107105,107111,107151,107167,107183,107189,107192,107216,107232,107237,107267,107284,107309,107312,107327,107336,107351,107360,107375,107382,107384,107394,107407,107414,107417,107456,107463,107465,107517,107519,107525,107528,107535,107542,107545,107547,107565,107568,107571,107605,107617,107619,107622,107644,107647],[10,106021,106017],{"id":106022},"_2xml-与-mjcf-物理建模基础",[14,106024,104015],{"id":104014},[19,106026,106027],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,106029,106030],{},"本章结束后，你应该能看懂一个简单模型里：",[26,106032,106033,106036,106039,106042,106045],{},[29,106034,106035],{},"地面在哪里。",[29,106037,106038],{},"物体初始位置在哪里。",[29,106040,106041],{},"几何体是什么形状。",[29,106043,106044],{},"哪些 body 可以自由运动。",[29,106046,106047],{},"如何用名字在 Python 里找到 XML 中的对象。",[3891,106049,106050,106060],{},[3894,106051,106052],{},[3897,106053,106054,106057],{},[3900,106055,106056],{"align":27223},"标签",[3900,106058,106059],{"align":27223},"作用",[3938,106061,106062,106071,106081,106090,106100,106110,106123,106133],{},[3897,106063,106064,106068],{},[3943,106065,106066],{"align":27223},[114,106067,105900],{},[3943,106069,106070],{"align":27223},"根节点",[3897,106072,106073,106078],{},[3943,106074,106075],{"align":27223},[114,106076,106077],{},"\u003Coption>",[3943,106079,106080],{"align":27223},"仿真参数",[3897,106082,106083,106087],{},[3943,106084,106085],{"align":27223},[114,106086,105908],{},[3943,106088,106089],{"align":27223},"世界中的物体",[3897,106091,106092,106097],{},[3943,106093,106094],{"align":27223},[114,106095,106096],{},"\u003Cbody>",[3943,106098,106099],{"align":27223},"刚体",[3897,106101,106102,106107],{},[3943,106103,106104],{"align":27223},[114,106105,106106],{},"\u003Cgeom>",[3943,106108,106109],{"align":27223},"几何体、碰撞体、可视体",[3897,106111,106112,106120],{},[3943,106113,106114,28465,106117],{"align":27223},[114,106115,106116],{},"\u003Cjoint>",[114,106118,106119],{},"\u003Cfreejoint>",[3943,106121,106122],{"align":27223},"关节",[3897,106124,106125,106130],{},[3943,106126,106127],{"align":27223},[114,106128,106129],{},"\u003Csite>",[3943,106131,106132],{"align":27223},"标记点",[3897,106134,106135,106140],{},[3943,106136,106137],{"align":27223},[114,106138,106139],{},"\u003Cactuator>",[3943,106141,106142],{"align":27223},"控制器",[19,106144,106145],{},"初学时可以先记住：",[106,106147,106150],{"className":106148,"code":106149,"language":111,"meta":112},[109],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[114,106151,106149],{"__ignoreMap":112},[14,106153,104138],{"id":104137},[19,106155,104141],{},[106,106157,106159],{"className":27309,"code":106158,"language":27311,"meta":112,"style":112},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[114,106160,106161],{"__ignoreMap":112},[128,106162,106163,106165,106167,106169,106171,106173,106175,106177],{"class":130,"line":131},[128,106164,28064],{"class":199},[128,106166,29800],{"class":176},[128,106168,27321],{"class":176},[128,106170,29885],{"class":166},[128,106172,105864],{"class":176},[128,106174,104182],{"class":176},[128,106176,105869],{"class":176},[128,106178,106179],{"class":176}," glfw-devel\n",[19,106181,106182],{},"pip:",[106,106184,106185],{"className":27309,"code":104287,"language":27311,"meta":112,"style":112},[114,106186,106187],{"__ignoreMap":112},[128,106188,106189,106191,106193,106195],{"class":130,"line":131},[128,106190,27318],{"class":199},[128,106192,27321],{"class":176},[128,106194,104298],{"class":176},[128,106196,104301],{"class":176},[19,106198,106199],{},"conda:",[106,106201,106203],{"className":27309,"code":106202,"language":27311,"meta":112,"style":112},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[114,106204,106205,106222,106231],{"__ignoreMap":112},[128,106206,106207,106209,106211,106213,106216,106218,106220],{"class":130,"line":131},[128,106208,33814],{"class":199},[128,106210,32660],{"class":176},[128,106212,28602],{"class":166},[128,106214,106215],{"class":176}," mujoco-xml",[128,106217,104343],{"class":176},[128,106219,104346],{"class":166},[128,106221,104349],{"class":166},[128,106223,106224,106226,106228],{"class":130,"line":142},[128,106225,33814],{"class":199},[128,106227,104356],{"class":176},[128,106229,106230],{"class":176}," mujoco-xml\n",[128,106232,106233,106235,106237,106239],{"class":130,"line":156},[128,106234,27318],{"class":199},[128,106236,27321],{"class":176},[128,106238,104298],{"class":176},[128,106240,104301],{"class":176},[19,106242,104372],{},[26,106244,106245,106248,106253],{},[29,106246,106247],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[29,106249,106250,106251,1842],{},"本章使用基础标签，适用于 ",[114,106252,104394],{},[29,106254,106255],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,106257,104412],{"id":104411},[19,106259,106260],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[106,106262,106264],{"className":56449,"code":106263,"language":56451,"meta":112,"style":112},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[114,106265,106266,106280,106288,106293,106301],{"__ignoreMap":112},[128,106267,106268,106270,106272,106274,106276,106278],{"class":130,"line":131},[128,106269,4657],{"class":138},[128,106271,104388],{"class":54685},[128,106273,105138],{"class":199},[128,106275,270],{"class":138},[128,106277,1189],{"class":176},[128,106279,54692],{"class":138},[128,106281,106282,106284,106286],{"class":130,"line":142},[128,106283,55526],{"class":138},[128,106285,105204],{"class":54685},[128,106287,54692],{"class":138},[128,106289,106290],{"class":130,"line":156},[128,106291,106292],{"class":138},"    ...\n",[128,106294,106295,106297,106299],{"class":130,"line":163},[128,106296,55799],{"class":138},[128,106298,105204],{"class":54685},[128,106300,54692],{"class":138},[128,106302,106303,106305,106307],{"class":130,"line":183},[128,106304,55168],{"class":138},[128,106306,104388],{"class":54685},[128,106308,54692],{"class":138},[19,106310,106311,106313,106314,106316,106317,106320],{},[114,106312,55183],{}," 表示刚体。",[114,106315,104487],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[114,106318,106319],{},"joint"," 表示刚体相对父刚体如何运动。",[72,106322,106323],{"id":106323},"层级结构非常重要",[19,106325,106326],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[106,106328,106331],{"className":106329,"code":106330,"language":111,"meta":112},[109],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[114,106332,106330],{"__ignoreMap":112},[19,106334,106335,3330,106338,106341,106342,106345],{},[114,106336,106337],{},"red_box_geom",[114,106339,106340],{},"box_center"," 都属于 ",[114,106343,106344],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[106,106347,106349],{"className":56449,"code":106348,"language":56451,"meta":112,"style":112},"\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",[114,106350,106351,106371,106385,106405],{"__ignoreMap":112},[128,106352,106353,106355,106357,106359,106361,106363,106365,106367,106369],{"class":130,"line":131},[128,106354,4657],{"class":138},[128,106356,55183],{"class":54685},[128,106358,18442],{"class":199},[128,106360,270],{"class":138},[128,106362,56873],{"class":176},[128,106364,104473],{"class":199},[128,106366,270],{"class":138},[128,106368,104478],{"class":176},[128,106370,54692],{"class":138},[128,106372,106373,106375,106377,106379,106381,106383],{"class":130,"line":142},[128,106374,55526],{"class":138},[128,106376,104984],{"class":54685},[128,106378,18442],{"class":199},[128,106380,270],{"class":138},[128,106382,105324],{"class":176},[128,106384,104511],{"class":138},[128,106386,106387,106389,106391,106393,106395,106397,106399,106401,106403],{"class":130,"line":156},[128,106388,55526],{"class":138},[128,106390,104487],{"class":54685},[128,106392,57205],{"class":199},[128,106394,270],{"class":138},[128,106396,56873],{"class":176},[128,106398,104503],{"class":199},[128,106400,270],{"class":138},[128,106402,104508],{"class":176},[128,106404,104511],{"class":138},[128,106406,106407,106409,106411],{"class":130,"line":163},[128,106408,55168],{"class":138},[128,106410,55183],{"class":54685},[128,106412,54692],{"class":138},[19,106414,106415],{},"含义:",[26,106417,106418,106424,106429,106432],{},[29,106419,106420,106421,106423],{},"创建名为 ",[114,106422,57096],{}," 的刚体",[29,106425,106426,106427],{},"初始位置在世界坐标 ",[114,106428,104536],{},[29,106430,106431],{},"它有一个自由关节",[29,106433,106434],{},"它有一个盒子几何体",[72,106436,106437],{"id":106437},"坐标怎么理解",[19,106439,106440],{},"MuJoCo 默认使用三维坐标：",[106,106442,106445],{"className":106443,"code":106444,"language":111,"meta":112},[109],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[114,106446,106444],{"__ignoreMap":112},[19,106448,18157],{},[106,106450,106452],{"className":56449,"code":106451,"language":56451,"meta":112,"style":112},"pos=\"0 0 1\"\n",[114,106453,106454],{"__ignoreMap":112},[128,106455,106456],{"class":130,"line":131},[128,106457,106451],{"class":138},[19,106459,106460],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[72,106462,106464],{"id":106463},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,106466,106467,106468,85903,106471,106473],{},"不同 ",[114,106469,106470],{},"type",[114,106472,34965],{}," 含义不同：",[3891,106475,106476,106491],{},[3894,106477,106478],{},[3897,106479,106480,106484,106489],{},[3900,106481,106482],{"align":27223},[114,106483,106470],{},[3900,106485,106486,106488],{"align":27223},[114,106487,34965],{}," 示例",[3900,106490,104068],{"align":27223},[3938,106492,106493,106507,106522,106541],{},[3897,106494,106495,106499,106504],{},[3943,106496,106497],{"align":27223},[114,106498,57096],{},[3943,106500,106501],{"align":27223},[114,106502,106503],{},"size=\"0.1 0.2 0.3\"",[3943,106505,106506],{"align":27223},"x\u002Fy\u002Fz 半边长，不是完整长度",[3897,106508,106509,106514,106519],{},[3943,106510,106511],{"align":27223},[114,106512,106513],{},"sphere",[3943,106515,106516],{"align":27223},[114,106517,106518],{},"size=\"0.1\"",[3943,106520,106521],{"align":27223},"球半径",[3897,106523,106524,106529,106534],{},[3943,106525,106526],{"align":27223},[114,106527,106528],{},"capsule",[3943,106530,106531],{"align":27223},[114,106532,106533],{},"size=\"0.03\"",[3943,106535,106536,106537,106540],{"align":27223},"胶囊半径，长度常用 ",[114,106538,106539],{},"fromto"," 指定",[3897,106542,106543,106548,106553],{},[3943,106544,106545],{"align":27223},[114,106546,106547],{},"plane",[3943,106549,106550],{"align":27223},[114,106551,106552],{},"size=\"3 3 0.1\"",[3943,106554,106555],{"align":27223},"可视平面大小，通常当地面",[19,106557,106558,106559,106561,106562,106564],{},"最容易踩坑的是 box：",[114,106560,105387],{}," 表示边长大约是 ",[114,106563,35504],{},"，因为 MuJoCo 用的是半边长。",[72,106566,106568],{"id":106567},"site-是什么","site 是什么",[19,106570,106571,106574],{},[114,106572,106573],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[26,106576,106577,106580,106583,106586],{},[29,106578,106579],{},"标记机械臂末端。",[29,106581,106582],{},"标记目标位置。",[29,106584,106585],{},"放传感器或相机参考点。",[29,106587,106588],{},"在 Python 中读取某个关键点的世界坐标。",[19,106590,106591,106592,3330,106595,106598],{},"在后面的 Reacher 任务中，",[114,106593,106594],{},"tip",[114,106596,106597],{},"target"," 就会用 site 表示。",[14,106600,104620],{"id":104619},[106,106602,106604],{"className":122,"code":106603,"language":124,"meta":112,"style":112},"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",[114,106605,106606,106612,106622,106626,106630,106638,106643,106647,106651,106655,106660,106664,106669,106674,106679,106684,106688,106692,106696,106700,106704,106708,106720,106732,106740,106744,106759,106774,106778,106791,106806,106819,106832,106836,106852,106856,106860,106871,106883,106895,106907,106911,106915,106927],{"__ignoreMap":112},[128,106607,106608,106610],{"class":130,"line":131},[128,106609,135],{"class":134},[128,106611,104668],{"class":138},[128,106613,106614,106616,106618,106620],{"class":130,"line":142},[128,106615,135],{"class":134},[128,106617,34851],{"class":138},[128,106619,279],{"class":134},[128,106621,34856],{"class":138},[128,106623,106624],{"class":130,"line":156},[128,106625,160],{"emptyLinePlaceholder":159},[128,106627,106628],{"class":130,"line":163},[128,106629,160],{"emptyLinePlaceholder":159},[128,106631,106632,106634,106636],{"class":130,"line":183},[128,106633,104681],{"class":166},[128,106635,170],{"class":134},[128,106637,104686],{"class":176},[128,106639,106640],{"class":130,"line":188},[128,106641,106642],{"class":176},"\u003Cmujoco model=\"xml_basic\">\n",[128,106644,106645],{"class":130,"line":193},[128,106646,104696],{"class":176},[128,106648,106649],{"class":130,"line":206},[128,106650,160],{"emptyLinePlaceholder":159},[128,106652,106653],{"class":130,"line":221},[128,106654,104705],{"class":176},[128,106656,106657],{"class":130,"line":230},[128,106658,106659],{"class":176},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[128,106661,106662],{"class":130,"line":235},[128,106663,160],{"emptyLinePlaceholder":159},[128,106665,106666],{"class":130,"line":244},[128,106667,106668],{"class":176},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[128,106670,106671],{"class":130,"line":287},[128,106672,106673],{"class":176},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[128,106675,106676],{"class":130,"line":301},[128,106677,106678],{"class":176},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[128,106680,106681],{"class":130,"line":310},[128,106682,106683],{"class":176},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[128,106685,106686],{"class":130,"line":323},[128,106687,104734],{"class":176},[128,106689,106690],{"class":130,"line":330},[128,106691,104739],{"class":176},[128,106693,106694],{"class":130,"line":335},[128,106695,104744],{"class":176},[128,106697,106698],{"class":130,"line":340},[128,106699,99067],{"class":176},[128,106701,106702],{"class":130,"line":351},[128,106703,160],{"emptyLinePlaceholder":159},[128,106705,106706],{"class":130,"line":384},[128,106707,160],{"emptyLinePlaceholder":159},[128,106709,106710,106712,106714,106716,106718],{"class":130,"line":414},[128,106711,196],{"class":134},[128,106713,1575],{"class":199},[128,106715,104765],{"class":138},[128,106717,99055],{"class":166},[128,106719,241],{"class":138},[128,106721,106722,106724,106726,106728,106730],{"class":130,"line":419},[128,106723,104774],{"class":138},[128,106725,270],{"class":134},[128,106727,104779],{"class":138},[128,106729,104681],{"class":166},[128,106731,180],{"class":138},[128,106733,106734,106736,106738],{"class":130,"line":424},[128,106735,104788],{"class":138},[128,106737,270],{"class":134},[128,106739,104793],{"class":138},[128,106741,106742],{"class":130,"line":434},[128,106743,160],{"emptyLinePlaceholder":159},[128,106745,106746,106749,106751,106754,106757],{"class":130,"line":447},[128,106747,106748],{"class":138},"    box_body_id ",[128,106750,270],{"class":134},[128,106752,106753],{"class":138}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[128,106755,106756],{"class":176},"\"red_box\"",[128,106758,180],{"class":138},[128,106760,106761,106764,106766,106769,106772],{"class":130,"line":459},[128,106762,106763],{"class":138},"    site_id ",[128,106765,270],{"class":134},[128,106767,106768],{"class":138}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[128,106770,106771],{"class":176},"\"box_center\"",[128,106773,180],{"class":138},[128,106775,106776],{"class":130,"line":471},[128,106777,160],{"emptyLinePlaceholder":159},[128,106779,106780,106782,106785,106787,106789],{"class":130,"line":483},[128,106781,209],{"class":134},[128,106783,106784],{"class":138}," box_body_id ",[128,106786,4657],{"class":134},[128,106788,7659],{"class":166},[128,106790,241],{"class":138},[128,106792,106793,106796,106799,106801,106804],{"class":130,"line":495},[128,106794,106795],{"class":134},"        raise",[128,106797,106798],{"class":166}," RuntimeError",[128,106800,253],{"class":138},[128,106802,106803],{"class":176},"\"body red_box not found\"",[128,106805,180],{"class":138},[128,106807,106808,106810,106813,106815,106817],{"class":130,"line":507},[128,106809,209],{"class":134},[128,106811,106812],{"class":138}," site_id ",[128,106814,4657],{"class":134},[128,106816,7659],{"class":166},[128,106818,241],{"class":138},[128,106820,106821,106823,106825,106827,106830],{"class":130,"line":519},[128,106822,106795],{"class":134},[128,106824,106798],{"class":166},[128,106826,253],{"class":138},[128,106828,106829],{"class":176},"\"site box_center not found\"",[128,106831,180],{"class":138},[128,106833,106834],{"class":130,"line":524},[128,106835,160],{"emptyLinePlaceholder":159},[128,106837,106838,106840,106842,106844,106846,106848,106850],{"class":130,"line":529},[128,106839,543],{"class":134},[128,106841,104868],{"class":138},[128,106843,549],{"class":134},[128,106845,35910],{"class":166},[128,106847,253],{"class":138},[128,106849,3143],{"class":166},[128,106851,34264],{"class":138},[128,106853,106854],{"class":130,"line":540},[128,106855,104883],{"class":138},[128,106857,106858],{"class":130,"line":555},[128,106859,160],{"emptyLinePlaceholder":159},[128,106861,106862,106864,106866,106869],{"class":130,"line":576},[128,106863,437],{"class":166},[128,106865,253],{"class":138},[128,106867,106868],{"class":176},"\"simulation time:\"",[128,106870,104845],{"class":138},[128,106872,106873,106875,106877,106880],{"class":130,"line":584},[128,106874,437],{"class":166},[128,106876,253],{"class":138},[128,106878,106879],{"class":176},"\"box body position:\"",[128,106881,106882],{"class":138},", data.xpos[box_body_id].copy())\n",[128,106884,106885,106887,106889,106892],{"class":130,"line":593},[128,106886,437],{"class":166},[128,106888,253],{"class":138},[128,106890,106891],{"class":176},"\"site position:\"",[128,106893,106894],{"class":138},", data.site_xpos[site_id].copy())\n",[128,106896,106897,106899,106901,106904],{"class":130,"line":598},[128,106898,437],{"class":166},[128,106900,253],{"class":138},[128,106902,106903],{"class":176},"\"box qpos:\"",[128,106905,106906],{"class":138},", np.array(data.qpos))\n",[128,106908,106909],{"class":130,"line":603},[128,106910,160],{"emptyLinePlaceholder":159},[128,106912,106913],{"class":130,"line":614},[128,106914,160],{"emptyLinePlaceholder":159},[128,106916,106917,106919,106921,106923,106925],{"class":130,"line":625},[128,106918,1800],{"class":134},[128,106920,1803],{"class":166},[128,106922,1806],{"class":134},[128,106924,1809],{"class":176},[128,106926,241],{"class":138},[128,106928,106929],{"class":130,"line":633},[128,106930,1817],{"class":138},[19,106932,106933],{},"保存为：",[106,106935,106937],{"className":27309,"code":106936,"language":27311,"meta":112,"style":112},"touch ch2_xml_basic.py\n",[114,106938,106939],{"__ignoreMap":112},[128,106940,106941,106943],{"class":130,"line":131},[128,106942,104650],{"class":199},[128,106944,106945],{"class":176}," ch2_xml_basic.py\n",[19,106947,105664],{},[106,106949,106951],{"className":27309,"code":106950,"language":27311,"meta":112,"style":112},"python ch2_xml_basic.py\n",[114,106952,106953],{"__ignoreMap":112},[128,106954,106955,106957],{"class":130,"line":131},[128,106956,124],{"class":199},[128,106958,106945],{"class":176},[72,106960,104936],{"id":104936},[19,106962,106963],{},"用名字查找 body：",[106,106965,106967],{"className":122,"code":106966,"language":124,"meta":112,"style":112},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[114,106968,106969],{"__ignoreMap":112},[128,106970,106971,106974,106976,106978,106980],{"class":130,"line":131},[128,106972,106973],{"class":138},"box_body_id ",[128,106975,270],{"class":134},[128,106977,106753],{"class":138},[128,106979,106756],{"class":176},[128,106981,180],{"class":138},[19,106983,106984],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,106986,106987],{},"用名字查找 site：",[106,106989,106991],{"className":122,"code":106990,"language":124,"meta":112,"style":112},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[114,106992,106993],{"__ignoreMap":112},[128,106994,106995,106998,107000,107002,107004],{"class":130,"line":131},[128,106996,106997],{"class":138},"site_id ",[128,106999,270],{"class":134},[128,107001,106768],{"class":138},[128,107003,106771],{"class":176},[128,107005,180],{"class":138},[19,107007,107008,107009,107012,107013,107016],{},"注意第二个参数是对象类型。查 body 就用 ",[114,107010,107011],{},"mjOBJ_BODY","，查 site 就用 ",[114,107014,107015],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,107018,107019],{},"读取世界坐标：",[106,107021,107023],{"className":122,"code":107022,"language":124,"meta":112,"style":112},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[114,107024,107025,107030],{"__ignoreMap":112},[128,107026,107027],{"class":130,"line":131},[128,107028,107029],{"class":138},"data.xpos[box_body_id]\n",[128,107031,107032],{"class":130,"line":142},[128,107033,107034],{"class":138},"data.site_xpos[site_id]\n",[19,107036,107037,107040,107041,107044],{},[114,107038,107039],{},"xpos"," 是 body 的世界坐标，",[114,107042,107043],{},"site_xpos"," 是 site 的世界坐标。",[72,107046,105071],{"id":105071},[106,107048,107050],{"className":122,"code":107049,"language":124,"meta":112,"style":112},"import mujoco\nimport numpy as np\n",[114,107051,107052,107058],{"__ignoreMap":112},[128,107053,107054,107056],{"class":130,"line":131},[128,107055,135],{"class":134},[128,107057,104668],{"class":138},[128,107059,107060,107062,107064,107066],{"class":130,"line":142},[128,107061,135],{"class":134},[128,107063,34851],{"class":138},[128,107065,279],{"class":134},[128,107067,34856],{"class":138},[19,107069,107070,107071,107074,107075,107078,107079,3550,107082,1842],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[114,107072,107073],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[114,107076,107077],{},"as np"," 是习惯写法，后面就可以写 ",[114,107080,107081],{},"np.array(...)",[114,107083,107084],{},"np.round(...)",[106,107086,107087],{"className":122,"code":104959,"language":124,"meta":112,"style":112},[114,107088,107089,107097,107101],{"__ignoreMap":112},[128,107090,107091,107093,107095],{"class":130,"line":131},[128,107092,104681],{"class":166},[128,107094,170],{"class":134},[128,107096,104686],{"class":176},[128,107098,107099],{"class":130,"line":142},[128,107100,104974],{"class":176},[128,107102,107103],{"class":130,"line":156},[128,107104,99067],{"class":176},[19,107106,107107,107108,1842],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[114,107109,107110],{},"mujoco.MjModel.from_xml_string(XML)",[106,107112,107114],{"className":56449,"code":107113,"language":56451,"meta":112,"style":112},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[114,107115,107116],{"__ignoreMap":112},[128,107117,107118,107120,107122,107124,107126,107128,107130,107132,107135,107137,107139,107142,107144,107146,107149],{"class":130,"line":131},[128,107119,4657],{"class":138},[128,107121,106573],{"class":54685},[128,107123,18442],{"class":199},[128,107125,270],{"class":138},[128,107127,106771],{"class":176},[128,107129,104473],{"class":199},[128,107131,270],{"class":138},[128,107133,107134],{"class":176},"\"0 0 0\"",[128,107136,104503],{"class":199},[128,107138,270],{"class":138},[128,107140,107141],{"class":176},"\"0.03\"",[128,107143,82141],{"class":199},[128,107145,270],{"class":138},[128,107147,107148],{"class":176},"\"0 1 0 1\"",[128,107150,104511],{"class":138},[19,107152,107153,107155,107156,107159,107160,107162,107163,107166],{},[114,107154,106573],{}," 是标记点。",[114,107157,107158],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[114,107161,106533],{}," 表示显示出来的小球大小。",[114,107164,107165],{},"rgba=\"0 1 0 1\""," 表示绿色。",[106,107168,107169],{"className":122,"code":106966,"language":124,"meta":112,"style":112},[114,107170,107171],{"__ignoreMap":112},[128,107172,107173,107175,107177,107179,107181],{"class":130,"line":131},[128,107174,106973],{"class":138},[128,107176,270],{"class":134},[128,107178,106753],{"class":138},[128,107180,106756],{"class":176},[128,107182,180],{"class":138},[19,107184,107185,107186,107188],{},"这行的作用是：根据名字 ",[114,107187,106756],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,107190,107191],{},"拆开看：",[26,107193,107194,107200,107205,107211],{},[29,107195,107196,107199],{},[114,107197,107198],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[29,107201,107202,107204],{},[114,107203,105448],{}," 是被查询的模型。",[29,107206,107207,107210],{},[114,107208,107209],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[29,107212,107213,107215],{},[114,107214,106756],{}," 是 XML 里写的名字。",[106,107217,107218],{"className":122,"code":106990,"language":124,"meta":112,"style":112},[114,107219,107220],{"__ignoreMap":112},[128,107221,107222,107224,107226,107228,107230],{"class":130,"line":131},[128,107223,106997],{"class":138},[128,107225,270],{"class":134},[128,107227,106768],{"class":138},[128,107229,106771],{"class":176},[128,107231,180],{"class":138},[19,107233,107234,107235,1842],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[114,107236,106771],{},[106,107238,107240],{"className":122,"code":107239,"language":124,"meta":112,"style":112},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[114,107241,107242,107254],{"__ignoreMap":112},[128,107243,107244,107246,107248,107250,107252],{"class":130,"line":131},[128,107245,1800],{"class":134},[128,107247,106784],{"class":138},[128,107249,4657],{"class":134},[128,107251,7659],{"class":166},[128,107253,241],{"class":138},[128,107255,107256,107259,107261,107263,107265],{"class":130,"line":142},[128,107257,107258],{"class":134},"    raise",[128,107260,106798],{"class":166},[128,107262,253],{"class":138},[128,107264,106803],{"class":176},[128,107266,180],{"class":138},[19,107268,107269,107271,107272,107275,107276,107279,107280,107283],{},[114,107270,1800],{}," 是条件判断。",[114,107273,107274],{},"mj_name2id"," 找不到对象时会返回 ",[114,107277,107278],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[114,107281,107282],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[106,107285,107287],{"className":122,"code":107286,"language":124,"meta":112,"style":112},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[114,107288,107289,107305],{"__ignoreMap":112},[128,107290,107291,107293,107295,107297,107299,107301,107303],{"class":130,"line":131},[128,107292,2404],{"class":134},[128,107294,104868],{"class":138},[128,107296,549],{"class":134},[128,107298,35910],{"class":166},[128,107300,253],{"class":138},[128,107302,3143],{"class":166},[128,107304,34264],{"class":138},[128,107306,107307],{"class":130,"line":142},[128,107308,105062],{"class":138},[19,107310,107311],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[106,107313,107315],{"className":122,"code":107314,"language":124,"meta":112,"style":112},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[114,107316,107317],{"__ignoreMap":112},[128,107318,107319,107321,107323,107325],{"class":130,"line":131},[128,107320,2469],{"class":166},[128,107322,253],{"class":138},[128,107324,106879],{"class":176},[128,107326,106882],{"class":138},[19,107328,107329,107331,107332,107335],{},[114,107330,104446],{}," 保存所有 body 的世界坐标。",[114,107333,107334],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[106,107337,107339],{"className":122,"code":107338,"language":124,"meta":112,"style":112},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[114,107340,107341],{"__ignoreMap":112},[128,107342,107343,107345,107347,107349],{"class":130,"line":131},[128,107344,2469],{"class":166},[128,107346,253],{"class":138},[128,107348,106891],{"class":176},[128,107350,106894],{"class":138},[19,107352,107353,107356,107357,107359],{},[114,107354,107355],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[114,107358,106340],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[106,107361,107363],{"className":122,"code":107362,"language":124,"meta":112,"style":112},"print(\"box qpos:\", np.array(data.qpos))\n",[114,107364,107365],{"__ignoreMap":112},[128,107366,107367,107369,107371,107373],{"class":130,"line":131},[128,107368,2469],{"class":166},[128,107370,253],{"class":138},[128,107372,106903],{"class":176},[128,107374,106906],{"class":138},[19,107376,107377,107378,107381],{},"这里打印广义位置数组。",[114,107379,107380],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,107383,105679],{"id":105678},[19,107385,107386,107387,107390,107391,1842],{},"程序会输出 ",[114,107388,107389],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[114,107392,107393],{},"qpos",[19,107395,107396,107398,107399,107402,107403,107406],{},[114,107397,107334],{}," 是 body 的世界坐标位置。",[114,107400,107401],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[114,107404,107405],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,107408,85595,107409,85903,107411,107413],{},[114,107410,106340],{},[114,107412,107158],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,107415,107416],{},"如果你把 site 改成：",[106,107418,107420],{"className":56449,"code":107419,"language":56451,"meta":112,"style":112},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[114,107421,107422],{"__ignoreMap":112},[128,107423,107424,107426,107428,107430,107432,107435,107437,107439,107442,107444,107446,107448,107450,107452,107454],{"class":130,"line":131},[128,107425,4657],{"class":138},[128,107427,106573],{"class":54685},[128,107429,18442],{"class":199},[128,107431,270],{"class":138},[128,107433,107434],{"class":176},"\"box_top\"",[128,107436,104473],{"class":199},[128,107438,270],{"class":138},[128,107440,107441],{"class":176},"\"0 0 0.15\"",[128,107443,104503],{"class":199},[128,107445,270],{"class":138},[128,107447,107141],{"class":176},[128,107449,82141],{"class":199},[128,107451,270],{"class":138},[128,107453,107148],{"class":176},[128,107455,104511],{"class":138},[19,107457,107458,107459,107462],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[114,107460,107461],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,107464,105711],{"id":105710},[26,107466,107467,107476,107479,107486,107492,107503],{},[29,107468,105774,107469,107471,107472,105777,107474,1842],{},[114,107470,106344],{}," 的初始高度从 ",[114,107473,2592],{},[114,107475,409],{},[29,107477,107478],{},"重新运行程序。",[29,107480,107481,107482,107485],{},"观察 ",[114,107483,107484],{},"box qpos"," 和最终位置是否变化。",[29,107487,107488,107489,107491],{},"故意把 ",[114,107490,106573],{}," 名称改错，确认程序能报错。",[29,107493,105774,107494,107496,107497,105777,107499,107502],{},[114,107495,104487],{}," 的颜色 ",[114,107498,105395],{},[114,107500,107501],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[29,107504,105774,107505,85903,107507,105777,107510,107513,107514,107516],{},[114,107506,106340],{},[114,107508,107509],{},"pos",[114,107511,107512],{},"0 0 0.2","，观察 ",[114,107515,107461],{}," 如何变化。",[14,107518,105816],{"id":105815},[72,107520,107522],{"id":107521},"xml-error-schema-violation",[114,107523,107524],{},"XML Error: Schema violation",[19,107526,107527],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[72,107529,107531,84663,107533],{"id":107530},"mj_name2id-返回-1",[114,107532,107274],{},[114,107534,107278],{},[19,107536,107537,107538,107541],{},"说明名字没有找到。检查 XML 中 ",[114,107539,107540],{},"name=\"...\"","，并确认对象类型正确。",[72,107543,107544],{"id":107544},"物体不下落",[19,107546,105886],{},[26,107548,107549,107554,107559],{},[29,107550,107551,107552],{},"body 是否有 ",[114,107553,104984],{},[29,107555,107556,107557],{},"gravity 是否为 ",[114,107558,105952],{},[29,107560,107561,107562,107564],{},"body 是否被固定在 ",[114,107563,105204],{}," 中",[72,107566,107567],{"id":107567},"坐标看起来不符合预期",[19,107569,107570],{},"先区分两种坐标：",[3891,107572,107573,107582],{},[3894,107574,107575],{},[3897,107576,107577,107580],{},[3900,107578,107579],{"align":27223},"坐标",[3900,107581,104068],{"align":27223},[3938,107583,107584,107594],{},[3897,107585,107586,107591],{},[3943,107587,107588,107589],{"align":27223},"XML 里的 ",[114,107590,107509],{},[3943,107592,107593],{"align":27223},"相对父 body 的局部坐标",[3897,107595,107596,107602],{},[3943,107597,107598,28465,107600],{"align":27223},[114,107599,104446],{},[114,107601,107355],{},[3943,107603,107604],{"align":27223},"仿真更新后的世界坐标",[19,107606,107607,107608,107610,107611,85912,107614,107616],{},"如果你修改了 ",[114,107609,104437],{},"，但还没调用 ",[114,107612,107613],{},"mj_forward",[114,107615,104582],{},"，世界坐标可能还没有更新。",[14,107618,105970],{"id":105969},[19,107620,107621],{},"MJCF 建模先掌握四件事：",[26,107623,107624,107629,107634,107639],{},[29,107625,107626,107628],{},[114,107627,55183],{}," 表示刚体层级。",[29,107630,107631,107633],{},[114,107632,104487],{}," 表示形状、碰撞和质量。",[29,107635,107636,107638],{},[114,107637,106319],{}," 决定 body 能不能动、怎么动。",[29,107640,107641,107643],{},[114,107642,106573],{}," 用来标记关键点，方便 Python 读取位置。",[19,107645,107646],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[3659,107648,107649],{},"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":112,"searchDepth":142,"depth":142,"links":107651},[107652,107653,107654,107660,107664,107665,107666,107673],{"id":104014,"depth":142,"text":104015},{"id":104137,"depth":142,"text":104138},{"id":104411,"depth":142,"text":104412,"children":107655},[107656,107657,107658,107659],{"id":106323,"depth":156,"text":106323},{"id":106437,"depth":156,"text":106437},{"id":106463,"depth":156,"text":106464},{"id":106567,"depth":156,"text":106568},{"id":104619,"depth":142,"text":104620,"children":107661},[107662,107663],{"id":104936,"depth":156,"text":104936},{"id":105071,"depth":156,"text":105071},{"id":105678,"depth":142,"text":105679},{"id":105710,"depth":142,"text":105711},{"id":105815,"depth":142,"text":105816,"children":107667},[107668,107669,107671,107672],{"id":107521,"depth":156,"text":107524},{"id":107530,"depth":156,"text":107670},"mj_name2id 返回 -1",{"id":107544,"depth":156,"text":107544},{"id":107567,"depth":156,"text":107567},{"id":105969,"depth":142,"text":105970},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":106017,"description":112},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":107680,"title":107681,"body":107682,"description":112,"extension":3687,"meta":109177,"navigation":159,"path":109178,"seo":109179,"stem":109180,"__hash__":109181},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":107683,"toc":109149},[107684,107687,107689,107692,107695,107733,107736,107742,107745,107747,107749,107776,107778,107792,107794,107835,107837,107861,107863,107866,107875,107884,107887,107896,107904,107913,107916,107926,107929,107981,107988,107994,108002,108050,108053,108072,108075,108083,108087,108096,108129,108131,108479,108481,108493,108495,108506,108508,108511,108532,108538,108541,108566,108576,108579,108587,108590,108593,108614,108625,108627,108647,108650,108671,108680,108699,108705,108730,108733,108747,108754,108778,108781,108789,108798,108814,108826,108834,108843,108845,108848,108872,108877,108880,108902,108904,108943,108945,108952,108954,108962,108965,108968,108980,109021,109028,109039,109046,109049,109098,109101,109104,109110,109112,109117,109143,109146],[10,107685,107681],{"id":107686},"_3python-控制接口读取状态与推进仿真",[14,107688,104015],{"id":104014},[19,107690,107691],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,107693,107694],{},"你将学习:",[26,107696,107697,107702,107707,107711,107716,107727],{},[29,107698,107699],{},[114,107700,107701],{},"MjModel.from_xml_string",[29,107703,107704],{},[114,107705,107706],{},"MjData(model)",[29,107708,107709],{},[114,107710,104582],{},[29,107712,107713],{},[114,107714,107715],{},"mj_resetData",[29,107717,107718,107719,3550,107721,3550,107724],{},"读取 ",[114,107720,107393],{},[114,107722,107723],{},"qvel",[114,107725,107726],{},"ctrl",[29,107728,107729,107730],{},"使用 ",[114,107731,107732],{},"model.opt.timestep",[19,107734,107735],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[106,107737,107740],{"className":107738,"code":107739,"language":111,"meta":112},[109],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[114,107741,107739],{"__ignoreMap":112},[19,107743,107744],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,107746,104138],{"id":104137},[19,107748,104141],{},[106,107750,107752],{"className":27309,"code":107751,"language":27311,"meta":112,"style":112},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[114,107753,107754],{"__ignoreMap":112},[128,107755,107756,107758,107760,107762,107764,107767,107769,107771,107773],{"class":130,"line":131},[128,107757,28064],{"class":199},[128,107759,29800],{"class":176},[128,107761,27321],{"class":176},[128,107763,29885],{"class":166},[128,107765,107766],{"class":176}," python3",[128,107768,104166],{"class":176},[128,107770,105864],{"class":176},[128,107772,104182],{"class":176},[128,107774,107775],{"class":176}," glfw\n",[19,107777,106182],{},[106,107779,107780],{"className":27309,"code":104287,"language":27311,"meta":112,"style":112},[114,107781,107782],{"__ignoreMap":112},[128,107783,107784,107786,107788,107790],{"class":130,"line":131},[128,107785,27318],{"class":199},[128,107787,27321],{"class":176},[128,107789,104298],{"class":176},[128,107791,104301],{"class":176},[19,107793,106199],{},[106,107795,107797],{"className":27309,"code":107796,"language":27311,"meta":112,"style":112},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[114,107798,107799,107816,107825],{"__ignoreMap":112},[128,107800,107801,107803,107805,107807,107810,107812,107814],{"class":130,"line":131},[128,107802,33814],{"class":199},[128,107804,32660],{"class":176},[128,107806,28602],{"class":166},[128,107808,107809],{"class":176}," mujoco-python-api",[128,107811,104343],{"class":176},[128,107813,104346],{"class":166},[128,107815,104349],{"class":166},[128,107817,107818,107820,107822],{"class":130,"line":142},[128,107819,33814],{"class":199},[128,107821,104356],{"class":176},[128,107823,107824],{"class":176}," mujoco-python-api\n",[128,107826,107827,107829,107831,107833],{"class":130,"line":156},[128,107828,27318],{"class":199},[128,107830,27321],{"class":176},[128,107832,104298],{"class":176},[128,107834,104301],{"class":176},[19,107836,104372],{},[26,107838,107839,107846,107855],{},[29,107840,107841,3330,107843,107845],{},[114,107842,104043],{},[114,107844,104048],{}," 是官方 Python bindings 的类名。",[29,107847,107848,107849,107852,107853,1842],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[114,107850,107851],{},"mjModel"," 在 Python 中是 ",[114,107854,104077],{},[29,107856,107857,107858,1842],{},"不要使用 ",[114,107859,107860],{},"sim = mujoco_py.MjSim(...)",[14,107862,104412],{"id":104411},[19,107864,107865],{},"仿真推进核心代码:",[106,107867,107869],{"className":122,"code":107868,"language":124,"meta":112,"style":112},"mujoco.mj_step(model, data)\n",[114,107870,107871],{"__ignoreMap":112},[128,107872,107873],{"class":130,"line":131},[128,107874,107868],{"class":138},[19,107876,107877,107878,3550,107880,3550,107882,1842],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[114,107879,104437],{},[114,107881,104440],{},[114,107883,104434],{},[19,107885,107886],{},"重置仿真:",[106,107888,107890],{"className":122,"code":107889,"language":124,"meta":112,"style":112},"mujoco.mj_resetData(model, data)\n",[114,107891,107892],{"__ignoreMap":112},[128,107893,107894],{"class":130,"line":131},[128,107895,107889],{"class":138},[19,107897,107898,107899,85912,107901,107903],{},"如果手动修改了 ",[114,107900,104437],{},[114,107902,104440],{},"，通常应调用:",[106,107905,107907],{"className":122,"code":107906,"language":124,"meta":112,"style":112},"mujoco.mj_forward(model, data)\n",[114,107908,107909],{"__ignoreMap":112},[128,107910,107911],{"class":130,"line":131},[128,107912,107906],{"class":138},[19,107914,107915],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[72,107917,107919,3550,107921,3550,107923,107925],{"id":107918},"qposqvelctrl-是什么",[114,107920,107393],{},[114,107922,107723],{},[114,107924,107726],{}," 是什么",[19,107927,107928],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[3891,107930,107931,107943],{},[3894,107932,107933],{},[3897,107934,107935,107938,107940],{},[3900,107936,107937],{"align":27223},"字段",[3900,107939,104068],{"align":27223},[3900,107941,107942],{"align":27223},"谁来修改",[3938,107944,107945,107957,107969],{},[3897,107946,107947,107951,107954],{},[3943,107948,107949],{"align":27223},[114,107950,104437],{},[3943,107952,107953],{"align":27223},"广义位置，例如小车位置、关节角、自由物体位置姿态",[3943,107955,107956],{"align":27223},"MuJoCo 更新，也可以手动设置初始状态",[3897,107958,107959,107963,107966],{},[3943,107960,107961],{"align":27223},[114,107962,104440],{},[3943,107964,107965],{"align":27223},"广义速度，例如小车速度、关节角速度",[3943,107967,107968],{"align":27223},"MuJoCo 更新，也可以手动清零",[3897,107970,107971,107975,107978],{},[3943,107972,107973],{"align":27223},[114,107974,104443],{},[3943,107976,107977],{"align":27223},"actuator 的控制输入",[3943,107979,107980],{"align":27223},"主要由你的控制代码写入",[19,107982,12571,107983,3330,107985,107987],{},[114,107984,107393],{},[114,107986,107723],{}," 不一定同维。自由刚体就是典型例子：",[106,107989,107992],{"className":107990,"code":107991,"language":111,"meta":112},[109],"freejoint: qpos 7 维，qvel 6 维\n",[114,107993,107991],{"__ignoreMap":112},[72,107995,107997,3330,107999,108001],{"id":107996},"mj_step-和-mj_forward-的区别",[114,107998,104582],{},[114,108000,107613],{}," 的区别",[3891,108003,108004,108017],{},[3894,108005,108006],{},[3897,108007,108008,108011,108014],{},[3900,108009,108010],{"align":27223},"函数",[3900,108012,108013],{"align":27223},"是否推进时间",[3900,108015,108016],{"align":27223},"什么时候用",[3938,108018,108019,108032],{},[3897,108020,108021,108026,108029],{},[3943,108022,108023],{"align":27223},[114,108024,108025],{},"mj_step(model, data)",[3943,108027,108028],{"align":27223},"是",[3943,108030,108031],{"align":27223},"正常仿真循环，每调用一次前进一步",[3897,108033,108034,108039,108042],{},[3943,108035,108036],{"align":27223},[114,108037,108038],{},"mj_forward(model, data)",[3943,108040,108041],{"align":27223},"否",[3943,108043,108044,108045,3550,108047,108049],{"align":27223},"手动改了 ",[114,108046,107393],{},[114,108048,107723],{}," 后，刷新派生量",[19,108051,108052],{},"例如你写：",[106,108054,108056],{"className":122,"code":108055,"language":124,"meta":112,"style":112},"data.qpos[2] = 2.0\n",[114,108057,108058],{"__ignoreMap":112},[128,108059,108060,108063,108065,108067,108069],{"class":130,"line":131},[128,108061,108062],{"class":138},"data.qpos[",[128,108064,409],{"class":166},[128,108066,567],{"class":138},[128,108068,270],{"class":134},[128,108070,108071],{"class":166}," 2.0\n",[19,108073,108074],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[106,108076,108077],{"className":122,"code":107906,"language":124,"meta":112,"style":112},[114,108078,108079],{"__ignoreMap":112},[128,108080,108081],{"class":130,"line":131},[128,108082,107906],{"class":138},[72,108084,108086],{"id":108085},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,108088,108089,108092,108093,108095],{},[114,108090,108091],{},"mujoco.mj_resetData(model, data)"," 会把 ",[114,108094,36797],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[106,108097,108099],{"className":122,"code":108098,"language":124,"meta":112,"style":112},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[114,108100,108101,108105,108115,108125],{"__ignoreMap":112},[128,108102,108103],{"class":130,"line":131},[128,108104,107889],{"class":138},[128,108106,108107,108110,108112],{"class":130,"line":142},[128,108108,108109],{"class":138},"data.qpos[:] ",[128,108111,270],{"class":134},[128,108113,108114],{"class":138}," random_qpos\n",[128,108116,108117,108120,108122],{"class":130,"line":156},[128,108118,108119],{"class":138},"data.qvel[:] ",[128,108121,270],{"class":134},[128,108123,108124],{"class":166}," 0.0\n",[128,108126,108127],{"class":130,"line":163},[128,108128,107906],{"class":138},[14,108130,104620],{"id":104619},[106,108132,108134],{"className":122,"code":108133,"language":124,"meta":112,"style":112},"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",[114,108135,108136,108142,108152,108156,108160,108168,108173,108177,108181,108185,108190,108194,108199,108204,108209,108213,108217,108221,108225,108229,108233,108252,108259,108271,108282,108298,108314,108318,108322,108334,108346,108354,108358,108369,108373,108389,108393,108397,108406,108410,108415,108424,108428,108441,108446,108455,108459,108463,108475],{"__ignoreMap":112},[128,108137,108138,108140],{"class":130,"line":131},[128,108139,135],{"class":134},[128,108141,104668],{"class":138},[128,108143,108144,108146,108148,108150],{"class":130,"line":142},[128,108145,135],{"class":134},[128,108147,34851],{"class":138},[128,108149,279],{"class":134},[128,108151,34856],{"class":138},[128,108153,108154],{"class":130,"line":156},[128,108155,160],{"emptyLinePlaceholder":159},[128,108157,108158],{"class":130,"line":163},[128,108159,160],{"emptyLinePlaceholder":159},[128,108161,108162,108164,108166],{"class":130,"line":183},[128,108163,104681],{"class":166},[128,108165,170],{"class":134},[128,108167,104686],{"class":176},[128,108169,108170],{"class":130,"line":188},[128,108171,108172],{"class":176},"\u003Cmujoco model=\"state_api\">\n",[128,108174,108175],{"class":130,"line":193},[128,108176,104696],{"class":176},[128,108178,108179],{"class":130,"line":206},[128,108180,160],{"emptyLinePlaceholder":159},[128,108182,108183],{"class":130,"line":221},[128,108184,104705],{"class":176},[128,108186,108187],{"class":130,"line":230},[128,108188,108189],{"class":176},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[128,108191,108192],{"class":130,"line":235},[128,108193,160],{"emptyLinePlaceholder":159},[128,108195,108196],{"class":130,"line":244},[128,108197,108198],{"class":176},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[128,108200,108201],{"class":130,"line":287},[128,108202,108203],{"class":176},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[128,108205,108206],{"class":130,"line":301},[128,108207,108208],{"class":176},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[128,108210,108211],{"class":130,"line":310},[128,108212,104734],{"class":176},[128,108214,108215],{"class":130,"line":323},[128,108216,104739],{"class":176},[128,108218,108219],{"class":130,"line":330},[128,108220,104744],{"class":176},[128,108222,108223],{"class":130,"line":335},[128,108224,99067],{"class":176},[128,108226,108227],{"class":130,"line":340},[128,108228,160],{"emptyLinePlaceholder":159},[128,108230,108231],{"class":130,"line":351},[128,108232,160],{"emptyLinePlaceholder":159},[128,108234,108235,108237,108240,108243,108245,108248,108250],{"class":130,"line":384},[128,108236,196],{"class":134},[128,108238,108239],{"class":199}," print_state",[128,108241,108242],{"class":138},"(prefix: ",[128,108244,4914],{"class":166},[128,108246,108247],{"class":138},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[128,108249,99055],{"class":166},[128,108251,241],{"class":138},[128,108253,108254,108256],{"class":130,"line":414},[128,108255,437],{"class":166},[128,108257,108258],{"class":138},"(prefix)\n",[128,108260,108261,108263,108265,108268],{"class":130,"line":419},[128,108262,437],{"class":166},[128,108264,253],{"class":138},[128,108266,108267],{"class":176},"\"  timestep:\"",[128,108269,108270],{"class":138},", model.opt.timestep)\n",[128,108272,108273,108275,108277,108280],{"class":130,"line":424},[128,108274,437],{"class":166},[128,108276,253],{"class":138},[128,108278,108279],{"class":176},"\"  time:\"",[128,108281,104845],{"class":138},[128,108283,108284,108286,108288,108291,108294,108296],{"class":130,"line":434},[128,108285,437],{"class":166},[128,108287,253],{"class":138},[128,108289,108290],{"class":176},"\"  qpos:\"",[128,108292,108293],{"class":138},", np.round(data.qpos.copy(), ",[128,108295,4043],{"class":166},[128,108297,3034],{"class":138},[128,108299,108300,108302,108304,108307,108310,108312],{"class":130,"line":447},[128,108301,437],{"class":166},[128,108303,253],{"class":138},[128,108305,108306],{"class":176},"\"  qvel:\"",[128,108308,108309],{"class":138},", np.round(data.qvel.copy(), ",[128,108311,4043],{"class":166},[128,108313,3034],{"class":138},[128,108315,108316],{"class":130,"line":459},[128,108317,160],{"emptyLinePlaceholder":159},[128,108319,108320],{"class":130,"line":471},[128,108321,160],{"emptyLinePlaceholder":159},[128,108323,108324,108326,108328,108330,108332],{"class":130,"line":483},[128,108325,196],{"class":134},[128,108327,1575],{"class":199},[128,108329,104765],{"class":138},[128,108331,99055],{"class":166},[128,108333,241],{"class":138},[128,108335,108336,108338,108340,108342,108344],{"class":130,"line":495},[128,108337,104774],{"class":138},[128,108339,270],{"class":134},[128,108341,104779],{"class":138},[128,108343,104681],{"class":166},[128,108345,180],{"class":138},[128,108347,108348,108350,108352],{"class":130,"line":507},[128,108349,104788],{"class":138},[128,108351,270],{"class":134},[128,108353,104793],{"class":138},[128,108355,108356],{"class":130,"line":519},[128,108357,160],{"emptyLinePlaceholder":159},[128,108359,108360,108363,108366],{"class":130,"line":524},[128,108361,108362],{"class":138},"    print_state(",[128,108364,108365],{"class":176},"\"initial\"",[128,108367,108368],{"class":138},", model, data)\n",[128,108370,108371],{"class":130,"line":529},[128,108372,160],{"emptyLinePlaceholder":159},[128,108374,108375,108377,108379,108381,108383,108385,108387],{"class":130,"line":540},[128,108376,543],{"class":134},[128,108378,104868],{"class":138},[128,108380,549],{"class":134},[128,108382,35910],{"class":166},[128,108384,253],{"class":138},[128,108386,4405],{"class":166},[128,108388,34264],{"class":138},[128,108390,108391],{"class":130,"line":555},[128,108392,104883],{"class":138},[128,108394,108395],{"class":130,"line":576},[128,108396,160],{"emptyLinePlaceholder":159},[128,108398,108399,108401,108404],{"class":130,"line":584},[128,108400,108362],{"class":138},[128,108402,108403],{"class":176},"\"after 50 steps\"",[128,108405,108368],{"class":138},[128,108407,108408],{"class":130,"line":593},[128,108409,160],{"emptyLinePlaceholder":159},[128,108411,108412],{"class":130,"line":598},[128,108413,108414],{"class":138},"    mujoco.mj_resetData(model, data)\n",[128,108416,108417,108419,108422],{"class":130,"line":603},[128,108418,108362],{"class":138},[128,108420,108421],{"class":176},"\"after reset\"",[128,108423,108368],{"class":138},[128,108425,108426],{"class":130,"line":614},[128,108427,160],{"emptyLinePlaceholder":159},[128,108429,108430,108433,108435,108437,108439],{"class":130,"line":625},[128,108431,108432],{"class":138},"    data.qpos[",[128,108434,409],{"class":166},[128,108436,567],{"class":138},[128,108438,270],{"class":134},[128,108440,108071],{"class":166},[128,108442,108443],{"class":130,"line":633},[128,108444,108445],{"class":138},"    mujoco.mj_forward(model, data)\n",[128,108447,108448,108450,108453],{"class":130,"line":649},[128,108449,108362],{"class":138},[128,108451,108452],{"class":176},"\"after manual qpos edit\"",[128,108454,108368],{"class":138},[128,108456,108457],{"class":130,"line":660},[128,108458,160],{"emptyLinePlaceholder":159},[128,108460,108461],{"class":130,"line":673},[128,108462,160],{"emptyLinePlaceholder":159},[128,108464,108465,108467,108469,108471,108473],{"class":130,"line":678},[128,108466,1800],{"class":134},[128,108468,1803],{"class":166},[128,108470,1806],{"class":134},[128,108472,1809],{"class":176},[128,108474,241],{"class":138},[128,108476,108477],{"class":130,"line":683},[128,108478,1817],{"class":138},[19,108480,106933],{},[106,108482,108484],{"className":27309,"code":108483,"language":27311,"meta":112,"style":112},"touch ch3_python_state.py\n",[114,108485,108486],{"__ignoreMap":112},[128,108487,108488,108490],{"class":130,"line":131},[128,108489,104650],{"class":199},[128,108491,108492],{"class":176}," ch3_python_state.py\n",[19,108494,105664],{},[106,108496,108498],{"className":27309,"code":108497,"language":27311,"meta":112,"style":112},"python ch3_python_state.py\n",[114,108499,108500],{"__ignoreMap":112},[128,108501,108502,108504],{"class":130,"line":131},[128,108503,124],{"class":199},[128,108505,108492],{"class":176},[72,108507,104936],{"id":104936},[19,108509,108510],{},"打印状态的函数：",[106,108512,108514],{"className":122,"code":108513,"language":124,"meta":112,"style":112},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[114,108515,108516],{"__ignoreMap":112},[128,108517,108518,108520,108522,108524,108526,108528,108530],{"class":130,"line":131},[128,108519,196],{"class":134},[128,108521,108239],{"class":199},[128,108523,108242],{"class":138},[128,108525,4914],{"class":166},[128,108527,108247],{"class":138},[128,108529,99055],{"class":166},[128,108531,241],{"class":138},[19,108533,108534,108535,108537],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[114,108536,36797],{}," 里发生了什么。",[19,108539,108540],{},"推进 50 步：",[106,108542,108544],{"className":122,"code":108543,"language":124,"meta":112,"style":112},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[114,108545,108546,108562],{"__ignoreMap":112},[128,108547,108548,108550,108552,108554,108556,108558,108560],{"class":130,"line":131},[128,108549,2404],{"class":134},[128,108551,104868],{"class":138},[128,108553,549],{"class":134},[128,108555,35910],{"class":166},[128,108557,253],{"class":138},[128,108559,4405],{"class":166},[128,108561,34264],{"class":138},[128,108563,108564],{"class":130,"line":142},[128,108565,105062],{"class":138},[19,108567,108568,108569,108572,108573,108575],{},"由于 ",[114,108570,108571],{},"timestep=0.01","，所以 50 步后时间约为 ",[114,108574,38721],{}," 秒。",[19,108577,108578],{},"重置：",[106,108580,108581],{"className":122,"code":107889,"language":124,"meta":112,"style":112},[114,108582,108583],{"__ignoreMap":112},[128,108584,108585],{"class":130,"line":131},[128,108586,107889],{"class":138},[19,108588,108589],{},"这会把时间、位置、速度恢复到初始状态。",[19,108591,108592],{},"手动改高度：",[106,108594,108596],{"className":122,"code":108595,"language":124,"meta":112,"style":112},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[114,108597,108598,108610],{"__ignoreMap":112},[128,108599,108600,108602,108604,108606,108608],{"class":130,"line":131},[128,108601,108062],{"class":138},[128,108603,409],{"class":166},[128,108605,567],{"class":138},[128,108607,270],{"class":134},[128,108609,108071],{"class":166},[128,108611,108612],{"class":130,"line":142},[128,108613,107906],{"class":138},[19,108615,108616,108617,108620,108621,108624],{},"这个例子里 ",[114,108618,108619],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[114,108622,108623],{},"2.0"," 表示把小球放到更高的位置。",[72,108626,105071],{"id":105071},[106,108628,108629],{"className":122,"code":108513,"language":124,"meta":112,"style":112},[114,108630,108631],{"__ignoreMap":112},[128,108632,108633,108635,108637,108639,108641,108643,108645],{"class":130,"line":131},[128,108634,196],{"class":134},[128,108636,108239],{"class":199},[128,108638,108242],{"class":138},[128,108640,4914],{"class":166},[128,108642,108247],{"class":138},[128,108644,99055],{"class":166},[128,108646,241],{"class":138},[19,108648,108649],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[26,108651,108652,108661,108666],{},[29,108653,108654,108657,108658,108660],{},[114,108655,108656],{},"prefix","：一段文字，比如 ",[114,108659,108365],{},"，用来说明现在打印的是哪个阶段。",[29,108662,108663,108665],{},[114,108664,105448],{},"：MuJoCo 模型。",[29,108667,108668,108670],{},[114,108669,36797],{},"：MuJoCo 当前状态。",[19,108672,108673,3550,108676,108679],{},[114,108674,108675],{},"prefix: str",[114,108677,108678],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[106,108681,108683],{"className":122,"code":108682,"language":124,"meta":112,"style":112},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[114,108684,108685],{"__ignoreMap":112},[128,108686,108687,108689,108691,108693,108695,108697],{"class":130,"line":131},[128,108688,2469],{"class":166},[128,108690,253],{"class":138},[128,108692,108290],{"class":176},[128,108694,108293],{"class":138},[128,108696,4043],{"class":166},[128,108698,3034],{"class":138},[19,108700,108701,108704],{},[114,108702,108703],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[106,108706,108708],{"className":122,"code":108707,"language":124,"meta":112,"style":112},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[114,108709,108710,108722],{"__ignoreMap":112},[128,108711,108712,108714,108716,108718,108720],{"class":130,"line":131},[128,108713,104998],{"class":138},[128,108715,270],{"class":134},[128,108717,104779],{"class":138},[128,108719,104681],{"class":166},[128,108721,180],{"class":138},[128,108723,108724,108726,108728],{"class":130,"line":142},[128,108725,2857],{"class":138},[128,108727,270],{"class":134},[128,108729,104793],{"class":138},[19,108731,108732],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[106,108734,108736],{"className":122,"code":108735,"language":124,"meta":112,"style":112},"print_state(\"initial\", model, data)\n",[114,108737,108738],{"__ignoreMap":112},[128,108739,108740,108743,108745],{"class":130,"line":131},[128,108741,108742],{"class":138},"print_state(",[128,108744,108365],{"class":176},[128,108746,108368],{"class":138},[19,108748,108749,108750,108753],{},"调用刚才定义的 ",[114,108751,108752],{},"print_state"," 函数，打印初始状态。",[106,108755,108756],{"className":122,"code":108543,"language":124,"meta":112,"style":112},[114,108757,108758,108774],{"__ignoreMap":112},[128,108759,108760,108762,108764,108766,108768,108770,108772],{"class":130,"line":131},[128,108761,2404],{"class":134},[128,108763,104868],{"class":138},[128,108765,549],{"class":134},[128,108767,35910],{"class":166},[128,108769,253],{"class":138},[128,108771,4405],{"class":166},[128,108773,34264],{"class":138},[128,108775,108776],{"class":130,"line":142},[128,108777,105062],{"class":138},[19,108779,108780],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[106,108782,108783],{"className":122,"code":107889,"language":124,"meta":112,"style":112},[114,108784,108785],{"__ignoreMap":112},[128,108786,108787],{"class":130,"line":131},[128,108788,107889],{"class":138},[19,108790,108791,108792,108794,108795,108797],{},"重置 ",[114,108793,36797],{},"。注意它不会重新创建 ",[114,108796,105448],{},"，因为模型结构没有变，只是状态回到初始值。",[106,108799,108800],{"className":122,"code":108055,"language":124,"meta":112,"style":112},[114,108801,108802],{"__ignoreMap":112},[128,108803,108804,108806,108808,108810,108812],{"class":130,"line":131},[128,108805,108062],{"class":138},[128,108807,409],{"class":166},[128,108809,567],{"class":138},[128,108811,270],{"class":134},[128,108813,108071],{"class":166},[19,108815,108816,108817,3550,108820,3550,108823,108825],{},"这行是“手动改状态”。在 freejoint 中，",[114,108818,108819],{},"qpos[0]",[114,108821,108822],{},"qpos[1]",[114,108824,108619],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[106,108827,108828],{"className":122,"code":107906,"language":124,"meta":112,"style":112},[114,108829,108830],{"__ignoreMap":112},[128,108831,108832],{"class":130,"line":131},[128,108833,107906],{"class":138},[19,108835,108836,108837,108839,108840,108842],{},"手动改完 ",[114,108838,107393],{}," 后，调用 ",[114,108841,107613],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,108844,105679],{"id":105678},[19,108846,108847],{},"你会看到:",[26,108849,108850,108855,108860,108863],{},[29,108851,108852,108853],{},"初始时间为 ",[114,108854,2452],{},[29,108856,108857,108858],{},"50 步后时间约为 ",[114,108859,38721],{},[29,108861,108862],{},"reset 后状态恢复",[29,108864,108865,108866,108869,108870],{},"手动修改 ",[114,108867,108868],{},"data.qpos[2]"," 后，小球高度变为 ",[114,108871,108623],{},[19,108873,108874,108876],{},[114,108875,108619],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,108878,108879],{},"输出里可以重点看三件事：",[26,108881,108882,108890,108895],{},[29,108883,108884,108886,108887,108889],{},[114,108885,5971],{}," 是否随着 ",[114,108888,104582],{}," 增加。",[29,108891,108892,108894],{},[114,108893,107393],{}," 的 z 坐标是否因为下落而变化。",[29,108896,108897,108899,108900,1842],{},[114,108898,107715],{}," 后时间是否回到 ",[114,108901,2452],{},[14,108903,105711],{"id":105710},[26,108905,108906,108912,108918,108924,108927,108936],{},[29,108907,108908,108909,1842],{},"修改 timestep 为 ",[114,108910,108911],{},"0.005",[29,108913,108914,108915,1842],{},"重新运行，检查 50 步后时间是否约为 ",[114,108916,108917],{},"0.25",[29,108919,108920,108921,1842],{},"修改重力为 ",[114,108922,108923],{},"0 0 -1.0",[29,108925,108926],{},"观察小球下降速度是否变慢。",[29,108928,105774,108929,105777,108932,108935],{},[114,108930,108931],{},"data.qpos[2] = 2.0",[114,108933,108934],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[29,108937,108938,108939,108942],{},"注释掉 ",[114,108940,108941],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,108944,105816],{"id":105815},[72,108946,108948,108949,108951],{"id":108947},"修改-dataqpos-后位置没有更新","修改 ",[114,108950,104437],{}," 后位置没有更新",[19,108953,105825],{},[106,108955,108956],{"className":122,"code":107906,"language":124,"meta":112,"style":112},[114,108957,108958],{"__ignoreMap":112},[128,108959,108960],{"class":130,"line":131},[128,108961,107906],{"class":138},[72,108963,108964],{"id":108964},"数组维度看不懂",[19,108966,108967],{},"打印模型维度:",[106,108969,108971],{"className":122,"code":108970,"language":124,"meta":112,"style":112},"print(model.nq, model.nv, model.nu)\n",[114,108972,108973],{"__ignoreMap":112},[128,108974,108975,108977],{"class":130,"line":131},[128,108976,2469],{"class":166},[128,108978,108979],{"class":138},"(model.nq, model.nv, model.nu)\n",[3891,108981,108982,108990],{},[3894,108983,108984],{},[3897,108985,108986,108988],{},[3900,108987,107937],{"align":27223},[3900,108989,104068],{"align":27223},[3938,108991,108992,109002,109012],{},[3897,108993,108994,108999],{},[3943,108995,108996],{"align":27223},[114,108997,108998],{},"nq",[3943,109000,109001],{"align":27223},"位置变量数量",[3897,109003,109004,109009],{},[3943,109005,109006],{"align":27223},[114,109007,109008],{},"nv",[3943,109010,109011],{"align":27223},"速度变量数量",[3897,109013,109014,109018],{},[3943,109015,109016],{"align":27223},[114,109017,105525],{},[3943,109019,109020],{"align":27223},"控制输入数量",[72,109022,109024,109025,109027],{"id":109023},"误以为-qpos-一定等于关节数","误以为 ",[114,109026,107393],{}," 一定等于关节数",[19,109029,109030,109031,85903,109033,109035,109036,109038],{},"不是。例如 ",[114,109032,104984],{},[114,109034,107393],{}," 是 7 维，但 ",[114,109037,107723],{}," 是 6 维。",[72,109040,109042,109043,109045],{"id":109041},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[114,109044,107393],{}," 的第几位",[19,109047,109048],{},"初学时可以先打印：",[106,109050,109052],{"className":122,"code":109051,"language":124,"meta":112,"style":112},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[114,109053,109054,109064,109074,109086],{"__ignoreMap":112},[128,109055,109056,109058,109060,109062],{"class":130,"line":131},[128,109057,2469],{"class":166},[128,109059,253],{"class":138},[128,109061,104806],{"class":176},[128,109063,104809],{"class":138},[128,109065,109066,109068,109070,109072],{"class":130,"line":142},[128,109067,2469],{"class":166},[128,109069,253],{"class":138},[128,109071,104818],{"class":176},[128,109073,104821],{"class":138},[128,109075,109076,109078,109080,109083],{"class":130,"line":156},[128,109077,2469],{"class":166},[128,109079,253],{"class":138},[128,109081,109082],{"class":176},"\"qpos:\"",[128,109084,109085],{"class":138},", data.qpos)\n",[128,109087,109088,109090,109092,109095],{"class":130,"line":163},[128,109089,2469],{"class":166},[128,109091,253],{"class":138},[128,109093,109094],{"class":176},"\"qvel:\"",[128,109096,109097],{"class":138},", data.qvel)\n",[19,109099,109100],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[72,109102,109103],{"id":109103},"仿真结果每次都一样",[19,109105,109106,109107,109109],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[114,109108,107393],{},"、目标点或控制输入。",[14,109111,105970],{"id":105969},[19,109113,109114,109115,28105],{},"Python 控制 MuJoCo 的核心就是读写 ",[114,109116,36797],{},[26,109118,109119,109127,109132,109137],{},[29,109120,109121,109122,3330,109124,109126],{},"用 ",[114,109123,104437],{},[114,109125,104440],{}," 读取状态。",[29,109128,109121,109129,109131],{},[114,109130,104443],{}," 写入控制。",[29,109133,109121,109134,109136],{},[114,109135,104582],{}," 推进时间。",[29,109138,109139,109140,109142],{},"手动改状态后用 ",[114,109141,107613],{}," 刷新派生量。",[19,109144,109145],{},"理解这一章后，就可以进入关节和 actuator 控制。",[3659,109147,109148],{},"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":112,"searchDepth":142,"depth":142,"links":109150},[109151,109152,109153,109160,109164,109165,109166,109176],{"id":104014,"depth":142,"text":104015},{"id":104137,"depth":142,"text":104138},{"id":104411,"depth":142,"text":104412,"children":109154},[109155,109157,109159],{"id":107918,"depth":156,"text":109156},"qpos、qvel、ctrl 是什么",{"id":107996,"depth":156,"text":109158},"mj_step 和 mj_forward 的区别",{"id":108085,"depth":156,"text":108086},{"id":104619,"depth":142,"text":104620,"children":109161},[109162,109163],{"id":104936,"depth":156,"text":104936},{"id":105071,"depth":156,"text":105071},{"id":105678,"depth":142,"text":105679},{"id":105710,"depth":142,"text":105711},{"id":105815,"depth":142,"text":105816,"children":109167},[109168,109170,109171,109173,109175],{"id":108947,"depth":156,"text":109169},"修改 data.qpos 后位置没有更新",{"id":108964,"depth":156,"text":108964},{"id":109023,"depth":156,"text":109172},"误以为 qpos 一定等于关节数",{"id":109041,"depth":156,"text":109174},"不知道某个元素在 qpos 的第几位",{"id":109103,"depth":156,"text":109103},{"id":105969,"depth":142,"text":105970},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":107681,"description":112},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":109183,"title":109184,"body":109185,"description":112,"extension":3687,"meta":110874,"navigation":159,"path":110875,"seo":110876,"stem":110877,"__hash__":110878},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":109186,"toc":110850},[109187,109190,109192,109195,109197,109222,109225,109244,109247,109249,109251,109275,109277,109291,109293,109334,109336,109360,109362,109365,109399,109401,109414,109417,109485,109494,109498,109501,109535,109541,109544,109548,109587,109590,109610,109614,109657,109659,109688,109691,109697,109700,109702,110096,110098,110110,110112,110123,110125,110128,110157,110165,110168,110203,110206,110208,110216,110219,110221,110232,110242,110262,110265,110301,110313,110361,110380,110422,110435,110463,110468,110489,110499,110517,110520,110554,110557,110577,110580,110599,110605,110607,110610,110616,110622,110632,110635,110641,110650,110652,110698,110700,110706,110711,110714,110717,110737,110740,110746,110752,110754,110777,110780,110783,110792,110795,110833,110835,110838,110844,110847],[10,109188,109184],{"id":109189},"_4关节actuator-与力控制",[14,109191,104015],{"id":104014},[19,109193,109194],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,109196,107694],{},[26,109198,109199,109205,109210,109214,109219],{},[29,109200,109201,109204],{},[114,109202,109203],{},"hinge"," 关节",[29,109206,109207],{},[114,109208,109209],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[29,109211,109212],{},[114,109213,104443],{},[29,109215,109216],{},[114,109217,109218],{},"ctrlrange",[29,109220,109221],{},"读取关节角和角速度",[19,109223,109224],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[106,109226,109228],{"className":122,"code":109227,"language":124,"meta":112,"style":112},"data.ctrl[0] = ...\n",[114,109229,109230],{"__ignoreMap":112},[128,109231,109232,109235,109237,109239,109241],{"class":130,"line":131},[128,109233,109234],{"class":138},"data.ctrl[",[128,109236,2452],{"class":166},[128,109238,567],{"class":138},[128,109240,270],{"class":134},[128,109242,109243],{"class":166}," ...\n",[19,109245,109246],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,109248,104138],{"id":104137},[19,109250,104141],{},[106,109252,109253],{"className":27309,"code":107751,"language":27311,"meta":112,"style":112},[114,109254,109255],{"__ignoreMap":112},[128,109256,109257,109259,109261,109263,109265,109267,109269,109271,109273],{"class":130,"line":131},[128,109258,28064],{"class":199},[128,109260,29800],{"class":176},[128,109262,27321],{"class":176},[128,109264,29885],{"class":166},[128,109266,107766],{"class":176},[128,109268,104166],{"class":176},[128,109270,105864],{"class":176},[128,109272,104182],{"class":176},[128,109274,107775],{"class":176},[19,109276,106182],{},[106,109278,109279],{"className":27309,"code":104287,"language":27311,"meta":112,"style":112},[114,109280,109281],{"__ignoreMap":112},[128,109282,109283,109285,109287,109289],{"class":130,"line":131},[128,109284,27318],{"class":199},[128,109286,27321],{"class":176},[128,109288,104298],{"class":176},[128,109290,104301],{"class":176},[19,109292,106199],{},[106,109294,109296],{"className":27309,"code":109295,"language":27311,"meta":112,"style":112},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[114,109297,109298,109315,109324],{"__ignoreMap":112},[128,109299,109300,109302,109304,109306,109309,109311,109313],{"class":130,"line":131},[128,109301,33814],{"class":199},[128,109303,32660],{"class":176},[128,109305,28602],{"class":166},[128,109307,109308],{"class":176}," mujoco-control",[128,109310,104343],{"class":176},[128,109312,104346],{"class":166},[128,109314,104349],{"class":166},[128,109316,109317,109319,109321],{"class":130,"line":142},[128,109318,33814],{"class":199},[128,109320,104356],{"class":176},[128,109322,109323],{"class":176}," mujoco-control\n",[128,109325,109326,109328,109330,109332],{"class":130,"line":156},[128,109327,27318],{"class":199},[128,109329,27321],{"class":176},[128,109331,104298],{"class":176},[128,109333,104301],{"class":176},[19,109335,104372],{},[26,109337,109338,109344,109351,109357],{},[29,109339,109340,109343],{},[114,109341,109342],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[29,109345,109346,109348,109349,1842],{},[114,109347,104443],{}," 长度等于 ",[114,109350,105521],{},[29,109352,85595,109353,109356],{},[114,109354,109355],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[29,109358,109359],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,109361,104412],{"id":104411},[19,109363,109364],{},"关节决定 body 如何运动:",[106,109366,109368],{"className":56449,"code":109367,"language":56451,"meta":112,"style":112},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[114,109369,109370],{"__ignoreMap":112},[128,109371,109372,109374,109376,109378,109380,109383,109385,109387,109389,109392,109394,109397],{"class":130,"line":131},[128,109373,4657],{"class":138},[128,109375,106319],{"class":54685},[128,109377,18442],{"class":199},[128,109379,270],{"class":138},[128,109381,109382],{"class":176},"\"hinge\"",[128,109384,57205],{"class":199},[128,109386,270],{"class":138},[128,109388,109382],{"class":176},[128,109390,109391],{"class":199}," axis",[128,109393,270],{"class":138},[128,109395,109396],{"class":176},"\"0 1 0\"",[128,109398,104511],{"class":138},[19,109400,106415],{},[26,109402,109403,109408,109411],{},[29,109404,109405,109406],{},"名字是 ",[114,109407,109203],{},[29,109409,109410],{},"类型是旋转关节",[29,109412,109413],{},"绕 y 轴旋转",[19,109415,109416],{},"actuator 决定如何施加控制:",[106,109418,109420],{"className":56449,"code":109419,"language":56451,"meta":112,"style":112},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[114,109421,109422,109431,109477],{"__ignoreMap":112},[128,109423,109424,109426,109429],{"class":130,"line":131},[128,109425,4657],{"class":138},[128,109427,109428],{"class":54685},"actuator",[128,109430,54692],{"class":138},[128,109432,109433,109435,109438,109440,109442,109445,109448,109450,109452,109455,109457,109459,109462,109464,109467,109470,109472,109475],{"class":130,"line":142},[128,109434,55526],{"class":138},[128,109436,109437],{"class":54685},"motor",[128,109439,18442],{"class":199},[128,109441,270],{"class":138},[128,109443,109444],{"class":176},"\"hinge_motor\"",[128,109446,109447],{"class":199}," joint",[128,109449,270],{"class":138},[128,109451,109382],{"class":176},[128,109453,109454],{"class":199}," gear",[128,109456,270],{"class":138},[128,109458,7246],{"class":176},[128,109460,109461],{"class":199}," ctrlrange",[128,109463,270],{"class":138},[128,109465,109466],{"class":176},"\"-2 2\"",[128,109468,109469],{"class":199}," ctrllimited",[128,109471,270],{"class":138},[128,109473,109474],{"class":176},"\"true\"",[128,109476,104511],{"class":138},[128,109478,109479,109481,109483],{"class":130,"line":156},[128,109480,55168],{"class":138},[128,109482,109428],{"class":54685},[128,109484,54692],{"class":138},[19,109486,109487,109490,109491,1842],{},[114,109488,109489],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[114,109492,109493],{},"[-2, 2]",[72,109495,109497],{"id":109496},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,109499,109500],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[3891,109502,109503,109513],{},[3894,109504,109505],{},[3897,109506,109507,109509,109511],{},[3900,109508,29239],{"align":27223},[3900,109510,106059],{"align":27223},[3900,109512,104102],{"align":27223},[3938,109514,109515,109525],{},[3897,109516,109517,109519,109522],{},[3943,109518,106319],{"align":27223},[3943,109520,109521],{"align":27223},"定义能怎么动",[3943,109523,109524],{"align":27223},"门轴允许门旋转",[3897,109526,109527,109529,109532],{},[3943,109528,109428],{"align":27223},[3943,109530,109531],{"align":27223},"定义怎么施力或控制",[3943,109533,109534],{"align":27223},"人推门、马达带动门",[19,109536,109537,109538,109540],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[114,109539,104443],{}," 主动控制它。",[19,109542,109543],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[72,109545,109547],{"id":109546},"hinge-joint","hinge joint",[106,109549,109551],{"className":56449,"code":109550,"language":56451,"meta":112,"style":112},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[114,109552,109553],{"__ignoreMap":112},[128,109554,109555,109557,109559,109561,109563,109565,109567,109569,109571,109573,109575,109577,109580,109582,109585],{"class":130,"line":131},[128,109556,4657],{"class":138},[128,109558,106319],{"class":54685},[128,109560,18442],{"class":199},[128,109562,270],{"class":138},[128,109564,109382],{"class":176},[128,109566,57205],{"class":199},[128,109568,270],{"class":138},[128,109570,109382],{"class":176},[128,109572,109391],{"class":199},[128,109574,270],{"class":138},[128,109576,109396],{"class":176},[128,109578,109579],{"class":199}," damping",[128,109581,270],{"class":138},[128,109583,109584],{"class":176},"\"0.1\"",[128,109586,104511],{"class":138},[19,109588,109589],{},"含义：",[26,109591,109592,109598,109604],{},[29,109593,109594,109597],{},[114,109595,109596],{},"type=\"hinge\"","：只能绕一个轴旋转。",[29,109599,109600,109603],{},[114,109601,109602],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[29,109605,109606,109609],{},[114,109607,109608],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[72,109611,109613],{"id":109612},"motor-actuator","motor actuator",[106,109615,109617],{"className":56449,"code":109616,"language":56451,"meta":112,"style":112},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[114,109618,109619],{"__ignoreMap":112},[128,109620,109621,109623,109625,109627,109629,109631,109633,109635,109637,109639,109641,109643,109645,109647,109649,109651,109653,109655],{"class":130,"line":131},[128,109622,4657],{"class":138},[128,109624,109437],{"class":54685},[128,109626,18442],{"class":199},[128,109628,270],{"class":138},[128,109630,109444],{"class":176},[128,109632,109447],{"class":199},[128,109634,270],{"class":138},[128,109636,109382],{"class":176},[128,109638,109454],{"class":199},[128,109640,270],{"class":138},[128,109642,7246],{"class":176},[128,109644,109461],{"class":199},[128,109646,270],{"class":138},[128,109648,109466],{"class":176},[128,109650,109469],{"class":199},[128,109652,270],{"class":138},[128,109654,109474],{"class":176},[128,109656,104511],{"class":138},[19,109658,109589],{},[26,109660,109661,109670,109676,109682],{},[29,109662,109663,109666,109667,109669],{},[114,109664,109665],{},"joint=\"hinge\"","：这个电机作用在名为 ",[114,109668,109203],{}," 的关节上。",[29,109671,109672,109675],{},[114,109673,109674],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[29,109677,109678,109681],{},[114,109679,109680],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[29,109683,109684,109687],{},[114,109685,109686],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,109689,109690],{},"简单理解：",[106,109692,109695],{"className":109693,"code":109694,"language":111,"meta":112},[109],"实际施加效果 ≈ data.ctrl[0] * gear\n",[114,109696,109694],{"__ignoreMap":112},[19,109698,109699],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,109701,104620],{"id":104619},[106,109703,109705],{"className":122,"code":109704,"language":124,"meta":112,"style":112},"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",[114,109706,109707,109714,109718,109724,109734,109738,109742,109750,109755,109760,109764,109768,109773,109778,109782,109787,109792,109797,109802,109806,109810,109814,109819,109824,109829,109833,109837,109841,109845,109857,109869,109877,109881,109891,109901,109911,109915,109928,109941,109945,109962,109976,110011,110015,110019,110030,110045,110060,110072,110076,110080,110092],{"__ignoreMap":112},[128,109708,109709,109711],{"class":130,"line":131},[128,109710,135],{"class":134},[128,109712,109713],{"class":138}," math\n",[128,109715,109716],{"class":130,"line":142},[128,109717,160],{"emptyLinePlaceholder":159},[128,109719,109720,109722],{"class":130,"line":156},[128,109721,135],{"class":134},[128,109723,104668],{"class":138},[128,109725,109726,109728,109730,109732],{"class":130,"line":163},[128,109727,135],{"class":134},[128,109729,34851],{"class":138},[128,109731,279],{"class":134},[128,109733,34856],{"class":138},[128,109735,109736],{"class":130,"line":183},[128,109737,160],{"emptyLinePlaceholder":159},[128,109739,109740],{"class":130,"line":188},[128,109741,160],{"emptyLinePlaceholder":159},[128,109743,109744,109746,109748],{"class":130,"line":193},[128,109745,104681],{"class":166},[128,109747,170],{"class":134},[128,109749,104686],{"class":176},[128,109751,109752],{"class":130,"line":206},[128,109753,109754],{"class":176},"\u003Cmujoco model=\"one_link_motor\">\n",[128,109756,109757],{"class":130,"line":221},[128,109758,109759],{"class":176},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[128,109761,109762],{"class":130,"line":230},[128,109763,160],{"emptyLinePlaceholder":159},[128,109765,109766],{"class":130,"line":235},[128,109767,104705],{"class":176},[128,109769,109770],{"class":130,"line":244},[128,109771,109772],{"class":176},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[128,109774,109775],{"class":130,"line":287},[128,109776,109777],{"class":176},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[128,109779,109780],{"class":130,"line":301},[128,109781,160],{"emptyLinePlaceholder":159},[128,109783,109784],{"class":130,"line":310},[128,109785,109786],{"class":176},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[128,109788,109789],{"class":130,"line":323},[128,109790,109791],{"class":176},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[128,109793,109794],{"class":130,"line":330},[128,109795,109796],{"class":176},"        \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",[128,109798,109799],{"class":130,"line":335},[128,109800,109801],{"class":176},"      \u003C\u002Fbody>\n",[128,109803,109804],{"class":130,"line":340},[128,109805,104734],{"class":176},[128,109807,109808],{"class":130,"line":351},[128,109809,104739],{"class":176},[128,109811,109812],{"class":130,"line":384},[128,109813,160],{"emptyLinePlaceholder":159},[128,109815,109816],{"class":130,"line":414},[128,109817,109818],{"class":176},"  \u003Cactuator>\n",[128,109820,109821],{"class":130,"line":419},[128,109822,109823],{"class":176},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[128,109825,109826],{"class":130,"line":424},[128,109827,109828],{"class":176},"  \u003C\u002Factuator>\n",[128,109830,109831],{"class":130,"line":434},[128,109832,104744],{"class":176},[128,109834,109835],{"class":130,"line":447},[128,109836,99067],{"class":176},[128,109838,109839],{"class":130,"line":459},[128,109840,160],{"emptyLinePlaceholder":159},[128,109842,109843],{"class":130,"line":471},[128,109844,160],{"emptyLinePlaceholder":159},[128,109846,109847,109849,109851,109853,109855],{"class":130,"line":483},[128,109848,196],{"class":134},[128,109850,1575],{"class":199},[128,109852,104765],{"class":138},[128,109854,99055],{"class":166},[128,109856,241],{"class":138},[128,109858,109859,109861,109863,109865,109867],{"class":130,"line":495},[128,109860,104774],{"class":138},[128,109862,270],{"class":134},[128,109864,104779],{"class":138},[128,109866,104681],{"class":166},[128,109868,180],{"class":138},[128,109870,109871,109873,109875],{"class":130,"line":507},[128,109872,104788],{"class":138},[128,109874,270],{"class":134},[128,109876,104793],{"class":138},[128,109878,109879],{"class":130,"line":519},[128,109880,160],{"emptyLinePlaceholder":159},[128,109882,109883,109885,109887,109889],{"class":130,"line":524},[128,109884,437],{"class":166},[128,109886,253],{"class":138},[128,109888,104806],{"class":176},[128,109890,104809],{"class":138},[128,109892,109893,109895,109897,109899],{"class":130,"line":529},[128,109894,437],{"class":166},[128,109896,253],{"class":138},[128,109898,104818],{"class":176},[128,109900,104821],{"class":138},[128,109902,109903,109905,109907,109909],{"class":130,"line":540},[128,109904,437],{"class":166},[128,109906,253],{"class":138},[128,109908,104830],{"class":176},[128,109910,104833],{"class":138},[128,109912,109913],{"class":130,"line":555},[128,109914,160],{"emptyLinePlaceholder":159},[128,109916,109917,109919,109922,109924,109926],{"class":130,"line":576},[128,109918,209],{"class":134},[128,109920,109921],{"class":138}," model.nu ",[128,109923,24435],{"class":134},[128,109925,28605],{"class":166},[128,109927,241],{"class":138},[128,109929,109930,109932,109934,109936,109939],{"class":130,"line":584},[128,109931,106795],{"class":134},[128,109933,106798],{"class":166},[128,109935,253],{"class":138},[128,109937,109938],{"class":176},"\"expected exactly one actuator\"",[128,109940,180],{"class":138},[128,109942,109943],{"class":130,"line":593},[128,109944,160],{"emptyLinePlaceholder":159},[128,109946,109947,109949,109951,109953,109955,109957,109960],{"class":130,"line":598},[128,109948,543],{"class":134},[128,109950,35085],{"class":138},[128,109952,549],{"class":134},[128,109954,35910],{"class":166},[128,109956,253],{"class":138},[128,109958,109959],{"class":166},"2000",[128,109961,34264],{"class":138},[128,109963,109964,109967,109969,109971,109973],{"class":130,"line":603},[128,109965,109966],{"class":138},"        t ",[128,109968,270],{"class":134},[128,109970,35085],{"class":138},[128,109972,4205],{"class":134},[128,109974,109975],{"class":138}," model.opt.timestep\n",[128,109977,109978,109981,109983,109985,109987,109990,109992,109995,109997,109999,110002,110004,110006,110008],{"class":130,"line":614},[128,109979,109980],{"class":138},"        data.ctrl[",[128,109982,2452],{"class":166},[128,109984,567],{"class":138},[128,109986,270],{"class":134},[128,109988,109989],{"class":166}," 1.5",[128,109991,10075],{"class":134},[128,109993,109994],{"class":138}," math.sin(",[128,109996,108623],{"class":166},[128,109998,10075],{"class":134},[128,110000,110001],{"class":138}," math.pi ",[128,110003,4205],{"class":134},[128,110005,65246],{"class":166},[128,110007,10075],{"class":134},[128,110009,110010],{"class":138}," t)\n",[128,110012,110013],{"class":130,"line":625},[128,110014,104883],{"class":138},[128,110016,110017],{"class":130,"line":633},[128,110018,160],{"emptyLinePlaceholder":159},[128,110020,110021,110023,110025,110028],{"class":130,"line":649},[128,110022,437],{"class":166},[128,110024,253],{"class":138},[128,110026,110027],{"class":176},"\"time:\"",[128,110029,104845],{"class":138},[128,110031,110032,110034,110036,110039,110041,110043],{"class":130,"line":660},[128,110033,437],{"class":166},[128,110035,253],{"class":138},[128,110037,110038],{"class":176},"\"joint qpos:\"",[128,110040,108293],{"class":138},[128,110042,4043],{"class":166},[128,110044,3034],{"class":138},[128,110046,110047,110049,110051,110054,110056,110058],{"class":130,"line":673},[128,110048,437],{"class":166},[128,110050,253],{"class":138},[128,110052,110053],{"class":176},"\"joint qvel:\"",[128,110055,108309],{"class":138},[128,110057,4043],{"class":166},[128,110059,3034],{"class":138},[128,110061,110062,110064,110066,110069],{"class":130,"line":678},[128,110063,437],{"class":166},[128,110065,253],{"class":138},[128,110067,110068],{"class":176},"\"last ctrl:\"",[128,110070,110071],{"class":138},", data.ctrl.copy())\n",[128,110073,110074],{"class":130,"line":683},[128,110075,160],{"emptyLinePlaceholder":159},[128,110077,110078],{"class":130,"line":693},[128,110079,160],{"emptyLinePlaceholder":159},[128,110081,110082,110084,110086,110088,110090],{"class":130,"line":702},[128,110083,1800],{"class":134},[128,110085,1803],{"class":166},[128,110087,1806],{"class":134},[128,110089,1809],{"class":176},[128,110091,241],{"class":138},[128,110093,110094],{"class":130,"line":709},[128,110095,1817],{"class":138},[19,110097,106933],{},[106,110099,110101],{"className":27309,"code":110100,"language":27311,"meta":112,"style":112},"touch ch4_joint_motor.py\n",[114,110102,110103],{"__ignoreMap":112},[128,110104,110105,110107],{"class":130,"line":131},[128,110106,104650],{"class":199},[128,110108,110109],{"class":176}," ch4_joint_motor.py\n",[19,110111,105664],{},[106,110113,110115],{"className":27309,"code":110114,"language":27311,"meta":112,"style":112},"python ch4_joint_motor.py\n",[114,110116,110117],{"__ignoreMap":112},[128,110118,110119,110121],{"class":130,"line":131},[128,110120,124],{"class":199},[128,110122,110109],{"class":176},[72,110124,104936],{"id":104936},[19,110126,110127],{},"检查 actuator 数量：",[106,110129,110131],{"className":122,"code":110130,"language":124,"meta":112,"style":112},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[114,110132,110133,110145],{"__ignoreMap":112},[128,110134,110135,110137,110139,110141,110143],{"class":130,"line":131},[128,110136,1800],{"class":134},[128,110138,109921],{"class":138},[128,110140,24435],{"class":134},[128,110142,28605],{"class":166},[128,110144,241],{"class":138},[128,110146,110147,110149,110151,110153,110155],{"class":130,"line":142},[128,110148,107258],{"class":134},[128,110150,106798],{"class":166},[128,110152,253],{"class":138},[128,110154,109938],{"class":176},[128,110156,180],{"class":138},[19,110158,110159,110161,110162,110164],{},[114,110160,105521],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[114,110163,104443],{}," 长度应该是 1。",[19,110166,110167],{},"产生正弦控制信号：",[106,110169,110171],{"className":122,"code":110170,"language":124,"meta":112,"style":112},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[114,110172,110173],{"__ignoreMap":112},[128,110174,110175,110177,110179,110181,110183,110185,110187,110189,110191,110193,110195,110197,110199,110201],{"class":130,"line":131},[128,110176,109234],{"class":138},[128,110178,2452],{"class":166},[128,110180,567],{"class":138},[128,110182,270],{"class":134},[128,110184,109989],{"class":166},[128,110186,10075],{"class":134},[128,110188,109994],{"class":138},[128,110190,108623],{"class":166},[128,110192,10075],{"class":134},[128,110194,110001],{"class":138},[128,110196,4205],{"class":134},[128,110198,65246],{"class":166},[128,110200,10075],{"class":134},[128,110202,110010],{"class":138},[19,110204,110205],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,110207,105036],{},[106,110209,110210],{"className":122,"code":107868,"language":124,"meta":112,"style":112},[114,110211,110212],{"__ignoreMap":112},[128,110213,110214],{"class":130,"line":131},[128,110215,107868],{"class":138},[19,110217,110218],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[72,110220,105071],{"id":105071},[106,110222,110224],{"className":122,"code":110223,"language":124,"meta":112,"style":112},"import math\n",[114,110225,110226],{"__ignoreMap":112},[128,110227,110228,110230],{"class":130,"line":131},[128,110229,135],{"class":134},[128,110231,109713],{"class":138},[19,110233,110234,110235,3330,110238,110241],{},"导入 Python 标准库里的数学模块。后面要用 ",[114,110236,110237],{},"math.sin",[114,110239,110240],{},"math.pi"," 生成周期变化的控制信号。",[106,110243,110244],{"className":122,"code":107049,"language":124,"meta":112,"style":112},[114,110245,110246,110252],{"__ignoreMap":112},[128,110247,110248,110250],{"class":130,"line":131},[128,110249,135],{"class":134},[128,110251,104668],{"class":138},[128,110253,110254,110256,110258,110260],{"class":130,"line":142},[128,110255,135],{"class":134},[128,110257,34851],{"class":138},[128,110259,279],{"class":134},[128,110261,34856],{"class":138},[19,110263,110264],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[106,110266,110267],{"className":56449,"code":109550,"language":56451,"meta":112,"style":112},[114,110268,110269],{"__ignoreMap":112},[128,110270,110271,110273,110275,110277,110279,110281,110283,110285,110287,110289,110291,110293,110295,110297,110299],{"class":130,"line":131},[128,110272,4657],{"class":138},[128,110274,106319],{"class":54685},[128,110276,18442],{"class":199},[128,110278,270],{"class":138},[128,110280,109382],{"class":176},[128,110282,57205],{"class":199},[128,110284,270],{"class":138},[128,110286,109382],{"class":176},[128,110288,109391],{"class":199},[128,110290,270],{"class":138},[128,110292,109396],{"class":176},[128,110294,109579],{"class":199},[128,110296,270],{"class":138},[128,110298,109584],{"class":176},[128,110300,104511],{"class":138},[19,110302,110303,110304,110306,110307,110309,110310,110312],{},"这行定义关节。",[114,110305,109203],{}," 表示旋转关节。",[114,110308,109602],{}," 表示绕 y 轴旋转。",[114,110311,109608],{}," 表示有一点阻尼，运动不会完全无损耗。",[106,110314,110316],{"className":56449,"code":110315,"language":56451,"meta":112,"style":112},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[114,110317,110318],{"__ignoreMap":112},[128,110319,110320,110322,110324,110326,110328,110331,110333,110335,110338,110341,110343,110346,110348,110350,110352,110354,110356,110359],{"class":130,"line":131},[128,110321,4657],{"class":138},[128,110323,104487],{"class":54685},[128,110325,18442],{"class":199},[128,110327,270],{"class":138},[128,110329,110330],{"class":176},"\"link_geom\"",[128,110332,57205],{"class":199},[128,110334,270],{"class":138},[128,110336,110337],{"class":176},"\"capsule\"",[128,110339,110340],{"class":199}," fromto",[128,110342,270],{"class":138},[128,110344,110345],{"class":176},"\"0 0 0 0 0 0.5\"",[128,110347,104503],{"class":199},[128,110349,270],{"class":138},[128,110351,107141],{"class":176},[128,110353,105364],{"class":199},[128,110355,270],{"class":138},[128,110357,110358],{"class":176},"\"0.5\"",[128,110360,104511],{"class":138},[19,110362,110363,110364,110366,110367,110369,110370,110373,110374,1842,110377,110379],{},"这行定义摆杆的形状。",[114,110365,106528],{}," 是胶囊体，适合表示杆子。",[114,110368,106539],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[114,110371,110372],{},"(0,0,0)"," 延伸到 ",[114,110375,110376],{},"(0,0,0.5)",[114,110378,106533],{}," 是半径。",[106,110381,110382],{"className":56449,"code":109616,"language":56451,"meta":112,"style":112},[114,110383,110384],{"__ignoreMap":112},[128,110385,110386,110388,110390,110392,110394,110396,110398,110400,110402,110404,110406,110408,110410,110412,110414,110416,110418,110420],{"class":130,"line":131},[128,110387,4657],{"class":138},[128,110389,109437],{"class":54685},[128,110391,18442],{"class":199},[128,110393,270],{"class":138},[128,110395,109444],{"class":176},[128,110397,109447],{"class":199},[128,110399,270],{"class":138},[128,110401,109382],{"class":176},[128,110403,109454],{"class":199},[128,110405,270],{"class":138},[128,110407,7246],{"class":176},[128,110409,109461],{"class":199},[128,110411,270],{"class":138},[128,110413,109466],{"class":176},[128,110415,109469],{"class":199},[128,110417,270],{"class":138},[128,110419,109474],{"class":176},[128,110421,104511],{"class":138},[19,110423,110424,110425,110427,110428,110431,110432,110434],{},"这行定义电机。它作用在 ",[114,110426,109203],{}," 关节上。",[114,110429,110430],{},"gear"," 可以理解成放大倍数。",[114,110433,109218],{}," 限制控制输入范围。",[106,110436,110437],{"className":122,"code":110130,"language":124,"meta":112,"style":112},[114,110438,110439,110451],{"__ignoreMap":112},[128,110440,110441,110443,110445,110447,110449],{"class":130,"line":131},[128,110442,1800],{"class":134},[128,110444,109921],{"class":138},[128,110446,24435],{"class":134},[128,110448,28605],{"class":166},[128,110450,241],{"class":138},[128,110452,110453,110455,110457,110459,110461],{"class":130,"line":142},[128,110454,107258],{"class":134},[128,110456,106798],{"class":166},[128,110458,253],{"class":138},[128,110460,109938],{"class":176},[128,110462,180],{"class":138},[19,110464,110465,110467],{},[114,110466,105521],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[106,110469,110471],{"className":122,"code":110470,"language":124,"meta":112,"style":112},"for step in range(2000):\n",[114,110472,110473],{"__ignoreMap":112},[128,110474,110475,110477,110479,110481,110483,110485,110487],{"class":130,"line":131},[128,110476,2404],{"class":134},[128,110478,35085],{"class":138},[128,110480,549],{"class":134},[128,110482,35910],{"class":166},[128,110484,253],{"class":138},[128,110486,109959],{"class":166},[128,110488,34264],{"class":138},[19,110490,110491,110492,110494,110495,110498],{},"循环 2000 步。这里没有用 ",[114,110493,4737],{},"，而是用 ",[114,110496,110497],{},"step","，因为后面要用当前步数计算时间。",[106,110500,110502],{"className":122,"code":110501,"language":124,"meta":112,"style":112},"t = step * model.opt.timestep\n",[114,110503,110504],{"__ignoreMap":112},[128,110505,110506,110509,110511,110513,110515],{"class":130,"line":131},[128,110507,110508],{"class":138},"t ",[128,110510,270],{"class":134},[128,110512,35085],{"class":138},[128,110514,4205],{"class":134},[128,110516,109975],{"class":138},[19,110518,110519],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[106,110521,110522],{"className":122,"code":110170,"language":124,"meta":112,"style":112},[114,110523,110524],{"__ignoreMap":112},[128,110525,110526,110528,110530,110532,110534,110536,110538,110540,110542,110544,110546,110548,110550,110552],{"class":130,"line":131},[128,110527,109234],{"class":138},[128,110529,2452],{"class":166},[128,110531,567],{"class":138},[128,110533,270],{"class":134},[128,110535,109989],{"class":166},[128,110537,10075],{"class":134},[128,110539,109994],{"class":138},[128,110541,108623],{"class":166},[128,110543,10075],{"class":134},[128,110545,110001],{"class":138},[128,110547,4205],{"class":134},[128,110549,65246],{"class":166},[128,110551,10075],{"class":134},[128,110553,110010],{"class":138},[19,110555,110556],{},"这行给电机输入一个正弦波。拆开看：",[26,110558,110559,110565,110571],{},[29,110560,110561,110564],{},[114,110562,110563],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[29,110566,110567,110570],{},[114,110568,110569],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[29,110572,110573,110576],{},[114,110574,110575],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,110578,110579],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[106,110581,110583],{"className":122,"code":110582,"language":124,"meta":112,"style":112},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[114,110584,110585],{"__ignoreMap":112},[128,110586,110587,110589,110591,110593,110595,110597],{"class":130,"line":131},[128,110588,2469],{"class":166},[128,110590,253],{"class":138},[128,110592,110038],{"class":176},[128,110594,108293],{"class":138},[128,110596,4043],{"class":166},[128,110598,3034],{"class":138},[19,110600,110601,110602,110604],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[114,110603,104437],{}," 只有一个数。",[14,110606,105679],{"id":105678},[19,110608,110609],{},"输出类似:",[106,110611,110614],{"className":110612,"code":110613,"language":111,"meta":112},[109],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[114,110615,110613],{"__ignoreMap":112},[19,110617,110618,110619,110621],{},"这里 ",[114,110620,109489],{}," 是电机输入。",[19,110623,110624,110627,110628,110631],{},[114,110625,110626],{},"joint qpos"," 是关节角度，单位通常是弧度。",[114,110629,110630],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,110633,110634],{},"角度单位提示：",[106,110636,110639],{"className":110637,"code":110638,"language":111,"meta":112},[109],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[114,110640,110638],{"__ignoreMap":112},[19,110642,110643,110644,110646,110647,110649],{},"如果你看到 ",[114,110645,107393],{}," 是 ",[114,110648,38721],{},"，大约就是 28.6 度。",[14,110651,105711],{"id":105710},[26,110653,110654,110661,110664,110671,110674,110682,110690],{},[29,110655,105774,110656,105777,110658,1842],{},[114,110657,109674],{},[114,110659,110660],{},"gear=\"5\"",[29,110662,110663],{},"重新运行，观察关节运动是否更剧烈。",[29,110665,105774,110666,105777,110668,1842],{},[114,110667,109218],{},[114,110669,110670],{},"-0.2 0.2",[29,110672,110673],{},"重新运行，观察控制能力是否变弱。",[29,110675,110676,110677,110679,110680,1842],{},"去掉 actuator，确认 ",[114,110678,105521],{}," 变成 ",[114,110681,2452],{},[29,110683,105774,110684,105777,110686,110689],{},[114,110685,109608],{},[114,110687,110688],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[29,110691,105774,110692,105777,110694,110697],{},[114,110693,109602],{},[114,110695,110696],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,110699,105816],{"id":105815},[72,110701,110703],{"id":110702},"indexerror-index-0-is-out-of-bounds",[114,110704,110705],{},"IndexError: index 0 is out of bounds",[19,110707,3508,110708,110710],{},[114,110709,109355],{},"，没有 actuator。",[72,110712,110713],{"id":110713},"关节几乎不动",[19,110715,110716],{},"可能原因:",[26,110718,110719,110724,110728,110734],{},[29,110720,110721,110723],{},[114,110722,110430],{}," 太小",[29,110725,110726,110723],{},[114,110727,109218],{},[29,110729,110730,110733],{},[114,110731,110732],{},"damping"," 太大",[29,110735,110736],{},"重力方向导致运动不明显",[72,110738,110739],{"id":110739},"模型编译失败",[19,110741,110742,110743,110745],{},"检查 actuator 引用的 ",[114,110744,109665],{}," 是否存在，joint 名称是否拼写一致。",[72,110747,110749,110751],{"id":110748},"datactrl0-写了但没有效果",[114,110750,109489],{}," 写了但没有效果",[19,110753,105938],{},[26,110755,110756,110761,110764,110769,110774],{},[29,110757,110758,110760],{},[114,110759,105521],{}," 是否大于 0。",[29,110762,110763],{},"motor 是否引用了正确 joint。",[29,110765,110766,110768],{},[114,110767,110430],{}," 是否太小。",[29,110770,110771,110773],{},[114,110772,109218],{}," 是否把输入限制得太小。",[29,110775,110776],{},"body 是否真的有可动 joint。",[72,110778,110779],{"id":110779},"控制输入超过范围会怎样",[19,110781,110782],{},"如果设置了：",[106,110784,110786],{"className":56449,"code":110785,"language":56451,"meta":112,"style":112},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[114,110787,110788],{"__ignoreMap":112},[128,110789,110790],{"class":130,"line":131},[128,110791,110785],{"class":138},[19,110793,110794],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[106,110796,110798],{"className":122,"code":110797,"language":124,"meta":112,"style":112},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[114,110799,110800,110820],{"__ignoreMap":112},[128,110801,110802,110805,110807,110810,110812,110814,110816,110818],{"class":130,"line":131},[128,110803,110804],{"class":138},"action ",[128,110806,270],{"class":134},[128,110808,110809],{"class":138}," np.clip(action, ",[128,110811,4281],{"class":134},[128,110813,108623],{"class":166},[128,110815,258],{"class":138},[128,110817,108623],{"class":166},[128,110819,180],{"class":138},[128,110821,110822,110824,110826,110828,110830],{"class":130,"line":142},[128,110823,109234],{"class":138},[128,110825,2452],{"class":166},[128,110827,567],{"class":138},[128,110829,270],{"class":134},[128,110831,110832],{"class":138}," action\n",[14,110834,105970],{"id":105969},[19,110836,110837],{},"这一章建立了控制任务的基本形式：",[106,110839,110842],{"className":110840,"code":110841,"language":111,"meta":112},[109],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[114,110843,110841],{"__ignoreMap":112},[19,110845,110846],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[3659,110848,110849],{},"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":112,"searchDepth":142,"depth":142,"links":110851},[110852,110853,110854,110859,110863,110864,110865,110873],{"id":104014,"depth":142,"text":104015},{"id":104137,"depth":142,"text":104138},{"id":104411,"depth":142,"text":104412,"children":110855},[110856,110857,110858],{"id":109496,"depth":156,"text":109497},{"id":109546,"depth":156,"text":109547},{"id":109612,"depth":156,"text":109613},{"id":104619,"depth":142,"text":104620,"children":110860},[110861,110862],{"id":104936,"depth":156,"text":104936},{"id":105071,"depth":156,"text":105071},{"id":105678,"depth":142,"text":105679},{"id":105710,"depth":142,"text":105711},{"id":105815,"depth":142,"text":105816,"children":110866},[110867,110868,110869,110870,110872],{"id":110702,"depth":156,"text":110705},{"id":110713,"depth":156,"text":110713},{"id":110739,"depth":156,"text":110739},{"id":110748,"depth":156,"text":110871},"data.ctrl[0] 写了但没有效果",{"id":110779,"depth":156,"text":110779},{"id":105969,"depth":142,"text":105970},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":109184,"description":112},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":110880,"title":110881,"body":110882,"description":112,"extension":3687,"meta":112787,"navigation":159,"path":112788,"seo":112789,"stem":112790,"__hash__":112791},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":110883,"toc":112763},[110884,110887,110889,110892,110900,110903,110920,110923,110948,110951,110997,110999,111001,111056,111058,111077,111079,111122,111125,111142,111145,111161,111171,111178,111180,111183,111186,111220,111223,111271,111275,111278,111292,111301,111305,111308,111333,111336,111340,111353,111356,111362,111365,111380,111382,111385,111645,111647,111659,111662,111971,111973,111985,111987,111990,112005,112010,112013,112034,112037,112040,112074,112077,112081,112092,112095,112112,112115,112129,112136,112156,112163,112177,112180,112192,112207,112227,112230,112252,112255,112259,112274,112285,112300,112303,112333,112349,112378,112386,112410,112413,112431,112441,112453,112460,112469,112475,112484,112487,112489,112498,112501,112516,112518,112521,112532,112535,112546,112549,112567,112569,112586,112589,112617,112619,112623,112626,112656,112662,112665,112669,112677,112680,112682,112703,112706,112709,112725,112728,112744,112746,112749,112760],[10,110885,110881],{"id":110886},"_5viewer-可视化与-renderer-离屏渲染",[14,110888,104015],{"id":104014},[19,110890,110891],{},"本章掌握两类可视化方式:",[26,110893,110894,110897],{},[29,110895,110896],{},"交互式 viewer: 适合人工观察仿真",[29,110898,110899],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,110901,110902],{},"使用官方接口:",[106,110904,110906],{"className":122,"code":110905,"language":124,"meta":112,"style":112},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[114,110907,110908,110915],{"__ignoreMap":112},[128,110909,110910,110912],{"class":130,"line":131},[128,110911,135],{"class":134},[128,110913,110914],{"class":138}," mujoco.viewer\n",[128,110916,110917],{"class":130,"line":142},[128,110918,110919],{"class":138},"mujoco.viewer.launch_passive(model, data)\n",[19,110921,110922],{},"以及:",[106,110924,110926],{"className":122,"code":110925,"language":124,"meta":112,"style":112},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[114,110927,110928,110938],{"__ignoreMap":112},[128,110929,110930,110933,110935],{"class":130,"line":131},[128,110931,110932],{"class":138},"renderer ",[128,110934,270],{"class":134},[128,110936,110937],{"class":138}," mujoco.Renderer(model)\n",[128,110939,110940,110943,110945],{"class":130,"line":142},[128,110941,110942],{"class":138},"image ",[128,110944,270],{"class":134},[128,110946,110947],{"class":138}," renderer.render()\n",[19,110949,110950],{},"新手建议先理解二者区别：",[3891,110952,110953,110969],{},[3894,110954,110955],{},[3897,110956,110957,110960,110963,110966],{},[3900,110958,110959],{"align":27223},"工具",[3900,110961,110962],{"align":27223},"用途",[3900,110964,110965],{"align":27223},"是否打开窗口",[3900,110967,110968],{"align":27223},"常见场景",[3938,110970,110971,110984],{},[3897,110972,110973,110976,110979,110981],{},[3943,110974,110975],{"align":27223},"Viewer",[3943,110977,110978],{"align":27223},"人眼实时观察仿真",[3943,110980,108028],{"align":27223},[3943,110982,110983],{"align":27223},"调试模型、看控制效果",[3897,110985,110986,110989,110992,110994],{},[3943,110987,110988],{"align":27223},"Renderer",[3943,110990,110991],{"align":27223},"生成图像数组",[3943,110993,108041],{"align":27223},[3943,110995,110996],{"align":27223},"保存图片、训练视觉策略、服务器批量采集",[14,110998,104138],{"id":104137},[19,111000,104141],{},[106,111002,111004],{"className":27309,"code":111003,"language":27311,"meta":112,"style":112},"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",[114,111005,111006,111018,111028,111036,111044],{"__ignoreMap":112},[128,111007,111008,111010,111012,111014,111016],{"class":130,"line":131},[128,111009,28064],{"class":199},[128,111011,29800],{"class":176},[128,111013,27321],{"class":176},[128,111015,29885],{"class":166},[128,111017,28165],{"class":166},[128,111019,111020,111022,111024,111026],{"class":130,"line":142},[128,111021,104176],{"class":176},[128,111023,104179],{"class":176},[128,111025,104182],{"class":176},[128,111027,28165],{"class":166},[128,111029,111030,111032,111034],{"class":130,"line":156},[128,111031,104189],{"class":176},[128,111033,104192],{"class":176},[128,111035,28165],{"class":166},[128,111037,111038,111040,111042],{"class":130,"line":163},[128,111039,104199],{"class":176},[128,111041,104202],{"class":176},[128,111043,28165],{"class":166},[128,111045,111046,111048,111050,111052,111054],{"class":130,"line":183},[128,111047,104209],{"class":176},[128,111049,104212],{"class":176},[128,111051,104215],{"class":176},[128,111053,104218],{"class":176},[128,111055,105879],{"class":176},[19,111057,106182],{},[106,111059,111061],{"className":27309,"code":111060,"language":27311,"meta":112,"style":112},"pip install \"mujoco>=2.3\" numpy pillow\n",[114,111062,111063],{"__ignoreMap":112},[128,111064,111065,111067,111069,111071,111074],{"class":130,"line":131},[128,111066,27318],{"class":199},[128,111068,27321],{"class":176},[128,111070,104298],{"class":176},[128,111072,111073],{"class":176}," numpy",[128,111075,111076],{"class":176}," pillow\n",[19,111078,106199],{},[106,111080,111082],{"className":27309,"code":111081,"language":27311,"meta":112,"style":112},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[114,111083,111084,111101,111110],{"__ignoreMap":112},[128,111085,111086,111088,111090,111092,111095,111097,111099],{"class":130,"line":131},[128,111087,33814],{"class":199},[128,111089,32660],{"class":176},[128,111091,28602],{"class":166},[128,111093,111094],{"class":176}," mujoco-render",[128,111096,104343],{"class":176},[128,111098,104346],{"class":166},[128,111100,104349],{"class":166},[128,111102,111103,111105,111107],{"class":130,"line":142},[128,111104,33814],{"class":199},[128,111106,104356],{"class":176},[128,111108,111109],{"class":176}," mujoco-render\n",[128,111111,111112,111114,111116,111118,111120],{"class":130,"line":156},[128,111113,27318],{"class":199},[128,111115,27321],{"class":176},[128,111117,104298],{"class":176},[128,111119,111073],{"class":176},[128,111121,111076],{"class":176},[19,111123,111124],{},"离屏渲染后端:",[106,111126,111128],{"className":27309,"code":111127,"language":27311,"meta":112,"style":112},"export MUJOCO_GL=egl\n",[114,111129,111130],{"__ignoreMap":112},[128,111131,111132,111134,111137,111139],{"class":130,"line":131},[128,111133,28529],{"class":134},[128,111135,111136],{"class":138}," MUJOCO_GL",[128,111138,270],{"class":134},[128,111140,111141],{"class":138},"egl\n",[19,111143,111144],{},"或:",[106,111146,111148],{"className":27309,"code":111147,"language":27311,"meta":112,"style":112},"export MUJOCO_GL=osmesa\n",[114,111149,111150],{"__ignoreMap":112},[128,111151,111152,111154,111156,111158],{"class":130,"line":131},[128,111153,28529],{"class":134},[128,111155,111136],{"class":138},[128,111157,270],{"class":134},[128,111159,111160],{"class":138},"osmesa\n",[19,111162,111163,111164,111167,111168,1842],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[114,111165,111166],{},"egl"," 失败，再尝试 ",[114,111169,111170],{},"osmesa",[19,111172,111173,111174,111177],{},"如果你在本机桌面环境运行，通常先不要设置 ",[114,111175,111176],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,111179,104412],{"id":104411},[19,111181,111182],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,111184,111185],{},"典型 viewer 流程:",[106,111187,111189],{"className":122,"code":111188,"language":124,"meta":112,"style":112},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[114,111190,111191,111204,111211,111215],{"__ignoreMap":112},[128,111192,111193,111196,111199,111201],{"class":130,"line":131},[128,111194,111195],{"class":134},"with",[128,111197,111198],{"class":138}," mujoco.viewer.launch_passive(model, data) ",[128,111200,279],{"class":134},[128,111202,111203],{"class":138}," viewer:\n",[128,111205,111206,111208],{"class":130,"line":142},[128,111207,617],{"class":134},[128,111209,111210],{"class":138}," viewer.is_running():\n",[128,111212,111213],{"class":130,"line":156},[128,111214,104883],{"class":138},[128,111216,111217],{"class":130,"line":163},[128,111218,111219],{"class":138},"        viewer.sync()\n",[19,111221,111222],{},"典型 renderer 流程:",[106,111224,111226],{"className":122,"code":111225,"language":124,"meta":112,"style":112},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[114,111227,111228,111254,111258,111263],{"__ignoreMap":112},[128,111229,111230,111232,111234,111237,111239,111241,111243,111245,111247,111249,111252],{"class":130,"line":131},[128,111231,110932],{"class":138},[128,111233,270],{"class":134},[128,111235,111236],{"class":138}," mujoco.Renderer(model, ",[128,111238,28468],{"class":266},[128,111240,270],{"class":134},[128,111242,45728],{"class":166},[128,111244,258],{"class":138},[128,111246,28464],{"class":266},[128,111248,270],{"class":134},[128,111250,111251],{"class":166},"640",[128,111253,180],{"class":138},[128,111255,111256],{"class":130,"line":142},[128,111257,107868],{"class":138},[128,111259,111260],{"class":130,"line":156},[128,111261,111262],{"class":138},"renderer.update_scene(data)\n",[128,111264,111265,111267,111269],{"class":130,"line":163},[128,111266,110942],{"class":138},[128,111268,270],{"class":134},[128,111270,110947],{"class":138},[72,111272,111274],{"id":111273},"viewer-的同步逻辑","viewer 的同步逻辑",[19,111276,111277],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[106,111279,111281],{"className":122,"code":111280,"language":124,"meta":112,"style":112},"mujoco.mj_step(model, data)\nviewer.sync()\n",[114,111282,111283,111287],{"__ignoreMap":112},[128,111284,111285],{"class":130,"line":131},[128,111286,107868],{"class":138},[128,111288,111289],{"class":130,"line":142},[128,111290,111291],{"class":138},"viewer.sync()\n",[19,111293,111294,111296,111297,111300],{},[114,111295,104582],{}," 负责算物理，",[114,111298,111299],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[72,111302,111304],{"id":111303},"为什么要-sleep","为什么要 sleep",[19,111306,111307],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[106,111309,111311],{"className":122,"code":111310,"language":124,"meta":112,"style":112},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[114,111312,111313],{"__ignoreMap":112},[128,111314,111315,111318,111320,111323,111325,111328,111330],{"class":130,"line":131},[128,111316,111317],{"class":138},"sleep_time ",[128,111319,270],{"class":134},[128,111321,111322],{"class":138}," model.opt.timestep ",[128,111324,4281],{"class":134},[128,111326,111327],{"class":138}," (time.time() ",[128,111329,4281],{"class":134},[128,111331,111332],{"class":138}," step_start)\n",[19,111334,111335],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[72,111337,111339],{"id":111338},"renderer-输出是什么","renderer 输出是什么",[106,111341,111343],{"className":122,"code":111342,"language":124,"meta":112,"style":112},"image = renderer.render()\n",[114,111344,111345],{"__ignoreMap":112},[128,111346,111347,111349,111351],{"class":130,"line":131},[128,111348,110942],{"class":138},[128,111350,270],{"class":134},[128,111352,110947],{"class":138},[19,111354,111355],{},"得到的是 NumPy 数组，形状通常是：",[106,111357,111360],{"className":111358,"code":111359,"language":111,"meta":112},[109],"(height, width, 3)\n",[114,111361,111359],{"__ignoreMap":112},[19,111363,111364],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[106,111366,111368],{"className":122,"code":111367,"language":124,"meta":112,"style":112},"Image.fromarray(image).save(\"render_output.png\")\n",[114,111369,111370],{"__ignoreMap":112},[128,111371,111372,111375,111378],{"class":130,"line":131},[128,111373,111374],{"class":138},"Image.fromarray(image).save(",[128,111376,111377],{"class":176},"\"render_output.png\"",[128,111379,180],{"class":138},[14,111381,104620],{"id":104619},[19,111383,111384],{},"交互式 Viewer:",[106,111386,111388],{"className":122,"code":111387,"language":124,"meta":112,"style":112},"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",[114,111389,111390,111396,111400,111406,111412,111416,111420,111428,111433,111437,111441,111445,111450,111455,111459,111463,111467,111472,111476,111480,111484,111488,111492,111496,111508,111520,111528,111532,111542,111562,111572,111577,111582,111586,111603,111616,111621,111625,111629,111641],{"__ignoreMap":112},[128,111391,111392,111394],{"class":130,"line":131},[128,111393,135],{"class":134},[128,111395,35298],{"class":138},[128,111397,111398],{"class":130,"line":142},[128,111399,160],{"emptyLinePlaceholder":159},[128,111401,111402,111404],{"class":130,"line":156},[128,111403,135],{"class":134},[128,111405,104668],{"class":138},[128,111407,111408,111410],{"class":130,"line":163},[128,111409,135],{"class":134},[128,111411,110914],{"class":138},[128,111413,111414],{"class":130,"line":183},[128,111415,160],{"emptyLinePlaceholder":159},[128,111417,111418],{"class":130,"line":188},[128,111419,160],{"emptyLinePlaceholder":159},[128,111421,111422,111424,111426],{"class":130,"line":193},[128,111423,104681],{"class":166},[128,111425,170],{"class":134},[128,111427,104686],{"class":176},[128,111429,111430],{"class":130,"line":206},[128,111431,111432],{"class":176},"\u003Cmujoco model=\"viewer_demo\">\n",[128,111434,111435],{"class":130,"line":221},[128,111436,104696],{"class":176},[128,111438,111439],{"class":130,"line":230},[128,111440,160],{"emptyLinePlaceholder":159},[128,111442,111443],{"class":130,"line":235},[128,111444,104705],{"class":176},[128,111446,111447],{"class":130,"line":244},[128,111448,111449],{"class":176},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[128,111451,111452],{"class":130,"line":287},[128,111453,111454],{"class":176},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[128,111456,111457],{"class":130,"line":301},[128,111458,160],{"emptyLinePlaceholder":159},[128,111460,111461],{"class":130,"line":310},[128,111462,104719],{"class":176},[128,111464,111465],{"class":130,"line":323},[128,111466,104724],{"class":176},[128,111468,111469],{"class":130,"line":330},[128,111470,111471],{"class":176},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[128,111473,111474],{"class":130,"line":335},[128,111475,104734],{"class":176},[128,111477,111478],{"class":130,"line":340},[128,111479,104739],{"class":176},[128,111481,111482],{"class":130,"line":351},[128,111483,104744],{"class":176},[128,111485,111486],{"class":130,"line":384},[128,111487,99067],{"class":176},[128,111489,111490],{"class":130,"line":414},[128,111491,160],{"emptyLinePlaceholder":159},[128,111493,111494],{"class":130,"line":419},[128,111495,160],{"emptyLinePlaceholder":159},[128,111497,111498,111500,111502,111504,111506],{"class":130,"line":424},[128,111499,196],{"class":134},[128,111501,1575],{"class":199},[128,111503,104765],{"class":138},[128,111505,99055],{"class":166},[128,111507,241],{"class":138},[128,111509,111510,111512,111514,111516,111518],{"class":130,"line":434},[128,111511,104774],{"class":138},[128,111513,270],{"class":134},[128,111515,104779],{"class":138},[128,111517,104681],{"class":166},[128,111519,180],{"class":138},[128,111521,111522,111524,111526],{"class":130,"line":447},[128,111523,104788],{"class":138},[128,111525,270],{"class":134},[128,111527,104793],{"class":138},[128,111529,111530],{"class":130,"line":459},[128,111531,160],{"emptyLinePlaceholder":159},[128,111533,111534,111536,111538,111540],{"class":130,"line":471},[128,111535,354],{"class":134},[128,111537,111198],{"class":138},[128,111539,279],{"class":134},[128,111541,111203],{"class":138},[128,111543,111544,111547,111550,111552,111555,111557,111560],{"class":130,"line":483},[128,111545,111546],{"class":134},"        while",[128,111548,111549],{"class":138}," viewer.is_running() ",[128,111551,33942],{"class":134},[128,111553,111554],{"class":138}," data.time ",[128,111556,4657],{"class":134},[128,111558,111559],{"class":166}," 5.0",[128,111561,241],{"class":138},[128,111563,111564,111567,111569],{"class":130,"line":495},[128,111565,111566],{"class":138},"            step_start ",[128,111568,270],{"class":134},[128,111570,111571],{"class":138}," time.time()\n",[128,111573,111574],{"class":130,"line":507},[128,111575,111576],{"class":138},"            mujoco.mj_step(model, data)\n",[128,111578,111579],{"class":130,"line":519},[128,111580,111581],{"class":138},"            viewer.sync()\n",[128,111583,111584],{"class":130,"line":524},[128,111585,160],{"emptyLinePlaceholder":159},[128,111587,111588,111591,111593,111595,111597,111599,111601],{"class":130,"line":529},[128,111589,111590],{"class":138},"            sleep_time ",[128,111592,270],{"class":134},[128,111594,111322],{"class":138},[128,111596,4281],{"class":134},[128,111598,111327],{"class":138},[128,111600,4281],{"class":134},[128,111602,111332],{"class":138},[128,111604,111605,111607,111610,111612,111614],{"class":130,"line":540},[128,111606,2156],{"class":134},[128,111608,111609],{"class":138}," sleep_time ",[128,111611,4705],{"class":134},[128,111613,7659],{"class":166},[128,111615,241],{"class":138},[128,111617,111618],{"class":130,"line":555},[128,111619,111620],{"class":138},"                time.sleep(sleep_time)\n",[128,111622,111623],{"class":130,"line":576},[128,111624,160],{"emptyLinePlaceholder":159},[128,111626,111627],{"class":130,"line":584},[128,111628,160],{"emptyLinePlaceholder":159},[128,111630,111631,111633,111635,111637,111639],{"class":130,"line":593},[128,111632,1800],{"class":134},[128,111634,1803],{"class":166},[128,111636,1806],{"class":134},[128,111638,1809],{"class":176},[128,111640,241],{"class":138},[128,111642,111643],{"class":130,"line":598},[128,111644,1817],{"class":138},[19,111646,106933],{},[106,111648,111650],{"className":27309,"code":111649,"language":27311,"meta":112,"style":112},"touch ch5_viewer.py\n",[114,111651,111652],{"__ignoreMap":112},[128,111653,111654,111656],{"class":130,"line":131},[128,111655,104650],{"class":199},[128,111657,111658],{"class":176}," ch5_viewer.py\n",[19,111660,111661],{},"离屏 Renderer 保存图片:",[106,111663,111665],{"className":122,"code":111664,"language":124,"meta":112,"style":112},"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",[114,111666,111667,111677,111681,111687,111697,111701,111705,111713,111718,111722,111726,111730,111734,111739,111743,111747,111751,111755,111759,111763,111767,111771,111775,111779,111783,111795,111807,111815,111840,111844,111860,111864,111868,111883,111892,111896,111909,111914,111919,111923,111935,111947,111951,111955,111967],{"__ignoreMap":112},[128,111668,111669,111671,111673,111675],{"class":130,"line":131},[128,111670,145],{"class":134},[128,111672,148],{"class":138},[128,111674,135],{"class":134},[128,111676,153],{"class":138},[128,111678,111679],{"class":130,"line":142},[128,111680,160],{"emptyLinePlaceholder":159},[128,111682,111683,111685],{"class":130,"line":156},[128,111684,135],{"class":134},[128,111686,104668],{"class":138},[128,111688,111689,111691,111693,111695],{"class":130,"line":163},[128,111690,145],{"class":134},[128,111692,50648],{"class":166},[128,111694,50651],{"class":134},[128,111696,50654],{"class":138},[128,111698,111699],{"class":130,"line":183},[128,111700,160],{"emptyLinePlaceholder":159},[128,111702,111703],{"class":130,"line":188},[128,111704,160],{"emptyLinePlaceholder":159},[128,111706,111707,111709,111711],{"class":130,"line":193},[128,111708,104681],{"class":166},[128,111710,170],{"class":134},[128,111712,104686],{"class":176},[128,111714,111715],{"class":130,"line":206},[128,111716,111717],{"class":176},"\u003Cmujoco model=\"renderer_demo\">\n",[128,111719,111720],{"class":130,"line":221},[128,111721,104696],{"class":176},[128,111723,111724],{"class":130,"line":230},[128,111725,160],{"emptyLinePlaceholder":159},[128,111727,111728],{"class":130,"line":235},[128,111729,104705],{"class":176},[128,111731,111732],{"class":130,"line":244},[128,111733,111449],{"class":176},[128,111735,111736],{"class":130,"line":287},[128,111737,111738],{"class":176},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[128,111740,111741],{"class":130,"line":301},[128,111742,111454],{"class":176},[128,111744,111745],{"class":130,"line":310},[128,111746,160],{"emptyLinePlaceholder":159},[128,111748,111749],{"class":130,"line":323},[128,111750,104719],{"class":176},[128,111752,111753],{"class":130,"line":330},[128,111754,104724],{"class":176},[128,111756,111757],{"class":130,"line":335},[128,111758,111471],{"class":176},[128,111760,111761],{"class":130,"line":340},[128,111762,104734],{"class":176},[128,111764,111765],{"class":130,"line":351},[128,111766,104739],{"class":176},[128,111768,111769],{"class":130,"line":384},[128,111770,104744],{"class":176},[128,111772,111773],{"class":130,"line":414},[128,111774,99067],{"class":176},[128,111776,111777],{"class":130,"line":419},[128,111778,160],{"emptyLinePlaceholder":159},[128,111780,111781],{"class":130,"line":424},[128,111782,160],{"emptyLinePlaceholder":159},[128,111784,111785,111787,111789,111791,111793],{"class":130,"line":434},[128,111786,196],{"class":134},[128,111788,1575],{"class":199},[128,111790,104765],{"class":138},[128,111792,99055],{"class":166},[128,111794,241],{"class":138},[128,111796,111797,111799,111801,111803,111805],{"class":130,"line":447},[128,111798,104774],{"class":138},[128,111800,270],{"class":134},[128,111802,104779],{"class":138},[128,111804,104681],{"class":166},[128,111806,180],{"class":138},[128,111808,111809,111811,111813],{"class":130,"line":459},[128,111810,104788],{"class":138},[128,111812,270],{"class":134},[128,111814,104793],{"class":138},[128,111816,111817,111820,111822,111824,111826,111828,111830,111832,111834,111836,111838],{"class":130,"line":471},[128,111818,111819],{"class":138},"    renderer ",[128,111821,270],{"class":134},[128,111823,111236],{"class":138},[128,111825,28468],{"class":266},[128,111827,270],{"class":134},[128,111829,45728],{"class":166},[128,111831,258],{"class":138},[128,111833,28464],{"class":266},[128,111835,270],{"class":134},[128,111837,111251],{"class":166},[128,111839,180],{"class":138},[128,111841,111842],{"class":130,"line":483},[128,111843,160],{"emptyLinePlaceholder":159},[128,111845,111846,111848,111850,111852,111854,111856,111858],{"class":130,"line":495},[128,111847,543],{"class":134},[128,111849,104868],{"class":138},[128,111851,549],{"class":134},[128,111853,35910],{"class":166},[128,111855,253],{"class":138},[128,111857,4061],{"class":166},[128,111859,34264],{"class":138},[128,111861,111862],{"class":130,"line":507},[128,111863,104883],{"class":138},[128,111865,111866],{"class":130,"line":519},[128,111867,160],{"emptyLinePlaceholder":159},[128,111869,111870,111873,111876,111878,111881],{"class":130,"line":524},[128,111871,111872],{"class":138},"    renderer.update_scene(data, ",[128,111874,111875],{"class":266},"camera",[128,111877,270],{"class":134},[128,111879,111880],{"class":176},"\"fixed_camera\"",[128,111882,180],{"class":138},[128,111884,111885,111888,111890],{"class":130,"line":529},[128,111886,111887],{"class":138},"    image ",[128,111889,270],{"class":134},[128,111891,110947],{"class":138},[128,111893,111894],{"class":130,"line":540},[128,111895,160],{"emptyLinePlaceholder":159},[128,111897,111898,111901,111903,111905,111907],{"class":130,"line":555},[128,111899,111900],{"class":138},"    output_path ",[128,111902,270],{"class":134},[128,111904,173],{"class":138},[128,111906,111377],{"class":176},[128,111908,180],{"class":138},[128,111910,111911],{"class":130,"line":576},[128,111912,111913],{"class":138},"    Image.fromarray(image).save(output_path)\n",[128,111915,111916],{"class":130,"line":584},[128,111917,111918],{"class":138},"    renderer.close()\n",[128,111920,111921],{"class":130,"line":593},[128,111922,160],{"emptyLinePlaceholder":159},[128,111924,111925,111927,111929,111932],{"class":130,"line":598},[128,111926,437],{"class":166},[128,111928,253],{"class":138},[128,111930,111931],{"class":176},"\"saved:\"",[128,111933,111934],{"class":138},", output_path.resolve())\n",[128,111936,111937,111939,111941,111944],{"class":130,"line":603},[128,111938,437],{"class":166},[128,111940,253],{"class":138},[128,111942,111943],{"class":176},"\"image shape:\"",[128,111945,111946],{"class":138},", image.shape)\n",[128,111948,111949],{"class":130,"line":614},[128,111950,160],{"emptyLinePlaceholder":159},[128,111952,111953],{"class":130,"line":625},[128,111954,160],{"emptyLinePlaceholder":159},[128,111956,111957,111959,111961,111963,111965],{"class":130,"line":633},[128,111958,1800],{"class":134},[128,111960,1803],{"class":166},[128,111962,1806],{"class":134},[128,111964,1809],{"class":176},[128,111966,241],{"class":138},[128,111968,111969],{"class":130,"line":649},[128,111970,1817],{"class":138},[19,111972,106933],{},[106,111974,111976],{"className":27309,"code":111975,"language":27311,"meta":112,"style":112},"touch ch5_renderer.py\n",[114,111977,111978],{"__ignoreMap":112},[128,111979,111980,111982],{"class":130,"line":131},[128,111981,104650],{"class":199},[128,111983,111984],{"class":176}," ch5_renderer.py\n",[72,111986,104936],{"id":104936},[19,111988,111989],{},"viewer 上下文：",[106,111991,111993],{"className":122,"code":111992,"language":124,"meta":112,"style":112},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[114,111994,111995],{"__ignoreMap":112},[128,111996,111997,111999,112001,112003],{"class":130,"line":131},[128,111998,111195],{"class":134},[128,112000,111198],{"class":138},[128,112002,279],{"class":134},[128,112004,111203],{"class":138},[19,112006,112007,112009],{},[114,112008,111195],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,112011,112012],{},"窗口循环：",[106,112014,112016],{"className":122,"code":112015,"language":124,"meta":112,"style":112},"while viewer.is_running() and data.time \u003C 5.0:\n",[114,112017,112018],{"__ignoreMap":112},[128,112019,112020,112022,112024,112026,112028,112030,112032],{"class":130,"line":131},[128,112021,3329],{"class":134},[128,112023,111549],{"class":138},[128,112025,33942],{"class":134},[128,112027,111554],{"class":138},[128,112029,4657],{"class":134},[128,112031,111559],{"class":166},[128,112033,241],{"class":138},[19,112035,112036],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,112038,112039],{},"固定相机：",[106,112041,112043],{"className":56449,"code":112042,"language":56451,"meta":112,"style":112},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[114,112044,112045],{"__ignoreMap":112},[128,112046,112047,112049,112051,112053,112055,112057,112059,112061,112064,112067,112069,112072],{"class":130,"line":131},[128,112048,4657],{"class":138},[128,112050,111875],{"class":54685},[128,112052,18442],{"class":199},[128,112054,270],{"class":138},[128,112056,111880],{"class":176},[128,112058,104473],{"class":199},[128,112060,270],{"class":138},[128,112062,112063],{"class":176},"\"1.5 -2.0 1.2\"",[128,112065,112066],{"class":199}," xyaxes",[128,112068,270],{"class":138},[128,112070,112071],{"class":176},"\"1 0.75 0 0 0 1\"",[128,112073,104511],{"class":138},[19,112075,112076],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[72,112078,112080],{"id":112079},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[106,112082,112084],{"className":122,"code":112083,"language":124,"meta":112,"style":112},"import time\n",[114,112085,112086],{"__ignoreMap":112},[128,112087,112088,112090],{"class":130,"line":131},[128,112089,135],{"class":134},[128,112091,35298],{"class":138},[19,112093,112094],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[106,112096,112098],{"className":122,"code":112097,"language":124,"meta":112,"style":112},"import mujoco\nimport mujoco.viewer\n",[114,112099,112100,112106],{"__ignoreMap":112},[128,112101,112102,112104],{"class":130,"line":131},[128,112103,135],{"class":134},[128,112105,104668],{"class":138},[128,112107,112108,112110],{"class":130,"line":142},[128,112109,135],{"class":134},[128,112111,110914],{"class":138},[19,112113,112114],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[106,112116,112117],{"className":122,"code":111992,"language":124,"meta":112,"style":112},[114,112118,112119],{"__ignoreMap":112},[128,112120,112121,112123,112125,112127],{"class":130,"line":131},[128,112122,111195],{"class":134},[128,112124,111198],{"class":138},[128,112126,279],{"class":134},[128,112128,111203],{"class":138},[19,112130,112131,112132,112135],{},"打开一个 viewer 窗口。",[114,112133,112134],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[106,112137,112138],{"className":122,"code":112015,"language":124,"meta":112,"style":112},[114,112139,112140],{"__ignoreMap":112},[128,112141,112142,112144,112146,112148,112150,112152,112154],{"class":130,"line":131},[128,112143,3329],{"class":134},[128,112145,111549],{"class":138},[128,112147,33942],{"class":134},[128,112149,111554],{"class":138},[128,112151,4657],{"class":134},[128,112153,111559],{"class":166},[128,112155,241],{"class":138},[19,112157,112158,112159,112162],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[114,112160,112161],{},"viewer.is_running()"," 会变成 false，循环结束。",[106,112164,112166],{"className":122,"code":112165,"language":124,"meta":112,"style":112},"step_start = time.time()\n",[114,112167,112168],{"__ignoreMap":112},[128,112169,112170,112173,112175],{"class":130,"line":131},[128,112171,112172],{"class":138},"step_start ",[128,112174,270],{"class":134},[128,112176,111571],{"class":138},[19,112178,112179],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[106,112181,112182],{"className":122,"code":111280,"language":124,"meta":112,"style":112},[114,112183,112184,112188],{"__ignoreMap":112},[128,112185,112186],{"class":130,"line":131},[128,112187,107868],{"class":138},[128,112189,112190],{"class":130,"line":142},[128,112191,111291],{"class":138},[19,112193,112194,112196,112197,112199,112200,112202,112203,112206],{},[114,112195,104582],{}," 推进物理仿真。",[114,112198,111299],{}," 把最新的 ",[114,112201,36797],{}," 同步到窗口里显示。没有 ",[114,112204,112205],{},"sync()","，窗口可能看不到最新状态。",[106,112208,112209],{"className":122,"code":111310,"language":124,"meta":112,"style":112},[114,112210,112211],{"__ignoreMap":112},[128,112212,112213,112215,112217,112219,112221,112223,112225],{"class":130,"line":131},[128,112214,111317],{"class":138},[128,112216,270],{"class":134},[128,112218,111322],{"class":138},[128,112220,4281],{"class":134},[128,112222,111327],{"class":138},[128,112224,4281],{"class":134},[128,112226,111332],{"class":138},[19,112228,112229],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[106,112231,112233],{"className":122,"code":112232,"language":124,"meta":112,"style":112},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[114,112234,112235,112247],{"__ignoreMap":112},[128,112236,112237,112239,112241,112243,112245],{"class":130,"line":131},[128,112238,1800],{"class":134},[128,112240,111609],{"class":138},[128,112242,4705],{"class":134},[128,112244,7659],{"class":166},[128,112246,241],{"class":138},[128,112248,112249],{"class":130,"line":142},[128,112250,112251],{"class":138},"    time.sleep(sleep_time)\n",[19,112253,112254],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[72,112256,112258],{"id":112257},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[106,112260,112262],{"className":122,"code":112261,"language":124,"meta":112,"style":112},"from pathlib import Path\n",[114,112263,112264],{"__ignoreMap":112},[128,112265,112266,112268,112270,112272],{"class":130,"line":131},[128,112267,145],{"class":134},[128,112269,148],{"class":138},[128,112271,135],{"class":134},[128,112273,153],{"class":138},[19,112275,112276,112277,112280,112281,112284],{},"导入 ",[114,112278,112279],{},"Path","，用来处理文件路径。相比直接写字符串，",[114,112282,112283],{},"Path(\"render_output.png\")"," 更清晰。",[106,112286,112288],{"className":122,"code":112287,"language":124,"meta":112,"style":112},"from PIL import Image\n",[114,112289,112290],{"__ignoreMap":112},[128,112291,112292,112294,112296,112298],{"class":130,"line":131},[128,112293,145],{"class":134},[128,112295,50648],{"class":166},[128,112297,50651],{"class":134},[128,112299,50654],{"class":138},[19,112301,112302],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[106,112304,112305],{"className":56449,"code":112042,"language":56451,"meta":112,"style":112},[114,112306,112307],{"__ignoreMap":112},[128,112308,112309,112311,112313,112315,112317,112319,112321,112323,112325,112327,112329,112331],{"class":130,"line":131},[128,112310,4657],{"class":138},[128,112312,111875],{"class":54685},[128,112314,18442],{"class":199},[128,112316,270],{"class":138},[128,112318,111880],{"class":176},[128,112320,104473],{"class":199},[128,112322,270],{"class":138},[128,112324,112063],{"class":176},[128,112326,112066],{"class":199},[128,112328,270],{"class":138},[128,112330,112071],{"class":176},[128,112332,104511],{"class":138},[19,112334,112335,112336,112338,112339,112341,112342,112345,112346,112348],{},"定义一个相机。",[114,112337,2773],{}," 是相机名字。",[114,112340,107509],{}," 是相机在世界里的位置。",[114,112343,112344],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[114,112347,107509],{}," 来调视角。",[106,112350,112352],{"className":122,"code":112351,"language":124,"meta":112,"style":112},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[114,112353,112354],{"__ignoreMap":112},[128,112355,112356,112358,112360,112362,112364,112366,112368,112370,112372,112374,112376],{"class":130,"line":131},[128,112357,110932],{"class":138},[128,112359,270],{"class":134},[128,112361,111236],{"class":138},[128,112363,28468],{"class":266},[128,112365,270],{"class":134},[128,112367,45728],{"class":166},[128,112369,258],{"class":138},[128,112371,28464],{"class":266},[128,112373,270],{"class":134},[128,112375,111251],{"class":166},[128,112377,180],{"class":138},[19,112379,112380,112381,3330,112383,112385],{},"创建离屏渲染器。",[114,112382,28468],{},[114,112384,28464],{}," 决定输出图片大小。",[106,112387,112388],{"className":122,"code":105039,"language":124,"meta":112,"style":112},[114,112389,112390,112406],{"__ignoreMap":112},[128,112391,112392,112394,112396,112398,112400,112402,112404],{"class":130,"line":131},[128,112393,2404],{"class":134},[128,112395,104868],{"class":138},[128,112397,549],{"class":134},[128,112399,35910],{"class":166},[128,112401,253],{"class":138},[128,112403,4061],{"class":166},[128,112405,34264],{"class":138},[128,112407,112408],{"class":130,"line":142},[128,112409,105062],{"class":138},[19,112411,112412],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[106,112414,112416],{"className":122,"code":112415,"language":124,"meta":112,"style":112},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[114,112417,112418],{"__ignoreMap":112},[128,112419,112420,112423,112425,112427,112429],{"class":130,"line":131},[128,112421,112422],{"class":138},"renderer.update_scene(data, ",[128,112424,111875],{"class":266},[128,112426,270],{"class":134},[128,112428,111880],{"class":176},[128,112430,180],{"class":138},[19,112432,112433,112434,112436,112437,112440],{},"告诉 renderer：用当前 ",[114,112435,36797],{}," 的状态更新画面，并使用名为 ",[114,112438,112439],{},"fixed_camera"," 的相机视角。",[106,112442,112443],{"className":122,"code":111342,"language":124,"meta":112,"style":112},[114,112444,112445],{"__ignoreMap":112},[128,112446,112447,112449,112451],{"class":130,"line":131},[128,112448,110942],{"class":138},[128,112450,270],{"class":134},[128,112452,110947],{"class":138},[19,112454,112455,112456,112459],{},"真正渲染出图像。",[114,112457,112458],{},"image"," 是一个 NumPy 数组，不是文件。",[106,112461,112463],{"className":122,"code":112462,"language":124,"meta":112,"style":112},"Image.fromarray(image).save(output_path)\n",[114,112464,112465],{"__ignoreMap":112},[128,112466,112467],{"class":130,"line":131},[128,112468,112462],{"class":138},[19,112470,112471,112472,1842],{},"把数组转换成图片，并保存到 ",[114,112473,112474],{},"render_output.png",[106,112476,112478],{"className":122,"code":112477,"language":124,"meta":112,"style":112},"renderer.close()\n",[114,112479,112480],{"__ignoreMap":112},[128,112481,112482],{"class":130,"line":131},[128,112483,112477],{"class":138},[19,112485,112486],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,112488,105679],{"id":105678},[19,112490,112491,112492,112494,112495,1842],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[114,112493,112474],{},"，并输出图像数组形状，例如 ",[114,112496,112497],{},"(480, 640, 3)",[19,112499,112500],{},"如果图片里看不到方块，先检查：",[26,112502,112503,112506,112509],{},[29,112504,112505],{},"方块是否掉到相机视野外。",[29,112507,112508],{},"camera 位置是否合理。",[29,112510,112511,112512,112515],{},"是否在 ",[114,112513,112514],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,112517,105711],{"id":105710},[19,112519,112520],{},"运行 viewer:",[106,112522,112524],{"className":27309,"code":112523,"language":27311,"meta":112,"style":112},"python ch5_viewer.py\n",[114,112525,112526],{"__ignoreMap":112},[128,112527,112528,112530],{"class":130,"line":131},[128,112529,124],{"class":199},[128,112531,111658],{"class":176},[19,112533,112534],{},"运行 renderer:",[106,112536,112538],{"className":27309,"code":112537,"language":27311,"meta":112,"style":112},"python ch5_renderer.py\n",[114,112539,112540],{"__ignoreMap":112},[128,112541,112542,112544],{"class":130,"line":131},[128,112543,124],{"class":199},[128,112545,111984],{"class":176},[19,112547,112548],{},"如果在服务器上运行:",[106,112550,112552],{"className":27309,"code":112551,"language":27311,"meta":112,"style":112},"MUJOCO_GL=egl python ch5_renderer.py\n",[114,112553,112554],{"__ignoreMap":112},[128,112555,112556,112558,112560,112562,112565],{"class":130,"line":131},[128,112557,111176],{"class":138},[128,112559,270],{"class":134},[128,112561,111166],{"class":176},[128,112563,112564],{"class":199}," python",[128,112566,111984],{"class":176},[19,112568,111144],{},[106,112570,112572],{"className":27309,"code":112571,"language":27311,"meta":112,"style":112},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[114,112573,112574],{"__ignoreMap":112},[128,112575,112576,112578,112580,112582,112584],{"class":130,"line":131},[128,112577,111176],{"class":138},[128,112579,270],{"class":134},[128,112581,111170],{"class":176},[128,112583,112564],{"class":199},[128,112585,111984],{"class":176},[19,112587,112588],{},"再做几个练习：",[26,112590,112591,112598,112601,112607],{},[29,112592,112593,112594,112597],{},"把 renderer 分辨率改成 ",[114,112595,112596],{},"height=240, width=320","，观察输出 shape。",[29,112599,112600],{},"把方块颜色改成蓝色，重新保存图片。",[29,112602,112603,112604,112606],{},"把相机 ",[114,112605,107509],{}," 改远一点，观察画面中物体是否变小。",[29,112608,112609,112610,105777,112613,112616],{},"把 viewer 示例中的 ",[114,112611,112612],{},"data.time \u003C 5.0",[114,112614,112615],{},"data.time \u003C 20.0","，观察更长时间。",[14,112618,105816],{"id":105815},[72,112620,112622],{"id":112621},"viewer-窗口打不开","viewer 窗口打不开",[19,112624,112625],{},"安装:",[106,112627,112629],{"className":27309,"code":112628,"language":27311,"meta":112,"style":112},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[114,112630,112631],{"__ignoreMap":112},[128,112632,112633,112635,112637,112639,112641,112643,112645,112647,112649,112651,112653],{"class":130,"line":131},[128,112634,28064],{"class":199},[128,112636,29800],{"class":176},[128,112638,27321],{"class":176},[128,112640,29885],{"class":166},[128,112642,105869],{"class":176},[128,112644,104202],{"class":176},[128,112646,105874],{"class":176},[128,112648,104215],{"class":176},[128,112650,104221],{"class":176},[128,112652,104212],{"class":176},[128,112654,112655],{"class":176}," libXinerama\n",[72,112657,112659],{"id":112658},"glfwerror",[114,112660,112661],{},"GLFWError",[19,112663,112664],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[72,112666,112668],{"id":112667},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,112670,112671,112672,85912,112674,112676],{},"尝试 ",[114,112673,104404],{},[114,112675,104407],{},"。可能存在版本差异。",[72,112678,112679],{"id":112679},"保存图片是黑的",[19,112681,105938],{},[26,112683,112684,112687,112690,112700],{},[29,112685,112686],{},"XML 里是否有 light。",[29,112688,112689],{},"相机是否对着模型。",[29,112691,112692,112693,112696,112697,1842],{},"是否先 ",[114,112694,112695],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[114,112698,112699],{},"renderer.render()",[29,112701,112702],{},"物体是否已经掉出视野。",[72,112704,112705],{"id":112705},"远程服务器没有显示器",[19,112707,112708],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[106,112710,112711],{"className":27309,"code":112551,"language":27311,"meta":112,"style":112},[114,112712,112713],{"__ignoreMap":112},[128,112714,112715,112717,112719,112721,112723],{"class":130,"line":131},[128,112716,111176],{"class":138},[128,112718,270],{"class":134},[128,112720,111166],{"class":176},[128,112722,112564],{"class":199},[128,112724,111984],{"class":176},[19,112726,112727],{},"如果 EGL 不可用，再尝试：",[106,112729,112730],{"className":27309,"code":112571,"language":27311,"meta":112,"style":112},[114,112731,112732],{"__ignoreMap":112},[128,112733,112734,112736,112738,112740,112742],{"class":130,"line":131},[128,112735,111176],{"class":138},[128,112737,270],{"class":134},[128,112739,111170],{"class":176},[128,112741,112564],{"class":199},[128,112743,111984],{"class":176},[14,112745,105970],{"id":105969},[19,112747,112748],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[26,112750,112751,112754,112757],{},[29,112752,112753],{},"先用 viewer 看模型和控制是否正常。",[29,112755,112756],{},"再用 renderer 保存图片或构造视觉观测。",[29,112758,112759],{},"最后把状态、动作、图像、奖励组织成训练数据。",[3659,112761,112762],{},"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":112,"searchDepth":142,"depth":142,"links":112764},[112765,112766,112767,112772,112777,112778,112779,112786],{"id":104014,"depth":142,"text":104015},{"id":104137,"depth":142,"text":104138},{"id":104411,"depth":142,"text":104412,"children":112768},[112769,112770,112771],{"id":111273,"depth":156,"text":111274},{"id":111303,"depth":156,"text":111304},{"id":111338,"depth":156,"text":111339},{"id":104619,"depth":142,"text":104620,"children":112773},[112774,112775,112776],{"id":104936,"depth":156,"text":104936},{"id":112079,"depth":156,"text":112080},{"id":112257,"depth":156,"text":112258},{"id":105678,"depth":142,"text":105679},{"id":105710,"depth":142,"text":105711},{"id":105815,"depth":142,"text":105816,"children":112780},[112781,112782,112783,112784,112785],{"id":112621,"depth":156,"text":112622},{"id":112658,"depth":156,"text":112661},{"id":112667,"depth":156,"text":112668},{"id":112679,"depth":156,"text":112679},{"id":112705,"depth":156,"text":112705},{"id":105969,"depth":142,"text":105970},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":110881,"description":112},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":112793,"title":112794,"body":112795,"description":112,"extension":3687,"meta":114705,"navigation":159,"path":114706,"seo":114707,"stem":114708,"__hash__":114709},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":112796,"toc":114681},[112797,112800,112802,112805,112807,112826,112829,112835,112838,112840,112842,112866,112868,112882,112884,112925,112927,112938,112940,112943,112949,112952,112986,112989,113021,113024,113056,113060,113063,113103,113106,113112,113115,113121,113125,113128,113134,113137,113141,113144,113183,113185,113198,113201,113203,113785,113787,113799,113802,113813,113815,113818,113837,113849,113852,113873,113876,113879,113922,113925,113928,113948,113955,113957,113975,113990,113993,113999,114002,114008,114025,114032,114063,114074,114108,114119,114136,114145,114153,114158,114172,114175,114196,114202,114216,114221,114251,114261,114286,114294,114317,114320,114336,114339,114347,114353,114375,114388,114409,114418,114457,114468,114470,114473,114479,114482,114485,114491,114494,114514,114517,114519,114558,114560,114563,114571,114574,114577,114604,114607,114617,114623,114626,114632,114634,114640,114644,114647,114649,114652,114676,114679],[10,112798,112794],{"id":112799},"_6控制任务cartpole",[14,112801,104015],{"id":104014},[19,112803,112804],{},"本章搭建一个最小 Cartpole 控制任务。",[19,112806,107694],{},[26,112808,112809,112812,112814,112817,112820,112823],{},[29,112810,112811],{},"slide joint",[29,112813,109547],{},[29,112815,112816],{},"cart force actuator",[29,112818,112819],{},"状态观测",[29,112821,112822],{},"简单控制循环",[29,112824,112825],{},"reward 设计雏形",[19,112827,112828],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[106,112830,112833],{"className":112831,"code":112832,"language":111,"meta":112},[109],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[114,112834,112832],{"__ignoreMap":112},[19,112836,112837],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,112839,104138],{"id":104137},[19,112841,104141],{},[106,112843,112844],{"className":27309,"code":107751,"language":27311,"meta":112,"style":112},[114,112845,112846],{"__ignoreMap":112},[128,112847,112848,112850,112852,112854,112856,112858,112860,112862,112864],{"class":130,"line":131},[128,112849,28064],{"class":199},[128,112851,29800],{"class":176},[128,112853,27321],{"class":176},[128,112855,29885],{"class":166},[128,112857,107766],{"class":176},[128,112859,104166],{"class":176},[128,112861,105864],{"class":176},[128,112863,104182],{"class":176},[128,112865,107775],{"class":176},[19,112867,106182],{},[106,112869,112870],{"className":27309,"code":104287,"language":27311,"meta":112,"style":112},[114,112871,112872],{"__ignoreMap":112},[128,112873,112874,112876,112878,112880],{"class":130,"line":131},[128,112875,27318],{"class":199},[128,112877,27321],{"class":176},[128,112879,104298],{"class":176},[128,112881,104301],{"class":176},[19,112883,106199],{},[106,112885,112887],{"className":27309,"code":112886,"language":27311,"meta":112,"style":112},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[114,112888,112889,112906,112915],{"__ignoreMap":112},[128,112890,112891,112893,112895,112897,112900,112902,112904],{"class":130,"line":131},[128,112892,33814],{"class":199},[128,112894,32660],{"class":176},[128,112896,28602],{"class":166},[128,112898,112899],{"class":176}," mujoco-cartpole",[128,112901,104343],{"class":176},[128,112903,104346],{"class":166},[128,112905,104349],{"class":166},[128,112907,112908,112910,112912],{"class":130,"line":142},[128,112909,33814],{"class":199},[128,112911,104356],{"class":176},[128,112913,112914],{"class":176}," mujoco-cartpole\n",[128,112916,112917,112919,112921,112923],{"class":130,"line":156},[128,112918,27318],{"class":199},[128,112920,27321],{"class":176},[128,112922,104298],{"class":176},[128,112924,104301],{"class":176},[19,112926,104372],{},[26,112928,112929,112932,112935],{},[29,112930,112931],{},"本章不依赖 Gymnasium。",[29,112933,112934],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[29,112936,112937],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,112939,104412],{"id":104411},[19,112941,112942],{},"Cartpole 的模型结构:",[106,112944,112947],{"className":112945,"code":112946,"language":111,"meta":112},[109],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[114,112948,112946],{"__ignoreMap":112},[19,112950,112951],{},"小车通过 slide joint 左右移动:",[106,112953,112955],{"className":56449,"code":112954,"language":56451,"meta":112,"style":112},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[114,112956,112957],{"__ignoreMap":112},[128,112958,112959,112961,112963,112965,112967,112970,112972,112974,112977,112979,112981,112984],{"class":130,"line":131},[128,112960,4657],{"class":138},[128,112962,106319],{"class":54685},[128,112964,18442],{"class":199},[128,112966,270],{"class":138},[128,112968,112969],{"class":176},"\"cart_x\"",[128,112971,57205],{"class":199},[128,112973,270],{"class":138},[128,112975,112976],{"class":176},"\"slide\"",[128,112978,109391],{"class":199},[128,112980,270],{"class":138},[128,112982,112983],{"class":176},"\"1 0 0\"",[128,112985,104511],{"class":138},[19,112987,112988],{},"杆子通过 hinge joint 旋转:",[106,112990,112992],{"className":56449,"code":112991,"language":56451,"meta":112,"style":112},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[114,112993,112994],{"__ignoreMap":112},[128,112995,112996,112998,113000,113002,113004,113007,113009,113011,113013,113015,113017,113019],{"class":130,"line":131},[128,112997,4657],{"class":138},[128,112999,106319],{"class":54685},[128,113001,18442],{"class":199},[128,113003,270],{"class":138},[128,113005,113006],{"class":176},"\"pole_hinge\"",[128,113008,57205],{"class":199},[128,113010,270],{"class":138},[128,113012,109382],{"class":176},[128,113014,109391],{"class":199},[128,113016,270],{"class":138},[128,113018,109396],{"class":176},[128,113020,104511],{"class":138},[19,113022,113023],{},"控制力作用在小车 slide joint 上:",[106,113025,113027],{"className":56449,"code":113026,"language":56451,"meta":112,"style":112},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[114,113028,113029],{"__ignoreMap":112},[128,113030,113031,113033,113035,113037,113039,113042,113044,113046,113048,113050,113052,113054],{"class":130,"line":131},[128,113032,4657],{"class":138},[128,113034,109437],{"class":54685},[128,113036,18442],{"class":199},[128,113038,270],{"class":138},[128,113040,113041],{"class":176},"\"cart_motor\"",[128,113043,109447],{"class":199},[128,113045,270],{"class":138},[128,113047,112969],{"class":176},[128,113049,109454],{"class":199},[128,113051,270],{"class":138},[128,113053,57697],{"class":176},[128,113055,104511],{"class":138},[72,113057,113059],{"id":113058},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,113061,113062],{},"这个简化模型有两个关节：",[3891,113064,113065,113076],{},[3894,113066,113067],{},[3897,113068,113069,113071,113073],{},[3900,113070,106122],{"align":27223},[3900,113072,27224],{"align":27223},[3900,113074,113075],{"align":27223},"对应状态",[3938,113077,113078,113091],{},[3897,113079,113080,113085,113088],{},[3943,113081,113082],{"align":27223},[114,113083,113084],{},"cart_x",[3943,113086,113087],{"align":27223},"slide",[3943,113089,113090],{"align":27223},"小车 x 位置",[3897,113092,113093,113098,113100],{},[3943,113094,113095],{"align":27223},[114,113096,113097],{},"pole_hinge",[3943,113099,109203],{"align":27223},[3943,113101,113102],{"align":27223},"杆子角度",[19,113104,113105],{},"所以：",[106,113107,113110],{"className":113108,"code":113109,"language":111,"meta":112},[109],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[114,113111,113109],{"__ignoreMap":112},[19,113113,113114],{},"把它们拼起来就是观测：",[106,113116,113119],{"className":113117,"code":113118,"language":111,"meta":112},[109],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[114,113120,113118],{"__ignoreMap":112},[72,113122,113124],{"id":113123},"action-是什么","action 是什么",[19,113126,113127],{},"本章只有一个 actuator：",[106,113129,113132],{"className":113130,"code":113131,"language":111,"meta":112},[109],"data.ctrl[0] = action\n",[114,113133,113131],{"__ignoreMap":112},[19,113135,113136],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[72,113138,113140],{"id":113139},"reward-是什么","reward 是什么",[19,113142,113143],{},"奖励函数：",[106,113145,113147],{"className":122,"code":113146,"language":124,"meta":112,"style":112},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[114,113148,113149],{"__ignoreMap":112},[128,113150,113151,113153,113155,113157,113159,113161,113164,113166,113169,113171,113173,113175,113178,113180],{"class":130,"line":131},[128,113152,20533],{"class":134},[128,113154,714],{"class":166},[128,113156,253],{"class":138},[128,113158,105766],{"class":166},[128,113160,55653],{"class":134},[128,113162,113163],{"class":166}," 0.1",[128,113165,10075],{"class":134},[128,113167,113168],{"class":138}," cart_x ",[128,113170,4205],{"class":134},[128,113172,113168],{"class":138},[128,113174,4281],{"class":134},[128,113176,113177],{"class":138}," pole_angle ",[128,113179,4205],{"class":134},[128,113181,113182],{"class":138}," pole_angle)\n",[19,113184,109589],{},[26,113186,113187,113192,113195],{},[29,113188,113189,113190,1842],{},"基础奖励是 ",[114,113191,105766],{},[29,113193,113194],{},"小车离中心越远，扣分越多。",[29,113196,113197],{},"杆子角度越大，扣分越多。",[19,113199,113200],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,113202,104620],{"id":104619},[106,113204,113206],{"className":122,"code":113205,"language":124,"meta":112,"style":112},"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",[114,113207,113208,113214,113224,113228,113232,113240,113245,113249,113253,113257,113262,113266,113271,113276,113281,113285,113290,113295,113300,113304,113308,113312,113316,113320,113325,113329,113333,113337,113341,113345,113355,113362,113366,113370,113384,113398,113411,113441,113445,113449,113461,113473,113481,113485,113498,113502,113506,113515,113519,113535,113545,113558,113571,113575,113598,113616,113620,113632,113636,113640,113650,113660,113664,113680,113721,113725,113745,113761,113765,113769,113781],{"__ignoreMap":112},[128,113209,113210,113212],{"class":130,"line":131},[128,113211,135],{"class":134},[128,113213,104668],{"class":138},[128,113215,113216,113218,113220,113222],{"class":130,"line":142},[128,113217,135],{"class":134},[128,113219,34851],{"class":138},[128,113221,279],{"class":134},[128,113223,34856],{"class":138},[128,113225,113226],{"class":130,"line":156},[128,113227,160],{"emptyLinePlaceholder":159},[128,113229,113230],{"class":130,"line":163},[128,113231,160],{"emptyLinePlaceholder":159},[128,113233,113234,113236,113238],{"class":130,"line":183},[128,113235,104681],{"class":166},[128,113237,170],{"class":134},[128,113239,104686],{"class":176},[128,113241,113242],{"class":130,"line":188},[128,113243,113244],{"class":176},"\u003Cmujoco model=\"cartpole\">\n",[128,113246,113247],{"class":130,"line":193},[128,113248,104696],{"class":176},[128,113250,113251],{"class":130,"line":206},[128,113252,160],{"emptyLinePlaceholder":159},[128,113254,113255],{"class":130,"line":221},[128,113256,104705],{"class":176},[128,113258,113259],{"class":130,"line":230},[128,113260,113261],{"class":176},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[128,113263,113264],{"class":130,"line":235},[128,113265,160],{"emptyLinePlaceholder":159},[128,113267,113268],{"class":130,"line":244},[128,113269,113270],{"class":176},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[128,113272,113273],{"class":130,"line":287},[128,113274,113275],{"class":176},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[128,113277,113278],{"class":130,"line":301},[128,113279,113280],{"class":176},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[128,113282,113283],{"class":130,"line":310},[128,113284,160],{"emptyLinePlaceholder":159},[128,113286,113287],{"class":130,"line":323},[128,113288,113289],{"class":176},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[128,113291,113292],{"class":130,"line":330},[128,113293,113294],{"class":176},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[128,113296,113297],{"class":130,"line":335},[128,113298,113299],{"class":176},"        \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",[128,113301,113302],{"class":130,"line":340},[128,113303,109801],{"class":176},[128,113305,113306],{"class":130,"line":351},[128,113307,104734],{"class":176},[128,113309,113310],{"class":130,"line":384},[128,113311,104739],{"class":176},[128,113313,113314],{"class":130,"line":414},[128,113315,160],{"emptyLinePlaceholder":159},[128,113317,113318],{"class":130,"line":419},[128,113319,109818],{"class":176},[128,113321,113322],{"class":130,"line":424},[128,113323,113324],{"class":176},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[128,113326,113327],{"class":130,"line":434},[128,113328,109828],{"class":176},[128,113330,113331],{"class":130,"line":447},[128,113332,104744],{"class":176},[128,113334,113335],{"class":130,"line":459},[128,113336,99067],{"class":176},[128,113338,113339],{"class":130,"line":471},[128,113340,160],{"emptyLinePlaceholder":159},[128,113342,113343],{"class":130,"line":483},[128,113344,160],{"emptyLinePlaceholder":159},[128,113346,113347,113349,113352],{"class":130,"line":495},[128,113348,196],{"class":134},[128,113350,113351],{"class":199}," get_observation",[128,113353,113354],{"class":138},"(data: mujoco.MjData) -> np.ndarray:\n",[128,113356,113357,113359],{"class":130,"line":507},[128,113358,587],{"class":134},[128,113360,113361],{"class":138}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[128,113363,113364],{"class":130,"line":519},[128,113365,160],{"emptyLinePlaceholder":159},[128,113367,113368],{"class":130,"line":524},[128,113369,160],{"emptyLinePlaceholder":159},[128,113371,113372,113374,113377,113380,113382],{"class":130,"line":529},[128,113373,196],{"class":134},[128,113375,113376],{"class":199}," compute_reward",[128,113378,113379],{"class":138},"(obs: np.ndarray) -> ",[128,113381,3798],{"class":166},[128,113383,241],{"class":138},[128,113385,113386,113389,113391,113394,113396],{"class":130,"line":540},[128,113387,113388],{"class":138},"    cart_x ",[128,113390,270],{"class":134},[128,113392,113393],{"class":138}," obs[",[128,113395,2452],{"class":166},[128,113397,2376],{"class":138},[128,113399,113400,113403,113405,113407,113409],{"class":130,"line":555},[128,113401,113402],{"class":138},"    pole_angle ",[128,113404,270],{"class":134},[128,113406,113393],{"class":138},[128,113408,2592],{"class":166},[128,113410,2376],{"class":138},[128,113412,113413,113415,113417,113419,113421,113423,113425,113427,113429,113431,113433,113435,113437,113439],{"class":130,"line":576},[128,113414,587],{"class":134},[128,113416,714],{"class":166},[128,113418,253],{"class":138},[128,113420,105766],{"class":166},[128,113422,55653],{"class":134},[128,113424,113163],{"class":166},[128,113426,10075],{"class":134},[128,113428,113168],{"class":138},[128,113430,4205],{"class":134},[128,113432,113168],{"class":138},[128,113434,4281],{"class":134},[128,113436,113177],{"class":138},[128,113438,4205],{"class":134},[128,113440,113182],{"class":138},[128,113442,113443],{"class":130,"line":584},[128,113444,160],{"emptyLinePlaceholder":159},[128,113446,113447],{"class":130,"line":593},[128,113448,160],{"emptyLinePlaceholder":159},[128,113450,113451,113453,113455,113457,113459],{"class":130,"line":598},[128,113452,196],{"class":134},[128,113454,1575],{"class":199},[128,113456,104765],{"class":138},[128,113458,99055],{"class":166},[128,113460,241],{"class":138},[128,113462,113463,113465,113467,113469,113471],{"class":130,"line":603},[128,113464,104774],{"class":138},[128,113466,270],{"class":134},[128,113468,104779],{"class":138},[128,113470,104681],{"class":166},[128,113472,180],{"class":138},[128,113474,113475,113477,113479],{"class":130,"line":614},[128,113476,104788],{"class":138},[128,113478,270],{"class":134},[128,113480,104793],{"class":138},[128,113482,113483],{"class":130,"line":625},[128,113484,160],{"emptyLinePlaceholder":159},[128,113486,113487,113489,113491,113493,113495],{"class":130,"line":633},[128,113488,108432],{"class":138},[128,113490,2592],{"class":166},[128,113492,567],{"class":138},[128,113494,270],{"class":134},[128,113496,113497],{"class":166}," 0.1\n",[128,113499,113500],{"class":130,"line":649},[128,113501,108445],{"class":138},[128,113503,113504],{"class":130,"line":660},[128,113505,160],{"emptyLinePlaceholder":159},[128,113507,113508,113511,113513],{"class":130,"line":673},[128,113509,113510],{"class":138},"    total_reward ",[128,113512,270],{"class":134},[128,113514,108124],{"class":166},[128,113516,113517],{"class":130,"line":678},[128,113518,160],{"emptyLinePlaceholder":159},[128,113520,113521,113523,113525,113527,113529,113531,113533],{"class":130,"line":683},[128,113522,543],{"class":134},[128,113524,35085],{"class":138},[128,113526,549],{"class":134},[128,113528,35910],{"class":166},[128,113530,253],{"class":138},[128,113532,9967],{"class":166},[128,113534,34264],{"class":138},[128,113536,113537,113540,113542],{"class":130,"line":693},[128,113538,113539],{"class":138},"        obs ",[128,113541,270],{"class":134},[128,113543,113544],{"class":138}," get_observation(data)\n",[128,113546,113547,113550,113552,113554,113556],{"class":130,"line":702},[128,113548,113549],{"class":138},"        pole_angle ",[128,113551,270],{"class":134},[128,113553,113393],{"class":138},[128,113555,2592],{"class":166},[128,113557,2376],{"class":138},[128,113559,113560,113563,113565,113567,113569],{"class":130,"line":709},[128,113561,113562],{"class":138},"        pole_angular_velocity ",[128,113564,270],{"class":134},[128,113566,113393],{"class":138},[128,113568,3827],{"class":166},[128,113570,2376],{"class":138},[128,113572,113573],{"class":130,"line":723},[128,113574,160],{"emptyLinePlaceholder":159},[128,113576,113577,113580,113582,113585,113587,113589,113591,113593,113595],{"class":130,"line":732},[128,113578,113579],{"class":138},"        action ",[128,113581,270],{"class":134},[128,113583,113584],{"class":166}," 2.0",[128,113586,10075],{"class":134},[128,113588,113177],{"class":138},[128,113590,2457],{"class":134},[128,113592,65246],{"class":166},[128,113594,10075],{"class":134},[128,113596,113597],{"class":138}," pole_angular_velocity\n",[128,113599,113600,113602,113604,113606,113608,113610,113612,113614],{"class":130,"line":744},[128,113601,113579],{"class":138},[128,113603,270],{"class":134},[128,113605,110809],{"class":138},[128,113607,4281],{"class":134},[128,113609,105766],{"class":166},[128,113611,258],{"class":138},[128,113613,105766],{"class":166},[128,113615,180],{"class":138},[128,113617,113618],{"class":130,"line":749},[128,113619,160],{"emptyLinePlaceholder":159},[128,113621,113622,113624,113626,113628,113630],{"class":130,"line":754},[128,113623,109980],{"class":138},[128,113625,2452],{"class":166},[128,113627,567],{"class":138},[128,113629,270],{"class":134},[128,113631,110832],{"class":138},[128,113633,113634],{"class":130,"line":764},[128,113635,104883],{"class":138},[128,113637,113638],{"class":130,"line":782},[128,113639,160],{"emptyLinePlaceholder":159},[128,113641,113642,113645,113647],{"class":130,"line":787},[128,113643,113644],{"class":138},"        reward ",[128,113646,270],{"class":134},[128,113648,113649],{"class":138}," compute_reward(get_observation(data))\n",[128,113651,113652,113655,113657],{"class":130,"line":795},[128,113653,113654],{"class":138},"        total_reward ",[128,113656,13023],{"class":134},[128,113658,113659],{"class":138}," reward\n",[128,113661,113662],{"class":130,"line":807},[128,113663,160],{"emptyLinePlaceholder":159},[128,113665,113666,113668,113670,113672,113674,113676,113678],{"class":130,"line":813},[128,113667,558],{"class":134},[128,113669,35085],{"class":138},[128,113671,4078],{"class":134},[128,113673,9312],{"class":166},[128,113675,1806],{"class":134},[128,113677,7659],{"class":166},[128,113679,241],{"class":138},[128,113681,113682,113684,113686,113689,113692,113695,113698,113700,113703,113706,113708,113710,113712,113714,113717,113719],{"class":130,"line":818},[128,113683,663],{"class":166},[128,113685,253],{"class":138},[128,113687,113688],{"class":176},"\"step:\"",[128,113690,113691],{"class":138},", step, ",[128,113693,113694],{"class":176},"\"obs:\"",[128,113696,113697],{"class":138},", np.round(obs, ",[128,113699,3827],{"class":166},[128,113701,113702],{"class":138},"), ",[128,113704,113705],{"class":176},"\"action:\"",[128,113707,258],{"class":138},[128,113709,35485],{"class":166},[128,113711,253],{"class":138},[128,113713,3798],{"class":166},[128,113715,113716],{"class":138},"(action), ",[128,113718,3827],{"class":166},[128,113720,3034],{"class":138},[128,113722,113723],{"class":130,"line":835},[128,113724,160],{"emptyLinePlaceholder":159},[128,113726,113727,113729,113731,113734,113736,113738,113741,113743],{"class":130,"line":851},[128,113728,437],{"class":166},[128,113730,253],{"class":138},[128,113732,113733],{"class":176},"\"total_reward:\"",[128,113735,258],{"class":138},[128,113737,35485],{"class":166},[128,113739,113740],{"class":138},"(total_reward, ",[128,113742,3827],{"class":166},[128,113744,3034],{"class":138},[128,113746,113747,113749,113751,113754,113757,113759],{"class":130,"line":867},[128,113748,437],{"class":166},[128,113750,253],{"class":138},[128,113752,113753],{"class":176},"\"final obs:\"",[128,113755,113756],{"class":138},", np.round(get_observation(data), ",[128,113758,3827],{"class":166},[128,113760,3034],{"class":138},[128,113762,113763],{"class":130,"line":872},[128,113764,160],{"emptyLinePlaceholder":159},[128,113766,113767],{"class":130,"line":878},[128,113768,160],{"emptyLinePlaceholder":159},[128,113770,113771,113773,113775,113777,113779],{"class":130,"line":887},[128,113772,1800],{"class":134},[128,113774,1803],{"class":166},[128,113776,1806],{"class":134},[128,113778,1809],{"class":176},[128,113780,241],{"class":138},[128,113782,113783],{"class":130,"line":896},[128,113784,1817],{"class":138},[19,113786,106933],{},[106,113788,113790],{"className":27309,"code":113789,"language":27311,"meta":112,"style":112},"touch ch6_cartpole.py\n",[114,113791,113792],{"__ignoreMap":112},[128,113793,113794,113796],{"class":130,"line":131},[128,113795,104650],{"class":199},[128,113797,113798],{"class":176}," ch6_cartpole.py\n",[19,113800,113801],{},"运行：",[106,113803,113805],{"className":27309,"code":113804,"language":27311,"meta":112,"style":112},"python ch6_cartpole.py\n",[114,113806,113807],{"__ignoreMap":112},[128,113808,113809,113811],{"class":130,"line":131},[128,113810,124],{"class":199},[128,113812,113798],{"class":176},[72,113814,104936],{"id":104936},[19,113816,113817],{},"构造观测：",[106,113819,113821],{"className":122,"code":113820,"language":124,"meta":112,"style":112},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[114,113822,113823,113831],{"__ignoreMap":112},[128,113824,113825,113827,113829],{"class":130,"line":131},[128,113826,196],{"class":134},[128,113828,113351],{"class":199},[128,113830,113354],{"class":138},[128,113832,113833,113835],{"class":130,"line":142},[128,113834,587],{"class":134},[128,113836,113361],{"class":138},[19,113838,113839,113842,113843,113845,113846,113848],{},[114,113840,113841],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[114,113844,107393],{}," 2 维，",[114,113847,107723],{}," 2 维，所以 obs 是 4 维。",[19,113850,113851],{},"设置初始角度：",[106,113853,113855],{"className":122,"code":113854,"language":124,"meta":112,"style":112},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[114,113856,113857,113869],{"__ignoreMap":112},[128,113858,113859,113861,113863,113865,113867],{"class":130,"line":131},[128,113860,108062],{"class":138},[128,113862,2592],{"class":166},[128,113864,567],{"class":138},[128,113866,270],{"class":134},[128,113868,113497],{"class":166},[128,113870,113871],{"class":130,"line":142},[128,113872,107906],{"class":138},[19,113874,113875],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,113877,113878],{},"简单反馈控制：",[106,113880,113882],{"className":122,"code":113881,"language":124,"meta":112,"style":112},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[114,113883,113884,113904],{"__ignoreMap":112},[128,113885,113886,113888,113890,113892,113894,113896,113898,113900,113902],{"class":130,"line":131},[128,113887,110804],{"class":138},[128,113889,270],{"class":134},[128,113891,113584],{"class":166},[128,113893,10075],{"class":134},[128,113895,113177],{"class":138},[128,113897,2457],{"class":134},[128,113899,65246],{"class":166},[128,113901,10075],{"class":134},[128,113903,113597],{"class":138},[128,113905,113906,113908,113910,113912,113914,113916,113918,113920],{"class":130,"line":142},[128,113907,110804],{"class":138},[128,113909,270],{"class":134},[128,113911,110809],{"class":138},[128,113913,4281],{"class":134},[128,113915,105766],{"class":166},[128,113917,258],{"class":138},[128,113919,105766],{"class":166},[128,113921,180],{"class":138},[19,113923,113924],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,113926,113927],{},"限制动作：",[106,113929,113931],{"className":122,"code":113930,"language":124,"meta":112,"style":112},"np.clip(action, -1.0, 1.0)\n",[114,113932,113933],{"__ignoreMap":112},[128,113934,113935,113938,113940,113942,113944,113946],{"class":130,"line":131},[128,113936,113937],{"class":138},"np.clip(action, ",[128,113939,4281],{"class":134},[128,113941,105766],{"class":166},[128,113943,258],{"class":138},[128,113945,105766],{"class":166},[128,113947,180],{"class":138},[19,113949,113950,113951,113954],{},"因为 XML 里 ",[114,113952,113953],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[72,113956,105071],{"id":105071},[106,113958,113959],{"className":122,"code":113820,"language":124,"meta":112,"style":112},[114,113960,113961,113969],{"__ignoreMap":112},[128,113962,113963,113965,113967],{"class":130,"line":131},[128,113964,196],{"class":134},[128,113966,113351],{"class":199},[128,113968,113354],{"class":138},[128,113970,113971,113973],{"class":130,"line":142},[128,113972,587],{"class":134},[128,113974,113361],{"class":138},[19,113976,113977,113978,113981,113982,113985,113986,113989],{},"这段定义了一个函数，用来获取当前观测。",[114,113979,113980],{},"data.qpos.copy()"," 是位置数组副本，",[114,113983,113984],{},"data.qvel.copy()"," 是速度数组副本。",[114,113987,113988],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,113991,113992],{},"在本章模型里：",[106,113994,113997],{"className":113995,"code":113996,"language":111,"meta":112},[109],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[114,113998,113996],{"__ignoreMap":112},[19,114000,114001],{},"所以返回的 obs 是：",[106,114003,114006],{"className":114004,"code":114005,"language":111,"meta":112},[109],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[114,114007,114005],{"__ignoreMap":112},[106,114009,114011],{"className":122,"code":114010,"language":124,"meta":112,"style":112},"def compute_reward(obs: np.ndarray) -> float:\n",[114,114012,114013],{"__ignoreMap":112},[128,114014,114015,114017,114019,114021,114023],{"class":130,"line":131},[128,114016,196],{"class":134},[128,114018,113376],{"class":199},[128,114020,113379],{"class":138},[128,114022,3798],{"class":166},[128,114024,241],{"class":138},[19,114026,114027,114028,114031],{},"这行定义奖励函数。输入是观测 ",[114,114029,114030],{},"obs","，输出是一个浮点数奖励。",[106,114033,114035],{"className":122,"code":114034,"language":124,"meta":112,"style":112},"cart_x = obs[0]\npole_angle = obs[1]\n",[114,114036,114037,114050],{"__ignoreMap":112},[128,114038,114039,114042,114044,114046,114048],{"class":130,"line":131},[128,114040,114041],{"class":138},"cart_x ",[128,114043,270],{"class":134},[128,114045,113393],{"class":138},[128,114047,2452],{"class":166},[128,114049,2376],{"class":138},[128,114051,114052,114055,114057,114059,114061],{"class":130,"line":142},[128,114053,114054],{"class":138},"pole_angle ",[128,114056,270],{"class":134},[128,114058,113393],{"class":138},[128,114060,2592],{"class":166},[128,114062,2376],{"class":138},[19,114064,114065,114066,114069,114070,114073],{},"数组索引从 0 开始。",[114,114067,114068],{},"obs[0]"," 是第一个元素，也就是小车位置。",[114,114071,114072],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[106,114075,114076],{"className":122,"code":113146,"language":124,"meta":112,"style":112},[114,114077,114078],{"__ignoreMap":112},[128,114079,114080,114082,114084,114086,114088,114090,114092,114094,114096,114098,114100,114102,114104,114106],{"class":130,"line":131},[128,114081,20533],{"class":134},[128,114083,714],{"class":166},[128,114085,253],{"class":138},[128,114087,105766],{"class":166},[128,114089,55653],{"class":134},[128,114091,113163],{"class":166},[128,114093,10075],{"class":134},[128,114095,113168],{"class":138},[128,114097,4205],{"class":134},[128,114099,113168],{"class":138},[128,114101,4281],{"class":134},[128,114103,113177],{"class":138},[128,114105,4205],{"class":134},[128,114107,113182],{"class":138},[19,114109,114110,114111,114114,114115,114118],{},"这行计算奖励。",[114,114112,114113],{},"cart_x * cart_x"," 是小车位置的平方，",[114,114116,114117],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[106,114120,114122],{"className":122,"code":114121,"language":124,"meta":112,"style":112},"data.qpos[1] = 0.1\n",[114,114123,114124],{"__ignoreMap":112},[128,114125,114126,114128,114130,114132,114134],{"class":130,"line":131},[128,114127,108062],{"class":138},[128,114129,2592],{"class":166},[128,114131,567],{"class":138},[128,114133,270],{"class":134},[128,114135,113497],{"class":166},[19,114137,114138,114139,114141,114142,114144],{},"手动设置杆子的初始角度。因为 ",[114,114140,108819],{}," 是小车位置，",[114,114143,108822],{}," 是杆子角度，所以这里改的是杆子。",[106,114146,114147],{"className":122,"code":107906,"language":124,"meta":112,"style":112},[114,114148,114149],{"__ignoreMap":112},[128,114150,114151],{"class":130,"line":131},[128,114152,107906],{"class":138},[19,114154,108865,114155,114157],{},[114,114156,107393],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[106,114159,114161],{"className":122,"code":114160,"language":124,"meta":112,"style":112},"total_reward = 0.0\n",[114,114162,114163],{"__ignoreMap":112},[128,114164,114165,114168,114170],{"class":130,"line":131},[128,114166,114167],{"class":138},"total_reward ",[128,114169,270],{"class":134},[128,114171,108124],{"class":166},[19,114173,114174],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[106,114176,114178],{"className":122,"code":114177,"language":124,"meta":112,"style":112},"for step in range(1000):\n",[114,114179,114180],{"__ignoreMap":112},[128,114181,114182,114184,114186,114188,114190,114192,114194],{"class":130,"line":131},[128,114183,2404],{"class":134},[128,114185,35085],{"class":138},[128,114187,549],{"class":134},[128,114189,35910],{"class":166},[128,114191,253],{"class":138},[128,114193,9967],{"class":166},[128,114195,34264],{"class":138},[19,114197,114198,114199,114201],{},"循环 1000 步。",[114,114200,110497],{}," 是当前步数，从 0 到 999。",[106,114203,114205],{"className":122,"code":114204,"language":124,"meta":112,"style":112},"obs = get_observation(data)\n",[114,114206,114207],{"__ignoreMap":112},[128,114208,114209,114212,114214],{"class":130,"line":131},[128,114210,114211],{"class":138},"obs ",[128,114213,270],{"class":134},[128,114215,113544],{"class":138},[19,114217,114218,114219,1842],{},"读取当前状态，保存到 ",[114,114220,114030],{},[106,114222,114224],{"className":122,"code":114223,"language":124,"meta":112,"style":112},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[114,114225,114226,114238],{"__ignoreMap":112},[128,114227,114228,114230,114232,114234,114236],{"class":130,"line":131},[128,114229,114054],{"class":138},[128,114231,270],{"class":134},[128,114233,113393],{"class":138},[128,114235,2592],{"class":166},[128,114237,2376],{"class":138},[128,114239,114240,114243,114245,114247,114249],{"class":130,"line":142},[128,114241,114242],{"class":138},"pole_angular_velocity ",[128,114244,270],{"class":134},[128,114246,113393],{"class":138},[128,114248,3827],{"class":166},[128,114250,2376],{"class":138},[19,114252,114253,114254,114257,114258,1842],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[114,114255,114256],{},"obs[3]","？因为 obs 的顺序是 ",[114,114259,114260],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[106,114262,114264],{"className":122,"code":114263,"language":124,"meta":112,"style":112},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[114,114265,114266],{"__ignoreMap":112},[128,114267,114268,114270,114272,114274,114276,114278,114280,114282,114284],{"class":130,"line":131},[128,114269,110804],{"class":138},[128,114271,270],{"class":134},[128,114273,113584],{"class":166},[128,114275,10075],{"class":134},[128,114277,113177],{"class":138},[128,114279,2457],{"class":134},[128,114281,65246],{"class":166},[128,114283,10075],{"class":134},[128,114285,113597],{"class":138},[19,114287,114288,114289,3330,114291,114293],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[114,114290,108623],{},[114,114292,38721],{}," 是人为设置的系数，不是固定公式。",[106,114295,114297],{"className":122,"code":114296,"language":124,"meta":112,"style":112},"action = np.clip(action, -1.0, 1.0)\n",[114,114298,114299],{"__ignoreMap":112},[128,114300,114301,114303,114305,114307,114309,114311,114313,114315],{"class":130,"line":131},[128,114302,110804],{"class":138},[128,114304,270],{"class":134},[128,114306,110809],{"class":138},[128,114308,4281],{"class":134},[128,114310,105766],{"class":166},[128,114312,258],{"class":138},[128,114314,105766],{"class":166},[128,114316,180],{"class":138},[19,114318,114319],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[106,114321,114322],{"className":122,"code":113131,"language":124,"meta":112,"style":112},[114,114323,114324],{"__ignoreMap":112},[128,114325,114326,114328,114330,114332,114334],{"class":130,"line":131},[128,114327,109234],{"class":138},[128,114329,2452],{"class":166},[128,114331,567],{"class":138},[128,114333,270],{"class":134},[128,114335,110832],{"class":138},[19,114337,114338],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[106,114340,114341],{"className":122,"code":107868,"language":124,"meta":112,"style":112},[114,114342,114343],{"__ignoreMap":112},[128,114344,114345],{"class":130,"line":131},[128,114346,107868],{"class":138},[19,114348,114349,114350,114352],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[114,114351,109489],{}," 计算小车和杆子的下一刻状态。",[106,114354,114356],{"className":122,"code":114355,"language":124,"meta":112,"style":112},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[114,114357,114358,114367],{"__ignoreMap":112},[128,114359,114360,114363,114365],{"class":130,"line":131},[128,114361,114362],{"class":138},"reward ",[128,114364,270],{"class":134},[128,114366,113649],{"class":138},[128,114368,114369,114371,114373],{"class":130,"line":142},[128,114370,114167],{"class":138},[128,114372,13023],{"class":134},[128,114374,113659],{"class":138},[19,114376,114377,114378,114380,114381,114384,114385,1842],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[114,114379,13023],{}," 是简写，",[114,114382,114383],{},"total_reward += reward"," 等价于 ",[114,114386,114387],{},"total_reward = total_reward + reward",[106,114389,114391],{"className":122,"code":114390,"language":124,"meta":112,"style":112},"if step % 100 == 0:\n",[114,114392,114393],{"__ignoreMap":112},[128,114394,114395,114397,114399,114401,114403,114405,114407],{"class":130,"line":131},[128,114396,1800],{"class":134},[128,114398,35085],{"class":138},[128,114400,4078],{"class":134},[128,114402,9312],{"class":166},[128,114404,1806],{"class":134},[128,114406,7659],{"class":166},[128,114408,241],{"class":138},[19,114410,114411,114413,114414,114417],{},[114,114412,4078],{}," 是取余数。",[114,114415,114416],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[106,114419,114421],{"className":122,"code":114420,"language":124,"meta":112,"style":112},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[114,114422,114423],{"__ignoreMap":112},[128,114424,114425,114427,114429,114431,114433,114435,114437,114439,114441,114443,114445,114447,114449,114451,114453,114455],{"class":130,"line":131},[128,114426,2469],{"class":166},[128,114428,253],{"class":138},[128,114430,113688],{"class":176},[128,114432,113691],{"class":138},[128,114434,113694],{"class":176},[128,114436,113697],{"class":138},[128,114438,3827],{"class":166},[128,114440,113702],{"class":138},[128,114442,113705],{"class":176},[128,114444,258],{"class":138},[128,114446,35485],{"class":166},[128,114448,253],{"class":138},[128,114450,3798],{"class":166},[128,114452,113716],{"class":138},[128,114454,3827],{"class":166},[128,114456,3034],{"class":138},[19,114458,114459,114460,114463,114464,114467],{},"打印当前步数、观测和动作。",[114,114461,114462],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[114,114465,114466],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,114469,105679],{"id":105678},[19,114471,114472],{},"观测向量:",[106,114474,114477],{"className":114475,"code":114476,"language":111,"meta":112},[109],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[114,114478,114476],{"__ignoreMap":112},[19,114480,114481],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,114483,114484],{},"每隔 100 步会打印一次：",[106,114486,114489],{"className":114487,"code":114488,"language":111,"meta":112},[109],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[114,114490,114488],{"__ignoreMap":112},[19,114492,114493],{},"重点观察：",[26,114495,114496,114502,114507],{},[29,114497,114498,114501],{},[114,114499,114500],{},"pole_angle"," 是否越来越大。",[29,114503,114504,114506],{},[114,114505,113084],{}," 是否跑得太远。",[29,114508,114509,114510,85912,114512,1842],{},"action 是否经常被 clip 到 ",[114,114511,107278],{},[114,114513,2592],{},[19,114515,114516],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,114518,105711],{"id":105710},[26,114520,114521,114527,114530,114536,114546,114552,114555],{},[29,114522,114523,114524,1842],{},"把初始角度改为 ",[114,114525,114526],{},"data.qpos[1] = 0.3",[29,114528,114529],{},"重新运行，观察控制是否变差。",[29,114531,114532,114533,114535],{},"把 actuator ",[114,114534,110430],{}," 改小。",[29,114537,114538,114539,114542,114543,1842],{},"打印 ",[114,114540,114541],{},"model.nq, model.nv, model.nu","，应为 ",[114,114544,114545],{},"2 2 1",[29,114547,114548,114549,114551],{},"把 reward 里的 ",[114,114550,114117],{}," 系数改大，观察总奖励变化。",[29,114553,114554],{},"把控制器改成反号，观察杆子是否更容易倒。",[29,114556,114557],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,114559,105816],{"id":105815},[72,114561,114562],{"id":114562},"杆子方向和预期不一致",[19,114564,105759,114565,114567,114568,114570],{},[114,114566,109602],{}," 和 capsule 的 ",[114,114569,106539],{},"，必要时用 viewer 可视化确认。",[72,114572,114573],{"id":114573},"控制器越控越倒",[19,114575,114576],{},"说明反馈符号可能反了，尝试:",[106,114578,114580],{"className":122,"code":114579,"language":124,"meta":112,"style":112},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[114,114581,114582],{"__ignoreMap":112},[128,114583,114584,114586,114588,114590,114592,114594,114596,114598,114600,114602],{"class":130,"line":131},[128,114585,110804],{"class":138},[128,114587,270],{"class":134},[128,114589,55653],{"class":134},[128,114591,108623],{"class":166},[128,114593,10075],{"class":134},[128,114595,113177],{"class":138},[128,114597,4281],{"class":134},[128,114599,65246],{"class":166},[128,114601,10075],{"class":134},[128,114603,113597],{"class":138},[72,114605,114606],{"id":114606},"小车飞走",[19,114608,114609,114610,114612,114613,114616],{},"降低 ",[114,114611,110430],{}," 或缩小 ",[114,114614,114615],{},"action"," 的 clip 范围。",[72,114618,114620,114622],{"id":114619},"obs3-为什么是杆子角速度",[114,114621,114256],{}," 为什么是杆子角速度",[19,114624,114625],{},"因为这个模型里：",[106,114627,114630],{"className":114628,"code":114629,"language":111,"meta":112},[109],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[114,114631,114629],{"__ignoreMap":112},[19,114633,113105],{},[106,114635,114638],{"className":114636,"code":114637,"language":111,"meta":112},[109],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[114,114639,114637],{"__ignoreMap":112},[72,114641,114643],{"id":114642},"reward-变成负数是否错误","reward 变成负数是否错误",[19,114645,114646],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,114648,105970],{"id":105969},[19,114650,114651],{},"一个控制任务通常包含：",[26,114653,114654,114657,114665,114670,114673],{},[29,114655,114656],{},"模型：Cartpole 的 body、joint、actuator。",[29,114658,114659,114660,3550,114662,114664],{},"观测：从 ",[114,114661,107393],{},[114,114663,107723],{}," 里取状态。",[29,114666,114667,114668,1842],{},"动作：写入 ",[114,114669,104443],{},[29,114671,114672],{},"奖励：根据任务目标打分。",[29,114674,114675],{},"循环：obs -> action -> step -> reward。",[19,114677,114678],{},"这就是后面 Gymnasium 环境的基本骨架。",[3659,114680,107649],{},{"title":112,"searchDepth":142,"depth":142,"links":114682},[114683,114684,114685,114690,114694,114695,114696,114704],{"id":104014,"depth":142,"text":104015},{"id":104137,"depth":142,"text":104138},{"id":104411,"depth":142,"text":104412,"children":114686},[114687,114688,114689],{"id":113058,"depth":156,"text":113059},{"id":113123,"depth":156,"text":113124},{"id":113139,"depth":156,"text":113140},{"id":104619,"depth":142,"text":104620,"children":114691},[114692,114693],{"id":104936,"depth":156,"text":104936},{"id":105071,"depth":156,"text":105071},{"id":105678,"depth":142,"text":105679},{"id":105710,"depth":142,"text":105711},{"id":105815,"depth":142,"text":105816,"children":114697},[114698,114699,114700,114701,114703],{"id":114562,"depth":156,"text":114562},{"id":114573,"depth":156,"text":114573},{"id":114606,"depth":156,"text":114606},{"id":114619,"depth":156,"text":114702},"obs[3] 为什么是杆子角速度",{"id":114642,"depth":156,"text":114643},{"id":105969,"depth":142,"text":105970},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":112794,"description":112},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":114711,"title":114712,"body":114713,"description":112,"extension":3687,"meta":116727,"navigation":159,"path":116728,"seo":116729,"stem":116730,"__hash__":116731},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":114714,"toc":116703},[114715,114718,114720,114723,114725,114742,114745,114748,114754,114757,114759,114761,114785,114787,114801,114803,114844,114846,114864,114866,114869,114875,114878,114906,114910,114916,114941,114944,114975,114982,114985,114988,114994,114997,115003,115006,115012,115016,115019,115044,115047,115049,115809,115811,115823,115825,115836,115838,115841,115858,115861,115863,115874,115877,115879,115925,115928,115941,115944,116026,116029,116031,116047,116057,116070,116073,116112,116122,116133,116143,116156,116159,116188,116191,116201,116204,116210,116227,116238,116240,116246,116263,116274,116295,116298,116310,116313,116334,116337,116345,116353,116370,116373,116442,116449,116457,116460,116473,116480,116482,116485,116491,116494,116497,116503,116509,116511,116551,116553,116559,116568,116571,116573,116593,116596,116599,116605,116609,116611,116638,116641,116644,116671,116677,116680,116683,116685,116688,116691,116697,116700],[10,114716,114712],{"id":114717},"_7控制任务reacher-机械臂到达目标",[14,114719,104015],{"id":104014},[19,114721,114722],{},"本章搭建一个二维两关节 reacher 任务。",[19,114724,107694],{},[26,114726,114727,114730,114733,114736,114739],{},[29,114728,114729],{},"两个 hinge joint",[29,114731,114732],{},"两个 motor actuator",[29,114734,114735],{},"site 作为末端点和目标点",[29,114737,114738],{},"根据末端和目标距离设计 reward",[29,114740,114741],{},"构造机械臂任务的基本形式",[19,114743,114744],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,114746,114747],{},"Reacher 任务可以理解为：",[106,114749,114752],{"className":114750,"code":114751,"language":111,"meta":112},[109],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[114,114753,114751],{"__ignoreMap":112},[19,114755,114756],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,114758,104138],{"id":104137},[19,114760,104141],{},[106,114762,114763],{"className":27309,"code":107751,"language":27311,"meta":112,"style":112},[114,114764,114765],{"__ignoreMap":112},[128,114766,114767,114769,114771,114773,114775,114777,114779,114781,114783],{"class":130,"line":131},[128,114768,28064],{"class":199},[128,114770,29800],{"class":176},[128,114772,27321],{"class":176},[128,114774,29885],{"class":166},[128,114776,107766],{"class":176},[128,114778,104166],{"class":176},[128,114780,105864],{"class":176},[128,114782,104182],{"class":176},[128,114784,107775],{"class":176},[19,114786,106182],{},[106,114788,114789],{"className":27309,"code":104287,"language":27311,"meta":112,"style":112},[114,114790,114791],{"__ignoreMap":112},[128,114792,114793,114795,114797,114799],{"class":130,"line":131},[128,114794,27318],{"class":199},[128,114796,27321],{"class":176},[128,114798,104298],{"class":176},[128,114800,104301],{"class":176},[19,114802,106199],{},[106,114804,114806],{"className":27309,"code":114805,"language":27311,"meta":112,"style":112},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[114,114807,114808,114825,114834],{"__ignoreMap":112},[128,114809,114810,114812,114814,114816,114819,114821,114823],{"class":130,"line":131},[128,114811,33814],{"class":199},[128,114813,32660],{"class":176},[128,114815,28602],{"class":166},[128,114817,114818],{"class":176}," mujoco-reacher",[128,114820,104343],{"class":176},[128,114822,104346],{"class":166},[128,114824,104349],{"class":166},[128,114826,114827,114829,114831],{"class":130,"line":142},[128,114828,33814],{"class":199},[128,114830,104356],{"class":176},[128,114832,114833],{"class":176}," mujoco-reacher\n",[128,114835,114836,114838,114840,114842],{"class":130,"line":156},[128,114837,27318],{"class":199},[128,114839,27321],{"class":176},[128,114841,104298],{"class":176},[128,114843,104301],{"class":176},[19,114845,104372],{},[26,114847,114848,114851,114854],{},[29,114849,114850],{},"本章使用低维状态，不使用图像输入。",[29,114852,114853],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[29,114855,114856,114857,3550,114859,3550,114861,114863],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[114,114858,107393],{},[114,114860,107723],{},[114,114862,107043],{}," 的方法一致。",[14,114865,104412],{"id":104411},[19,114867,114868],{},"Reacher 任务核心:",[106,114870,114873],{"className":114871,"code":114872,"language":111,"meta":112},[109],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[114,114874,114872],{"__ignoreMap":112},[19,114876,114877],{},"读取 site 世界坐标:",[106,114879,114881],{"className":122,"code":114880,"language":124,"meta":112,"style":112},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[114,114882,114883,114896],{"__ignoreMap":112},[128,114884,114885,114887,114889,114891,114894],{"class":130,"line":131},[128,114886,106997],{"class":138},[128,114888,270],{"class":134},[128,114890,106768],{"class":138},[128,114892,114893],{"class":176},"\"tip\"",[128,114895,180],{"class":138},[128,114897,114898,114901,114903],{"class":130,"line":142},[128,114899,114900],{"class":138},"tip_pos ",[128,114902,270],{"class":134},[128,114904,114905],{"class":138}," data.site_xpos[site_id]\n",[72,114907,114909],{"id":114908},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,114911,114912,114913,114915],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[114,114914,107393],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[106,114917,114919],{"className":122,"code":114918,"language":124,"meta":112,"style":112},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[114,114920,114921,114931],{"__ignoreMap":112},[128,114922,114923,114926,114928],{"class":130,"line":131},[128,114924,114925],{"class":138},"tip ",[128,114927,270],{"class":134},[128,114929,114930],{"class":138}," data.site_xpos[tip_site_id]\n",[128,114932,114933,114936,114938],{"class":130,"line":142},[128,114934,114935],{"class":138},"target ",[128,114937,270],{"class":134},[128,114939,114940],{"class":138}," data.site_xpos[target_site_id]\n",[19,114942,114943],{},"这样 reward 就很容易写：",[106,114945,114947],{"className":122,"code":114946,"language":124,"meta":112,"style":112},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[114,114948,114949,114964],{"__ignoreMap":112},[128,114950,114951,114954,114956,114959,114961],{"class":130,"line":131},[128,114952,114953],{"class":138},"dist ",[128,114955,270],{"class":134},[128,114957,114958],{"class":138}," np.linalg.norm(tip ",[128,114960,4281],{"class":134},[128,114962,114963],{"class":138}," target)\n",[128,114965,114966,114968,114970,114972],{"class":130,"line":142},[128,114967,114362],{"class":138},[128,114969,270],{"class":134},[128,114971,55653],{"class":134},[128,114973,114974],{"class":138},"dist\n",[19,114976,114977,114978,114981],{},"距离越小，",[114,114979,114980],{},"-dist"," 越接近 0，奖励越高。",[72,114983,114984],{"id":114984},"两关节机械臂的状态",[19,114986,114987],{},"这个模型有两个 hinge joint：",[106,114989,114992],{"className":114990,"code":114991,"language":111,"meta":112},[109],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[114,114993,114991],{"__ignoreMap":112},[19,114995,114996],{},"再加上末端和目标位置：",[106,114998,115001],{"className":114999,"code":115000,"language":111,"meta":112},[109],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[114,115002,115000],{"__ignoreMap":112},[19,115004,115005],{},"总维度：",[106,115007,115010],{"className":115008,"code":115009,"language":111,"meta":112},[109],"2 + 2 + 3 + 3 = 10\n",[114,115011,115009],{"__ignoreMap":112},[72,115013,115015],{"id":115014},"为什么-gravity-是-0","为什么 gravity 是 0",[19,115017,115018],{},"本章把重力设为：",[106,115020,115022],{"className":56449,"code":115021,"language":56451,"meta":112,"style":112},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[114,115023,115024],{"__ignoreMap":112},[128,115025,115026,115028,115030,115032,115034,115036,115038,115040,115042],{"class":130,"line":131},[128,115027,4657],{"class":138},[128,115029,72543],{"class":54685},[128,115031,104561],{"class":199},[128,115033,270],{"class":138},[128,115035,104566],{"class":176},[128,115037,104569],{"class":199},[128,115039,270],{"class":138},[128,115041,107134],{"class":176},[128,115043,104511],{"class":138},[19,115045,115046],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,115048,104620],{"id":104619},[106,115050,115052],{"className":122,"code":115051,"language":124,"meta":112,"style":112},"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",[114,115053,115054,115060,115070,115074,115078,115086,115091,115096,115100,115104,115109,115114,115118,115123,115128,115133,115137,115142,115147,115152,115157,115161,115165,115169,115173,115177,115182,115187,115191,115195,115199,115203,115207,115222,115231,115243,115266,115273,115277,115281,115291,115305,115319,115326,115330,115334,115348,115360,115372,115385,115400,115417,115421,115425,115437,115449,115457,115465,115469,115485,115490,115503,115516,115531,115535,115570,115602,115606,115610,115619,115623,115639,115649,115660,115676,115692,115708,115724,115728,115746,115766,115785,115789,115793,115805],{"__ignoreMap":112},[128,115055,115056,115058],{"class":130,"line":131},[128,115057,135],{"class":134},[128,115059,104668],{"class":138},[128,115061,115062,115064,115066,115068],{"class":130,"line":142},[128,115063,135],{"class":134},[128,115065,34851],{"class":138},[128,115067,279],{"class":134},[128,115069,34856],{"class":138},[128,115071,115072],{"class":130,"line":156},[128,115073,160],{"emptyLinePlaceholder":159},[128,115075,115076],{"class":130,"line":163},[128,115077,160],{"emptyLinePlaceholder":159},[128,115079,115080,115082,115084],{"class":130,"line":183},[128,115081,104681],{"class":166},[128,115083,170],{"class":134},[128,115085,104686],{"class":176},[128,115087,115088],{"class":130,"line":188},[128,115089,115090],{"class":176},"\u003Cmujoco model=\"two_link_reacher\">\n",[128,115092,115093],{"class":130,"line":193},[128,115094,115095],{"class":176},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[128,115097,115098],{"class":130,"line":206},[128,115099,160],{"emptyLinePlaceholder":159},[128,115101,115102],{"class":130,"line":221},[128,115103,104705],{"class":176},[128,115105,115106],{"class":130,"line":230},[128,115107,115108],{"class":176},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[128,115110,115111],{"class":130,"line":235},[128,115112,115113],{"class":176},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[128,115115,115116],{"class":130,"line":244},[128,115117,160],{"emptyLinePlaceholder":159},[128,115119,115120],{"class":130,"line":287},[128,115121,115122],{"class":176},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[128,115124,115125],{"class":130,"line":301},[128,115126,115127],{"class":176},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[128,115129,115130],{"class":130,"line":310},[128,115131,115132],{"class":176},"      \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",[128,115134,115135],{"class":130,"line":323},[128,115136,160],{"emptyLinePlaceholder":159},[128,115138,115139],{"class":130,"line":330},[128,115140,115141],{"class":176},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[128,115143,115144],{"class":130,"line":335},[128,115145,115146],{"class":176},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[128,115148,115149],{"class":130,"line":340},[128,115150,115151],{"class":176},"        \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",[128,115153,115154],{"class":130,"line":351},[128,115155,115156],{"class":176},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[128,115158,115159],{"class":130,"line":384},[128,115160,109801],{"class":176},[128,115162,115163],{"class":130,"line":414},[128,115164,104734],{"class":176},[128,115166,115167],{"class":130,"line":419},[128,115168,104739],{"class":176},[128,115170,115171],{"class":130,"line":424},[128,115172,160],{"emptyLinePlaceholder":159},[128,115174,115175],{"class":130,"line":434},[128,115176,109818],{"class":176},[128,115178,115179],{"class":130,"line":447},[128,115180,115181],{"class":176},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[128,115183,115184],{"class":130,"line":459},[128,115185,115186],{"class":176},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[128,115188,115189],{"class":130,"line":471},[128,115190,109828],{"class":176},[128,115192,115193],{"class":130,"line":483},[128,115194,104744],{"class":176},[128,115196,115197],{"class":130,"line":495},[128,115198,99067],{"class":176},[128,115200,115201],{"class":130,"line":507},[128,115202,160],{"emptyLinePlaceholder":159},[128,115204,115205],{"class":130,"line":519},[128,115206,160],{"emptyLinePlaceholder":159},[128,115208,115209,115211,115214,115217,115219],{"class":130,"line":524},[128,115210,196],{"class":134},[128,115212,115213],{"class":199}," site_position",[128,115215,115216],{"class":138},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[128,115218,4914],{"class":166},[128,115220,115221],{"class":138},") -> np.ndarray:\n",[128,115223,115224,115226,115228],{"class":130,"line":529},[128,115225,106763],{"class":138},[128,115227,270],{"class":134},[128,115229,115230],{"class":138}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[128,115232,115233,115235,115237,115239,115241],{"class":130,"line":540},[128,115234,209],{"class":134},[128,115236,106812],{"class":138},[128,115238,4657],{"class":134},[128,115240,7659],{"class":166},[128,115242,241],{"class":138},[128,115244,115245,115247,115249,115251,115253,115256,115258,115260,115262,115264],{"class":130,"line":555},[128,115246,106795],{"class":134},[128,115248,106798],{"class":166},[128,115250,253],{"class":138},[128,115252,3019],{"class":134},[128,115254,115255],{"class":176},"\"site not found: ",[128,115257,1379],{"class":166},[128,115259,2773],{"class":138},[128,115261,1453],{"class":166},[128,115263,1376],{"class":176},[128,115265,180],{"class":138},[128,115267,115268,115270],{"class":130,"line":576},[128,115269,587],{"class":134},[128,115271,115272],{"class":138}," data.site_xpos[site_id].copy()\n",[128,115274,115275],{"class":130,"line":584},[128,115276,160],{"emptyLinePlaceholder":159},[128,115278,115279],{"class":130,"line":593},[128,115280,160],{"emptyLinePlaceholder":159},[128,115282,115283,115285,115288],{"class":130,"line":598},[128,115284,196],{"class":134},[128,115286,115287],{"class":199}," get_obs",[128,115289,115290],{"class":138},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[128,115292,115293,115296,115298,115301,115303],{"class":130,"line":603},[128,115294,115295],{"class":138},"    tip ",[128,115297,270],{"class":134},[128,115299,115300],{"class":138}," site_position(model, data, ",[128,115302,114893],{"class":176},[128,115304,180],{"class":138},[128,115306,115307,115310,115312,115314,115317],{"class":130,"line":614},[128,115308,115309],{"class":138},"    target ",[128,115311,270],{"class":134},[128,115313,115300],{"class":138},[128,115315,115316],{"class":176},"\"target\"",[128,115318,180],{"class":138},[128,115320,115321,115323],{"class":130,"line":625},[128,115322,587],{"class":134},[128,115324,115325],{"class":138}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[128,115327,115328],{"class":130,"line":633},[128,115329,160],{"emptyLinePlaceholder":159},[128,115331,115332],{"class":130,"line":649},[128,115333,160],{"emptyLinePlaceholder":159},[128,115335,115336,115338,115341,115344,115346],{"class":130,"line":660},[128,115337,196],{"class":134},[128,115339,115340],{"class":199}," reward",[128,115342,115343],{"class":138},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[128,115345,3798],{"class":166},[128,115347,241],{"class":138},[128,115349,115350,115352,115354,115356,115358],{"class":130,"line":673},[128,115351,115295],{"class":138},[128,115353,270],{"class":134},[128,115355,115300],{"class":138},[128,115357,114893],{"class":176},[128,115359,180],{"class":138},[128,115361,115362,115364,115366,115368,115370],{"class":130,"line":678},[128,115363,115309],{"class":138},[128,115365,270],{"class":134},[128,115367,115300],{"class":138},[128,115369,115316],{"class":176},[128,115371,180],{"class":138},[128,115373,115374,115377,115379,115381,115383],{"class":130,"line":683},[128,115375,115376],{"class":138},"    dist ",[128,115378,270],{"class":134},[128,115380,114958],{"class":138},[128,115382,4281],{"class":134},[128,115384,114963],{"class":138},[128,115386,115387,115390,115392,115395,115397],{"class":130,"line":693},[128,115388,115389],{"class":138},"    control_cost ",[128,115391,270],{"class":134},[128,115393,115394],{"class":166}," 0.01",[128,115396,10075],{"class":134},[128,115398,115399],{"class":138}," np.sum(np.square(data.ctrl))\n",[128,115401,115402,115404,115406,115408,115410,115412,115414],{"class":130,"line":702},[128,115403,587],{"class":134},[128,115405,714],{"class":166},[128,115407,253],{"class":138},[128,115409,4281],{"class":134},[128,115411,114953],{"class":138},[128,115413,4281],{"class":134},[128,115415,115416],{"class":138}," control_cost)\n",[128,115418,115419],{"class":130,"line":709},[128,115420,160],{"emptyLinePlaceholder":159},[128,115422,115423],{"class":130,"line":723},[128,115424,160],{"emptyLinePlaceholder":159},[128,115426,115427,115429,115431,115433,115435],{"class":130,"line":732},[128,115428,196],{"class":134},[128,115430,1575],{"class":199},[128,115432,104765],{"class":138},[128,115434,99055],{"class":166},[128,115436,241],{"class":138},[128,115438,115439,115441,115443,115445,115447],{"class":130,"line":744},[128,115440,104774],{"class":138},[128,115442,270],{"class":134},[128,115444,104779],{"class":138},[128,115446,104681],{"class":166},[128,115448,180],{"class":138},[128,115450,115451,115453,115455],{"class":130,"line":749},[128,115452,104788],{"class":138},[128,115454,270],{"class":134},[128,115456,104793],{"class":138},[128,115458,115459,115461,115463],{"class":130,"line":754},[128,115460,113510],{"class":138},[128,115462,270],{"class":134},[128,115464,108124],{"class":166},[128,115466,115467],{"class":130,"line":764},[128,115468,160],{"emptyLinePlaceholder":159},[128,115470,115471,115473,115475,115477,115479,115481,115483],{"class":130,"line":782},[128,115472,543],{"class":134},[128,115474,35085],{"class":138},[128,115476,549],{"class":134},[128,115478,35910],{"class":166},[128,115480,253],{"class":138},[128,115482,68452],{"class":166},[128,115484,34264],{"class":138},[128,115486,115487],{"class":130,"line":787},[128,115488,115489],{"class":138},"        mujoco.mj_forward(model, data)\n",[128,115491,115492,115495,115497,115499,115501],{"class":130,"line":795},[128,115493,115494],{"class":138},"        tip ",[128,115496,270],{"class":134},[128,115498,115300],{"class":138},[128,115500,114893],{"class":176},[128,115502,180],{"class":138},[128,115504,115505,115508,115510,115512,115514],{"class":130,"line":807},[128,115506,115507],{"class":138},"        target ",[128,115509,270],{"class":134},[128,115511,115300],{"class":138},[128,115513,115316],{"class":176},[128,115515,180],{"class":138},[128,115517,115518,115521,115523,115526,115528],{"class":130,"line":813},[128,115519,115520],{"class":138},"        error ",[128,115522,270],{"class":134},[128,115524,115525],{"class":138}," target ",[128,115527,4281],{"class":134},[128,115529,115530],{"class":138}," tip\n",[128,115532,115533],{"class":130,"line":818},[128,115534,160],{"emptyLinePlaceholder":159},[128,115536,115537,115539,115541,115543,115545,115548,115550,115552,115555,115557,115560,115562,115564,115566,115568],{"class":130,"line":835},[128,115538,109980],{"class":138},[128,115540,2452],{"class":166},[128,115542,567],{"class":138},[128,115544,270],{"class":134},[128,115546,115547],{"class":138}," np.clip(",[128,115549,108623],{"class":166},[128,115551,10075],{"class":134},[128,115553,115554],{"class":138}," error[",[128,115556,409],{"class":166},[128,115558,115559],{"class":138},"], ",[128,115561,4281],{"class":134},[128,115563,105766],{"class":166},[128,115565,258],{"class":138},[128,115567,105766],{"class":166},[128,115569,180],{"class":138},[128,115571,115572,115574,115576,115578,115580,115582,115584,115586,115588,115590,115592,115594,115596,115598,115600],{"class":130,"line":851},[128,115573,109980],{"class":138},[128,115575,2592],{"class":166},[128,115577,567],{"class":138},[128,115579,270],{"class":134},[128,115581,115547],{"class":138},[128,115583,108623],{"class":166},[128,115585,10075],{"class":134},[128,115587,115554],{"class":138},[128,115589,2452],{"class":166},[128,115591,115559],{"class":138},[128,115593,4281],{"class":134},[128,115595,105766],{"class":166},[128,115597,258],{"class":138},[128,115599,105766],{"class":166},[128,115601,180],{"class":138},[128,115603,115604],{"class":130,"line":867},[128,115605,160],{"emptyLinePlaceholder":159},[128,115607,115608],{"class":130,"line":872},[128,115609,104883],{"class":138},[128,115611,115612,115614,115616],{"class":130,"line":878},[128,115613,113654],{"class":138},[128,115615,13023],{"class":134},[128,115617,115618],{"class":138}," reward(model, data)\n",[128,115620,115621],{"class":130,"line":887},[128,115622,160],{"emptyLinePlaceholder":159},[128,115624,115625,115627,115629,115631,115633,115635,115637],{"class":130,"line":896},[128,115626,558],{"class":134},[128,115628,35085],{"class":138},[128,115630,4078],{"class":134},[128,115632,9312],{"class":166},[128,115634,1806],{"class":134},[128,115636,7659],{"class":166},[128,115638,241],{"class":138},[128,115640,115641,115644,115646],{"class":130,"line":905},[128,115642,115643],{"class":138},"            obs ",[128,115645,270],{"class":134},[128,115647,115648],{"class":138}," get_obs(model, data)\n",[128,115650,115651,115653,115655,115657],{"class":130,"line":914},[128,115652,663],{"class":166},[128,115654,253],{"class":138},[128,115656,113688],{"class":176},[128,115658,115659],{"class":138},", step)\n",[128,115661,115662,115664,115666,115669,115672,115674],{"class":130,"line":920},[128,115663,663],{"class":166},[128,115665,253],{"class":138},[128,115667,115668],{"class":176},"\"  tip:\"",[128,115670,115671],{"class":138},", np.round(tip, ",[128,115673,3827],{"class":166},[128,115675,3034],{"class":138},[128,115677,115678,115680,115682,115685,115688,115690],{"class":130,"line":926},[128,115679,663],{"class":166},[128,115681,253],{"class":138},[128,115683,115684],{"class":176},"\"  target:\"",[128,115686,115687],{"class":138},", np.round(target, ",[128,115689,3827],{"class":166},[128,115691,3034],{"class":138},[128,115693,115694,115696,115698,115701,115704,115706],{"class":130,"line":938},[128,115695,663],{"class":166},[128,115697,253],{"class":138},[128,115699,115700],{"class":176},"\"  ctrl:\"",[128,115702,115703],{"class":138},", np.round(data.ctrl.copy(), ",[128,115705,3827],{"class":166},[128,115707,3034],{"class":138},[128,115709,115710,115712,115714,115717,115720,115722],{"class":130,"line":943},[128,115711,663],{"class":166},[128,115713,253],{"class":138},[128,115715,115716],{"class":176},"\"  obs_dim:\"",[128,115718,115719],{"class":138},", obs.shape[",[128,115721,2452],{"class":166},[128,115723,2595],{"class":138},[128,115725,115726],{"class":130,"line":948},[128,115727,160],{"emptyLinePlaceholder":159},[128,115729,115730,115732,115734,115736,115738,115740,115742,115744],{"class":130,"line":958},[128,115731,437],{"class":166},[128,115733,253],{"class":138},[128,115735,113733],{"class":176},[128,115737,258],{"class":138},[128,115739,35485],{"class":166},[128,115741,113740],{"class":138},[128,115743,3827],{"class":166},[128,115745,3034],{"class":138},[128,115747,115748,115750,115752,115755,115758,115760,115762,115764],{"class":130,"line":974},[128,115749,437],{"class":166},[128,115751,253],{"class":138},[128,115753,115754],{"class":176},"\"final tip:\"",[128,115756,115757],{"class":138},", np.round(site_position(model, data, ",[128,115759,114893],{"class":176},[128,115761,113702],{"class":138},[128,115763,3827],{"class":166},[128,115765,3034],{"class":138},[128,115767,115768,115770,115772,115775,115777,115779,115781,115783],{"class":130,"line":985},[128,115769,437],{"class":166},[128,115771,253],{"class":138},[128,115773,115774],{"class":176},"\"target:\"",[128,115776,115757],{"class":138},[128,115778,115316],{"class":176},[128,115780,113702],{"class":138},[128,115782,3827],{"class":166},[128,115784,3034],{"class":138},[128,115786,115787],{"class":130,"line":990},[128,115788,160],{"emptyLinePlaceholder":159},[128,115790,115791],{"class":130,"line":1005},[128,115792,160],{"emptyLinePlaceholder":159},[128,115794,115795,115797,115799,115801,115803],{"class":130,"line":1017},[128,115796,1800],{"class":134},[128,115798,1803],{"class":166},[128,115800,1806],{"class":134},[128,115802,1809],{"class":176},[128,115804,241],{"class":138},[128,115806,115807],{"class":130,"line":1022},[128,115808,1817],{"class":138},[19,115810,106933],{},[106,115812,115814],{"className":27309,"code":115813,"language":27311,"meta":112,"style":112},"touch ch7_reacher.py\n",[114,115815,115816],{"__ignoreMap":112},[128,115817,115818,115820],{"class":130,"line":131},[128,115819,104650],{"class":199},[128,115821,115822],{"class":176}," ch7_reacher.py\n",[19,115824,113801],{},[106,115826,115828],{"className":27309,"code":115827,"language":27311,"meta":112,"style":112},"python ch7_reacher.py\n",[114,115829,115830],{"__ignoreMap":112},[128,115831,115832,115834],{"class":130,"line":131},[128,115833,124],{"class":199},[128,115835,115822],{"class":176},[72,115837,104936],{"id":104936},[19,115839,115840],{},"读取 site 坐标：",[106,115842,115844],{"className":122,"code":115843,"language":124,"meta":112,"style":112},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[114,115845,115846],{"__ignoreMap":112},[128,115847,115848,115850,115852,115854,115856],{"class":130,"line":131},[128,115849,196],{"class":134},[128,115851,115213],{"class":199},[128,115853,115216],{"class":138},[128,115855,4914],{"class":166},[128,115857,115221],{"class":138},[19,115859,115860],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,115862,113817],{},[106,115864,115866],{"className":122,"code":115865,"language":124,"meta":112,"style":112},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[114,115867,115868],{"__ignoreMap":112},[128,115869,115870,115872],{"class":130,"line":131},[128,115871,20533],{"class":134},[128,115873,115325],{"class":138},[19,115875,115876],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,115878,113143],{},[106,115880,115882],{"className":122,"code":115881,"language":124,"meta":112,"style":112},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[114,115883,115884,115896,115909],{"__ignoreMap":112},[128,115885,115886,115888,115890,115892,115894],{"class":130,"line":131},[128,115887,114953],{"class":138},[128,115889,270],{"class":134},[128,115891,114958],{"class":138},[128,115893,4281],{"class":134},[128,115895,114963],{"class":138},[128,115897,115898,115901,115903,115905,115907],{"class":130,"line":142},[128,115899,115900],{"class":138},"control_cost ",[128,115902,270],{"class":134},[128,115904,115394],{"class":166},[128,115906,10075],{"class":134},[128,115908,115399],{"class":138},[128,115910,115911,115913,115915,115917,115919,115921,115923],{"class":130,"line":156},[128,115912,20533],{"class":134},[128,115914,714],{"class":166},[128,115916,253],{"class":138},[128,115918,4281],{"class":134},[128,115920,114953],{"class":138},[128,115922,4281],{"class":134},[128,115924,115416],{"class":138},[19,115926,115927],{},"奖励由两部分组成：",[26,115929,115930,115935],{},[29,115931,115932,115934],{},[114,115933,114980],{},"：末端离目标越远，奖励越低。",[29,115936,115937,115940],{},[114,115938,115939],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,115942,115943],{},"简单控制器：",[106,115945,115947],{"className":122,"code":115946,"language":124,"meta":112,"style":112},"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",[114,115948,115949,115962,115994],{"__ignoreMap":112},[128,115950,115951,115954,115956,115958,115960],{"class":130,"line":131},[128,115952,115953],{"class":138},"error ",[128,115955,270],{"class":134},[128,115957,115525],{"class":138},[128,115959,4281],{"class":134},[128,115961,115530],{"class":138},[128,115963,115964,115966,115968,115970,115972,115974,115976,115978,115980,115982,115984,115986,115988,115990,115992],{"class":130,"line":142},[128,115965,109234],{"class":138},[128,115967,2452],{"class":166},[128,115969,567],{"class":138},[128,115971,270],{"class":134},[128,115973,115547],{"class":138},[128,115975,108623],{"class":166},[128,115977,10075],{"class":134},[128,115979,115554],{"class":138},[128,115981,409],{"class":166},[128,115983,115559],{"class":138},[128,115985,4281],{"class":134},[128,115987,105766],{"class":166},[128,115989,258],{"class":138},[128,115991,105766],{"class":166},[128,115993,180],{"class":138},[128,115995,115996,115998,116000,116002,116004,116006,116008,116010,116012,116014,116016,116018,116020,116022,116024],{"class":130,"line":156},[128,115997,109234],{"class":138},[128,115999,2592],{"class":166},[128,116001,567],{"class":138},[128,116003,270],{"class":134},[128,116005,115547],{"class":138},[128,116007,108623],{"class":166},[128,116009,10075],{"class":134},[128,116011,115554],{"class":138},[128,116013,2452],{"class":166},[128,116015,115559],{"class":138},[128,116017,4281],{"class":134},[128,116019,105766],{"class":166},[128,116021,258],{"class":138},[128,116023,105766],{"class":166},[128,116025,180],{"class":138},[19,116027,116028],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[72,116030,105071],{"id":105071},[106,116032,116033],{"className":122,"code":115843,"language":124,"meta":112,"style":112},[114,116034,116035],{"__ignoreMap":112},[128,116036,116037,116039,116041,116043,116045],{"class":130,"line":131},[128,116038,196],{"class":134},[128,116040,115213],{"class":199},[128,116042,115216],{"class":138},[128,116044,4914],{"class":166},[128,116046,115221],{"class":138},[19,116048,116049,116050,116052,116053,85912,116055,1842],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[114,116051,2773],{}," 是 site 的名字，比如 ",[114,116054,114893],{},[114,116056,115316],{},[106,116058,116060],{"className":122,"code":116059,"language":124,"meta":112,"style":112},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[114,116061,116062],{"__ignoreMap":112},[128,116063,116064,116066,116068],{"class":130,"line":131},[128,116065,106997],{"class":138},[128,116067,270],{"class":134},[128,116069,115230],{"class":138},[19,116071,116072],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[106,116074,116076],{"className":122,"code":116075,"language":124,"meta":112,"style":112},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[114,116077,116078,116090],{"__ignoreMap":112},[128,116079,116080,116082,116084,116086,116088],{"class":130,"line":131},[128,116081,1800],{"class":134},[128,116083,106812],{"class":138},[128,116085,4657],{"class":134},[128,116087,7659],{"class":166},[128,116089,241],{"class":138},[128,116091,116092,116094,116096,116098,116100,116102,116104,116106,116108,116110],{"class":130,"line":142},[128,116093,107258],{"class":134},[128,116095,106798],{"class":166},[128,116097,253],{"class":138},[128,116099,3019],{"class":134},[128,116101,115255],{"class":176},[128,116103,1379],{"class":166},[128,116105,2773],{"class":138},[128,116107,1453],{"class":166},[128,116109,1376],{"class":176},[128,116111,180],{"class":138},[19,116113,116114,116115,116118,116119,116121],{},"如果 site 没找到，就主动报错。",[114,116116,116117],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[114,116120,2773],{}," 的值放进字符串里。",[106,116123,116125],{"className":122,"code":116124,"language":124,"meta":112,"style":112},"return data.site_xpos[site_id].copy()\n",[114,116126,116127],{"__ignoreMap":112},[128,116128,116129,116131],{"class":130,"line":131},[128,116130,20533],{"class":134},[128,116132,115272],{"class":138},[19,116134,116135,116136,116138,116139,116142],{},"返回这个 site 的世界坐标。",[114,116137,107043],{}," 里的每一行都是一个 site 的 ",[114,116140,116141],{},"(x, y, z)"," 坐标。",[106,116144,116146],{"className":122,"code":116145,"language":124,"meta":112,"style":112},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[114,116147,116148],{"__ignoreMap":112},[128,116149,116150,116152,116154],{"class":130,"line":131},[128,116151,196],{"class":134},[128,116153,115287],{"class":199},[128,116155,115290],{"class":138},[19,116157,116158],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[106,116160,116162],{"className":122,"code":116161,"language":124,"meta":112,"style":112},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[114,116163,116164,116176],{"__ignoreMap":112},[128,116165,116166,116168,116170,116172,116174],{"class":130,"line":131},[128,116167,114925],{"class":138},[128,116169,270],{"class":134},[128,116171,115300],{"class":138},[128,116173,114893],{"class":176},[128,116175,180],{"class":138},[128,116177,116178,116180,116182,116184,116186],{"class":130,"line":142},[128,116179,114935],{"class":138},[128,116181,270],{"class":134},[128,116183,115300],{"class":138},[128,116185,115316],{"class":176},[128,116187,180],{"class":138},[19,116189,116190],{},"分别读取末端点和目标点的世界坐标。",[106,116192,116193],{"className":122,"code":115865,"language":124,"meta":112,"style":112},[114,116194,116195],{"__ignoreMap":112},[128,116196,116197,116199],{"class":130,"line":131},[128,116198,20533],{"class":134},[128,116200,115325],{"class":138},[19,116202,116203],{},"把四部分拼成一个观测数组：",[106,116205,116208],{"className":116206,"code":116207,"language":111,"meta":112},[109],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[114,116209,116207],{"__ignoreMap":112},[106,116211,116213],{"className":122,"code":116212,"language":124,"meta":112,"style":112},"dist = np.linalg.norm(tip - target)\n",[114,116214,116215],{"__ignoreMap":112},[128,116216,116217,116219,116221,116223,116225],{"class":130,"line":131},[128,116218,114953],{"class":138},[128,116220,270],{"class":134},[128,116222,114958],{"class":138},[128,116224,4281],{"class":134},[128,116226,114963],{"class":138},[19,116228,116229,116230,116233,116234,116237],{},"计算 tip 到 target 的距离。",[114,116231,116232],{},"tip - target"," 得到一个三维向量，",[114,116235,116236],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,116239,18157],{},[106,116241,116244],{"className":116242,"code":116243,"language":111,"meta":112},[109],"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",[114,116245,116243],{"__ignoreMap":112},[106,116247,116249],{"className":122,"code":116248,"language":124,"meta":112,"style":112},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[114,116250,116251],{"__ignoreMap":112},[128,116252,116253,116255,116257,116259,116261],{"class":130,"line":131},[128,116254,115900],{"class":138},[128,116256,270],{"class":134},[128,116258,115394],{"class":166},[128,116260,10075],{"class":134},[128,116262,115399],{"class":138},[19,116264,116265,116266,116269,116270,116273],{},"计算动作惩罚。",[114,116267,116268],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[114,116271,116272],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[106,116275,116277],{"className":122,"code":116276,"language":124,"meta":112,"style":112},"return float(-dist - control_cost)\n",[114,116278,116279],{"__ignoreMap":112},[128,116280,116281,116283,116285,116287,116289,116291,116293],{"class":130,"line":131},[128,116282,20533],{"class":134},[128,116284,714],{"class":166},[128,116286,253],{"class":138},[128,116288,4281],{"class":134},[128,116290,114953],{"class":138},[128,116292,4281],{"class":134},[128,116294,115416],{"class":138},[19,116296,116297],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[106,116299,116300],{"className":122,"code":114160,"language":124,"meta":112,"style":112},[114,116301,116302],{"__ignoreMap":112},[128,116303,116304,116306,116308],{"class":130,"line":131},[128,116305,114167],{"class":138},[128,116307,270],{"class":134},[128,116309,108124],{"class":166},[19,116311,116312],{},"累计奖励变量，记录整个运行过程的总分。",[106,116314,116316],{"className":122,"code":116315,"language":124,"meta":112,"style":112},"for step in range(500):\n",[114,116317,116318],{"__ignoreMap":112},[128,116319,116320,116322,116324,116326,116328,116330,116332],{"class":130,"line":131},[128,116321,2404],{"class":134},[128,116323,35085],{"class":138},[128,116325,549],{"class":134},[128,116327,35910],{"class":166},[128,116329,253],{"class":138},[128,116331,68452],{"class":166},[128,116333,34264],{"class":138},[19,116335,116336],{},"运行 500 个控制步。",[106,116338,116339],{"className":122,"code":107906,"language":124,"meta":112,"style":112},[114,116340,116341],{"__ignoreMap":112},[128,116342,116343],{"class":130,"line":131},[128,116344,107906],{"class":138},[19,116346,116347,116348,3330,116350,116352],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[114,116349,106594],{},[114,116351,106597],{}," 是当前状态下的坐标。",[106,116354,116356],{"className":122,"code":116355,"language":124,"meta":112,"style":112},"error = target - tip\n",[114,116357,116358],{"__ignoreMap":112},[128,116359,116360,116362,116364,116366,116368],{"class":130,"line":131},[128,116361,115953],{"class":138},[128,116363,270],{"class":134},[128,116365,115525],{"class":138},[128,116367,4281],{"class":134},[128,116369,115530],{"class":138},[19,116371,116372],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[106,116374,116376],{"className":122,"code":116375,"language":124,"meta":112,"style":112},"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",[114,116377,116378,116410],{"__ignoreMap":112},[128,116379,116380,116382,116384,116386,116388,116390,116392,116394,116396,116398,116400,116402,116404,116406,116408],{"class":130,"line":131},[128,116381,109234],{"class":138},[128,116383,2452],{"class":166},[128,116385,567],{"class":138},[128,116387,270],{"class":134},[128,116389,115547],{"class":138},[128,116391,108623],{"class":166},[128,116393,10075],{"class":134},[128,116395,115554],{"class":138},[128,116397,409],{"class":166},[128,116399,115559],{"class":138},[128,116401,4281],{"class":134},[128,116403,105766],{"class":166},[128,116405,258],{"class":138},[128,116407,105766],{"class":166},[128,116409,180],{"class":138},[128,116411,116412,116414,116416,116418,116420,116422,116424,116426,116428,116430,116432,116434,116436,116438,116440],{"class":130,"line":142},[128,116413,109234],{"class":138},[128,116415,2592],{"class":166},[128,116417,567],{"class":138},[128,116419,270],{"class":134},[128,116421,115547],{"class":138},[128,116423,108623],{"class":166},[128,116425,10075],{"class":134},[128,116427,115554],{"class":138},[128,116429,2452],{"class":166},[128,116431,115559],{"class":138},[128,116433,4281],{"class":134},[128,116435,105766],{"class":166},[128,116437,258],{"class":138},[128,116439,105766],{"class":166},[128,116441,180],{"class":138},[19,116443,116444,116445,116448],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[114,116446,116447],{},"error -> ctrl -> step"," 的流程。",[106,116450,116451],{"className":122,"code":107868,"language":124,"meta":112,"style":112},[114,116452,116453],{"__ignoreMap":112},[128,116454,116455],{"class":130,"line":131},[128,116456,107868],{"class":138},[19,116458,116459],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[106,116461,116463],{"className":122,"code":116462,"language":124,"meta":112,"style":112},"obs = get_obs(model, data)\n",[114,116464,116465],{"__ignoreMap":112},[128,116466,116467,116469,116471],{"class":130,"line":131},[128,116468,114211],{"class":138},[128,116470,270],{"class":134},[128,116472,115648],{"class":138},[19,116474,116475,116476,116479],{},"读取最新观测。后面打印 ",[114,116477,116478],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,116481,105679],{"id":105678},[19,116483,116484],{},"观测维度为:",[106,116486,116489],{"className":116487,"code":116488,"language":111,"meta":112},[109],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[114,116490,116488],{"__ignoreMap":112},[19,116492,116493],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,116495,116496],{},"程序每 100 步打印：",[106,116498,116501],{"className":116499,"code":116500,"language":111,"meta":112},[109],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[114,116502,116500],{"__ignoreMap":112},[19,116504,116505,116506,116508],{},"如果控制有效，你应该看到最终 ",[114,116507,106594],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,116510,105711],{"id":105710},[26,116512,116513,116516,116519,116525,116531,116538,116548],{},[29,116514,116515],{},"修改目标点位置。",[29,116517,116518],{},"重新运行，观察最终 tip 是否变化。",[29,116520,116521,116522,116524],{},"把 gravity 改成 ",[114,116523,105952],{},"，观察控制是否变差。",[29,116526,114538,116527,114542,116529,1842],{},[114,116528,105521],{},[114,116530,409],{},[29,116532,105774,116533,105777,116535,116537],{},[114,116534,113953],{},[114,116536,110670],{},"，观察机械臂是否更难移动。",[29,116539,105774,116540,85903,116542,105777,116544,116547],{},[114,116541,106597],{},[114,116543,107509],{},[114,116545,116546],{},"0.2 0 0.6","，观察 reward 和 final tip。",[29,116549,116550],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,116552,105816],{"id":105815},[72,116554,116556],{"id":116555},"site-not-found",[114,116557,116558],{},"site not found",[19,116560,116561,116562,3330,116565,1842],{},"检查 XML 中是否有 ",[114,116563,116564],{},"site name=\"tip\"",[114,116566,116567],{},"site name=\"target\"",[72,116569,116570],{"id":116570},"机械臂完全不动",[19,116572,105886],{},[26,116574,116575,116580,116583,116588],{},[29,116576,116577,116579],{},[114,116578,105521],{}," 是否为 2",[29,116581,116582],{},"actuator 是否引用正确 joint",[29,116584,116585,116587],{},[114,116586,104443],{}," 是否被赋值",[29,116589,116590,116591],{},"是否执行了 ",[114,116592,104053],{},[72,116594,116595],{"id":116595},"控制效果不好",[19,116597,116598],{},"正常。本章重点不是控制器最优，而是任务结构:",[106,116600,116603],{"className":116601,"code":116602,"language":111,"meta":112},[109],"obs → action → mj_step → reward → next_obs\n",[114,116604,116602],{"__ignoreMap":112},[72,116606,116608],{"id":116607},"tip-坐标不变化","tip 坐标不变化",[19,116610,105938],{},[26,116612,116613,116618,116626,116635],{},[29,116614,116615,116616,1842],{},"是否每步调用了 ",[114,116617,104053],{},[29,116619,116620,116621,3330,116623,1842],{},"是否写入了 ",[114,116622,109489],{},[114,116624,116625],{},"data.ctrl[1]",[29,116627,116628,116629,3550,116632,1842],{},"actuator 是否正确引用 ",[114,116630,116631],{},"joint1",[114,116633,116634],{},"joint2",[29,116636,116637],{},"控制输入是否太小。",[72,116639,116640],{"id":116640},"目标点不会动",[19,116642,116643],{},"本章的 target 是固定 site：",[106,116645,116647],{"className":56449,"code":116646,"language":56451,"meta":112,"style":112},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[114,116648,116649],{"__ignoreMap":112},[128,116650,116651,116653,116655,116657,116659,116661,116663,116665,116668],{"class":130,"line":131},[128,116652,4657],{"class":138},[128,116654,106573],{"class":54685},[128,116656,18442],{"class":199},[128,116658,270],{"class":138},[128,116660,115316],{"class":176},[128,116662,104473],{"class":199},[128,116664,270],{"class":138},[128,116666,116667],{"class":176},"\"0.5 0 0.4\"",[128,116669,116670],{"class":138}," ...\u002F>\n",[19,116672,116673,116674,116676],{},"它直接挂在 ",[114,116675,105204],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[72,116678,116679],{"id":116679},"机械臂不像真实机械臂",[19,116681,116682],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,116684,105970],{"id":105969},[19,116686,116687],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,116689,116690],{},"核心公式：",[106,116692,116695],{"className":116693,"code":116694,"language":111,"meta":112},[109],"distance = ||tip - target||\nreward = -distance - action_cost\n",[114,116696,116694],{"__ignoreMap":112},[19,116698,116699],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[3659,116701,116702],{},"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":112,"searchDepth":142,"depth":142,"links":116704},[116705,116706,116707,116712,116716,116717,116718,116726],{"id":104014,"depth":142,"text":104015},{"id":104137,"depth":142,"text":104138},{"id":104411,"depth":142,"text":104412,"children":116708},[116709,116710,116711],{"id":114908,"depth":156,"text":114909},{"id":114984,"depth":156,"text":114984},{"id":115014,"depth":156,"text":115015},{"id":104619,"depth":142,"text":104620,"children":116713},[116714,116715],{"id":104936,"depth":156,"text":104936},{"id":105071,"depth":156,"text":105071},{"id":105678,"depth":142,"text":105679},{"id":105710,"depth":142,"text":105711},{"id":105815,"depth":142,"text":105816,"children":116719},[116720,116721,116722,116723,116724,116725],{"id":116555,"depth":156,"text":116558},{"id":116570,"depth":156,"text":116570},{"id":116595,"depth":156,"text":116595},{"id":116607,"depth":156,"text":116608},{"id":116640,"depth":156,"text":116640},{"id":116679,"depth":156,"text":116679},{"id":105969,"depth":142,"text":105970},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":114712,"description":112},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":116733,"title":116734,"body":116735,"description":112,"extension":3687,"meta":120196,"navigation":159,"path":120197,"seo":120198,"stem":120199,"__hash__":120200},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":116736,"toc":120167},[116737,116740,116742,116745,116748,116773,116776,116782,116785,116791,116793,116795,116819,116821,116839,116841,116884,116886,116913,116915,116918,116970,116973,116979,116988,116991,117029,117032,117071,117074,117082,117089,117092,117098,117100,117154,117161,117206,117209,117213,117229,117239,117241,118501,118503,118515,118517,118528,118530,118533,118554,118557,118560,118593,118599,118602,118635,118638,118641,118682,118687,118701,118704,118717,118722,118745,118747,118762,118772,118787,118794,118814,118829,118847,118850,118867,118875,118891,118897,118929,118942,118974,118984,119019,119033,119079,119093,119135,119146,119159,119165,119198,119201,119228,119238,119278,119288,119305,119312,119330,119333,119374,119387,119402,119405,119428,119431,119443,119446,119465,119470,119491,119494,119509,119512,119546,119558,119573,119576,119601,119604,119623,119626,119658,119661,119685,119691,119721,119728,119741,119744,119746,119748,119754,119757,119760,119772,119775,119777,119831,119833,119837,119843,119852,119855,119862,119864,119887,119890,119894,119896,119914,119920,119922,119955,119958,119964,119968,119971,119991,119996,120000,120007,120027,120032,120036,120039,120059,120062,120148,120152,120155,120161,120164],[10,116738,116734],{"id":116739},"_8gymnasium-风格强化学习接口基础",[14,116741,104015],{"id":104014},[19,116743,116744],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,116746,116747],{},"你将实现:",[106,116749,116751],{"className":122,"code":116750,"language":124,"meta":112,"style":112},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[114,116752,116753,116763],{"__ignoreMap":112},[128,116754,116755,116758,116760],{"class":130,"line":131},[128,116756,116757],{"class":138},"obs, info ",[128,116759,270],{"class":134},[128,116761,116762],{"class":138}," env.reset()\n",[128,116764,116765,116768,116770],{"class":130,"line":142},[128,116766,116767],{"class":138},"obs, reward, terminated, truncated, info ",[128,116769,270],{"class":134},[128,116771,116772],{"class":138}," env.step(action)\n",[19,116774,116775],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,116777,116778,116779,116781],{},"前面章节的代码都是“脚本式”的：在 ",[114,116780,105658],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,116783,116784],{},"可以先记住 Gymnasium 环境的核心交互：",[106,116786,116789],{"className":116787,"code":116788,"language":111,"meta":112},[109],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[114,116790,116788],{"__ignoreMap":112},[14,116792,104138],{"id":104137},[19,116794,104141],{},[106,116796,116797],{"className":27309,"code":107751,"language":27311,"meta":112,"style":112},[114,116798,116799],{"__ignoreMap":112},[128,116800,116801,116803,116805,116807,116809,116811,116813,116815,116817],{"class":130,"line":131},[128,116802,28064],{"class":199},[128,116804,29800],{"class":176},[128,116806,27321],{"class":176},[128,116808,29885],{"class":166},[128,116810,107766],{"class":176},[128,116812,104166],{"class":176},[128,116814,105864],{"class":176},[128,116816,104182],{"class":176},[128,116818,107775],{"class":176},[19,116820,106182],{},[106,116822,116824],{"className":27309,"code":116823,"language":27311,"meta":112,"style":112},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[114,116825,116826],{"__ignoreMap":112},[128,116827,116828,116830,116832,116834,116836],{"class":130,"line":131},[128,116829,27318],{"class":199},[128,116831,27321],{"class":176},[128,116833,104298],{"class":176},[128,116835,111073],{"class":176},[128,116837,116838],{"class":176}," gymnasium\n",[19,116840,106199],{},[106,116842,116844],{"className":27309,"code":116843,"language":27311,"meta":112,"style":112},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[114,116845,116846,116863,116872],{"__ignoreMap":112},[128,116847,116848,116850,116852,116854,116857,116859,116861],{"class":130,"line":131},[128,116849,33814],{"class":199},[128,116851,32660],{"class":176},[128,116853,28602],{"class":166},[128,116855,116856],{"class":176}," mujoco-gym-api",[128,116858,104343],{"class":176},[128,116860,104346],{"class":166},[128,116862,104349],{"class":166},[128,116864,116865,116867,116869],{"class":130,"line":142},[128,116866,33814],{"class":199},[128,116868,104356],{"class":176},[128,116870,116871],{"class":176}," mujoco-gym-api\n",[128,116873,116874,116876,116878,116880,116882],{"class":130,"line":156},[128,116875,27318],{"class":199},[128,116877,27321],{"class":176},[128,116879,104298],{"class":176},[128,116881,111073],{"class":176},[128,116883,116838],{"class":176},[19,116885,104372],{},[26,116887,116888,116898,116901,116907],{},[29,116889,116890,116891,116894,116895,1842],{},"本章使用 ",[114,116892,116893],{},"gymnasium","，不是旧版 ",[114,116896,116897],{},"gym",[29,116899,116900],{},"Gymnasium API 与旧 Gym API 有差异。",[29,116902,116903,116904,1842],{},"旧 Gym 常见返回值是 4 个: ",[114,116905,116906],{},"obs, reward, done, info",[29,116908,116909,116910,1842],{},"Gymnasium 返回值是 5 个: ",[114,116911,116912],{},"obs, reward, terminated, truncated, info",[14,116914,104412],{"id":104411},[19,116916,116917],{},"强化学习环境接口包含:",[3891,116919,116920,116929],{},[3894,116921,116922],{},[3897,116923,116924,116927],{},[3900,116925,116926],{"align":27223},"方法",[3900,116928,106059],{"align":27223},[3938,116930,116931,116941,116951,116961],{},[3897,116932,116933,116938],{},[3943,116934,116935],{"align":27223},[114,116936,116937],{},"reset()",[3943,116939,116940],{"align":27223},"重置环境",[3897,116942,116943,116948],{},[3943,116944,116945],{"align":27223},[114,116946,116947],{},"step(action)",[3943,116949,116950],{"align":27223},"执行动作",[3897,116952,116953,116958],{},[3943,116954,116955],{"align":27223},[114,116956,116957],{},"observation_space",[3943,116959,116960],{"align":27223},"观测空间",[3897,116962,116963,116968],{},[3943,116964,116965],{"align":27223},[114,116966,116967],{},"action_space",[3943,116969,27141],{"align":27223},[19,116971,116972],{},"一个最小环境需要完成:",[106,116974,116977],{"className":116975,"code":116976,"language":111,"meta":112},[109],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[114,116978,116976],{"__ignoreMap":112},[72,116980,116982,3330,116985,108001],{"id":116981},"terminated-和-truncated-的区别",[114,116983,116984],{},"terminated",[114,116986,116987],{},"truncated",[19,116989,116990],{},"Gymnasium 把“结束”拆成两个概念：",[3891,116992,116993,117003],{},[3894,116994,116995],{},[3897,116996,116997,116999,117001],{},[3900,116998,107937],{"align":27223},[3900,117000,104068],{"align":27223},[3900,117002,24674],{"align":27223},[3938,117004,117005,117017],{},[3897,117006,117007,117011,117014],{},[3943,117008,117009],{"align":27223},[114,117010,116984],{},[3943,117012,117013],{"align":27223},"任务自然结束",[3943,117015,117016],{"align":27223},"机械臂到达目标、机器人摔倒",[3897,117018,117019,117023,117026],{},[3943,117020,117021],{"align":27223},[114,117022,116987],{},[3943,117024,117025],{"align":27223},"因外部限制截断",[3943,117027,117028],{"align":27223},"达到最大步数、时间限制",[19,117030,117031],{},"本章中：",[106,117033,117035],{"className":122,"code":117034,"language":124,"meta":112,"style":112},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[114,117036,117037,117052],{"__ignoreMap":112},[128,117038,117039,117042,117044,117047,117049],{"class":130,"line":131},[128,117040,117041],{"class":138},"terminated ",[128,117043,270],{"class":134},[128,117045,117046],{"class":138}," dist ",[128,117048,4657],{"class":134},[128,117050,117051],{"class":166}," 0.05\n",[128,117053,117054,117057,117059,117061,117064,117066,117068],{"class":130,"line":142},[128,117055,117056],{"class":138},"truncated ",[128,117058,270],{"class":134},[128,117060,2148],{"class":166},[128,117062,117063],{"class":138},".steps ",[128,117065,5308],{"class":134},[128,117067,2148],{"class":166},[128,117069,117070],{"class":138},".max_steps\n",[19,117072,117073],{},"也就是：",[26,117075,117076,117079],{},[29,117077,117078],{},"末端距离目标小于 0.05，任务成功结束。",[29,117080,117081],{},"步数超过上限，episode 被截断。",[72,117083,117085,3330,117087],{"id":117084},"observation_space-和-action_space",[114,117086,116957],{},[114,117088,116967],{},[19,117090,117091],{},"这两个对象告诉算法：",[106,117093,117096],{"className":117094,"code":117095,"language":111,"meta":112},[109],"观测长什么样\n动作允许多大\n",[114,117097,117095],{"__ignoreMap":112},[19,117099,18157],{},[106,117101,117103],{"className":122,"code":117102,"language":124,"meta":112,"style":112},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[114,117104,117105],{"__ignoreMap":112},[128,117106,117107,117109,117112,117114,117117,117120,117123,117125,117127,117130,117132,117134,117136,117138,117140,117142,117144,117147,117149,117151],{"class":130,"line":131},[128,117108,1970],{"class":166},[128,117110,117111],{"class":138},".action_space ",[128,117113,270],{"class":134},[128,117115,117116],{"class":138}," spaces.Box(",[128,117118,117119],{"class":266},"low",[128,117121,117122],{"class":134},"=-",[128,117124,105766],{"class":166},[128,117126,258],{"class":138},[128,117128,117129],{"class":266},"high",[128,117131,270],{"class":134},[128,117133,105766],{"class":166},[128,117135,258],{"class":138},[128,117137,99332],{"class":266},[128,117139,270],{"class":134},[128,117141,253],{"class":138},[128,117143,409],{"class":166},[128,117145,117146],{"class":138},",), ",[128,117148,96870],{"class":266},[128,117150,270],{"class":134},[128,117152,117153],{"class":138},"np.float32)\n",[19,117155,117156,117157,117160],{},"表示动作是 2 维数组，每个值都在 ",[114,117158,117159],{},"[-1, 1]"," 范围内。",[106,117162,117164],{"className":122,"code":117163,"language":124,"meta":112,"style":112},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[114,117165,117166],{"__ignoreMap":112},[128,117167,117168,117170,117173,117175,117177,117179,117181,117184,117186,117188,117190,117192,117194,117196,117198,117200,117202,117204],{"class":130,"line":131},[128,117169,1970],{"class":166},[128,117171,117172],{"class":138},".observation_space ",[128,117174,270],{"class":134},[128,117176,117116],{"class":138},[128,117178,117119],{"class":266},[128,117180,117122],{"class":134},[128,117182,117183],{"class":138},"np.inf, ",[128,117185,117129],{"class":266},[128,117187,270],{"class":134},[128,117189,117183],{"class":138},[128,117191,99332],{"class":266},[128,117193,270],{"class":134},[128,117195,253],{"class":138},[128,117197,4196],{"class":166},[128,117199,117146],{"class":138},[128,117201,96870],{"class":266},[128,117203,270],{"class":134},[128,117205,117153],{"class":138},[19,117207,117208],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[72,117210,117212],{"id":117211},"frame_skip-是什么","frame_skip 是什么",[106,117214,117216],{"className":122,"code":117215,"language":124,"meta":112,"style":112},"self.frame_skip = 5\n",[114,117217,117218],{"__ignoreMap":112},[128,117219,117220,117222,117225,117227],{"class":130,"line":131},[128,117221,1970],{"class":166},[128,117223,117224],{"class":138},".frame_skip ",[128,117226,270],{"class":134},[128,117228,57808],{"class":166},[19,117230,117231,117232,117235,117236,117238],{},"表示外部调用一次 ",[114,117233,117234],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[114,117237,104582],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,117240,104620],{"id":104619},[106,117242,117244],{"className":122,"code":117243,"language":124,"meta":112,"style":112},"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",[114,117245,117246,117258,117264,117274,117285,117289,117293,117301,117306,117310,117314,117318,117322,117326,117330,117334,117339,117343,117347,117351,117356,117360,117364,117368,117372,117376,117380,117384,117388,117392,117396,117400,117404,117408,117426,117441,117445,117458,117468,117483,117500,117504,117525,117544,117569,117583,117587,117597,117609,117619,117623,117665,117703,117707,117717,117733,117748,117767,117774,117778,117791,117806,117821,117834,117853,117869,117873,117914,117929,117944,117948,117987,117998,118011,118015,118025,118034,118038,118048,118063,118081,118085,118096,118113,118126,118130,118140,118144,118155,118166,118170,118184,118198,118214,118218,118231,118248,118263,118270,118274,118278,118290,118300,118318,118330,118342,118346,118354,118370,118379,118388,118396,118438,118451,118455,118459,118477,118481,118485,118497],{"__ignoreMap":112},[128,117247,117248,117250,117253,117255],{"class":130,"line":131},[128,117249,135],{"class":134},[128,117251,117252],{"class":138}," gymnasium ",[128,117254,279],{"class":134},[128,117256,117257],{"class":138}," gym\n",[128,117259,117260,117262],{"class":130,"line":142},[128,117261,135],{"class":134},[128,117263,104668],{"class":138},[128,117265,117266,117268,117270,117272],{"class":130,"line":156},[128,117267,135],{"class":134},[128,117269,34851],{"class":138},[128,117271,279],{"class":134},[128,117273,34856],{"class":138},[128,117275,117276,117278,117280,117282],{"class":130,"line":163},[128,117277,145],{"class":134},[128,117279,117252],{"class":138},[128,117281,135],{"class":134},[128,117283,117284],{"class":138}," spaces\n",[128,117286,117287],{"class":130,"line":183},[128,117288,160],{"emptyLinePlaceholder":159},[128,117290,117291],{"class":130,"line":188},[128,117292,160],{"emptyLinePlaceholder":159},[128,117294,117295,117297,117299],{"class":130,"line":193},[128,117296,104681],{"class":166},[128,117298,170],{"class":134},[128,117300,104686],{"class":176},[128,117302,117303],{"class":130,"line":206},[128,117304,117305],{"class":176},"\u003Cmujoco model=\"gym_reacher\">\n",[128,117307,117308],{"class":130,"line":221},[128,117309,115095],{"class":176},[128,117311,117312],{"class":130,"line":230},[128,117313,160],{"emptyLinePlaceholder":159},[128,117315,117316],{"class":130,"line":235},[128,117317,104705],{"class":176},[128,117319,117320],{"class":130,"line":244},[128,117321,115113],{"class":176},[128,117323,117324],{"class":130,"line":287},[128,117325,160],{"emptyLinePlaceholder":159},[128,117327,117328],{"class":130,"line":301},[128,117329,115122],{"class":176},[128,117331,117332],{"class":130,"line":310},[128,117333,115127],{"class":176},[128,117335,117336],{"class":130,"line":323},[128,117337,117338],{"class":176},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[128,117340,117341],{"class":130,"line":330},[128,117342,160],{"emptyLinePlaceholder":159},[128,117344,117345],{"class":130,"line":335},[128,117346,115141],{"class":176},[128,117348,117349],{"class":130,"line":340},[128,117350,115146],{"class":176},[128,117352,117353],{"class":130,"line":351},[128,117354,117355],{"class":176},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[128,117357,117358],{"class":130,"line":384},[128,117359,115156],{"class":176},[128,117361,117362],{"class":130,"line":414},[128,117363,109801],{"class":176},[128,117365,117366],{"class":130,"line":419},[128,117367,104734],{"class":176},[128,117369,117370],{"class":130,"line":424},[128,117371,104739],{"class":176},[128,117373,117374],{"class":130,"line":434},[128,117375,160],{"emptyLinePlaceholder":159},[128,117377,117378],{"class":130,"line":447},[128,117379,109818],{"class":176},[128,117381,117382],{"class":130,"line":459},[128,117383,115181],{"class":176},[128,117385,117386],{"class":130,"line":471},[128,117387,115186],{"class":176},[128,117389,117390],{"class":130,"line":483},[128,117391,109828],{"class":176},[128,117393,117394],{"class":130,"line":495},[128,117395,104744],{"class":176},[128,117397,117398],{"class":130,"line":507},[128,117399,99067],{"class":176},[128,117401,117402],{"class":130,"line":519},[128,117403,160],{"emptyLinePlaceholder":159},[128,117405,117406],{"class":130,"line":524},[128,117407,160],{"emptyLinePlaceholder":159},[128,117409,117410,117412,117415,117417,117419,117421,117424],{"class":130,"line":529},[128,117411,1901],{"class":134},[128,117413,117414],{"class":199}," ReacherEnv",[128,117416,253],{"class":138},[128,117418,116897],{"class":199},[128,117420,4307],{"class":138},[128,117422,117423],{"class":199},"Env",[128,117425,34264],{"class":138},[128,117427,117428,117431,117433,117435,117438],{"class":130,"line":540},[128,117429,117430],{"class":138},"    metadata ",[128,117432,270],{"class":134},[128,117434,8013],{"class":138},[128,117436,117437],{"class":176},"\"render_modes\"",[128,117439,117440],{"class":138},": []}\n",[128,117442,117443],{"class":130,"line":555},[128,117444,160],{"emptyLinePlaceholder":159},[128,117446,117447,117449,117451,117454,117456],{"class":130,"line":576},[128,117448,1946],{"class":134},[128,117450,2108],{"class":166},[128,117452,117453],{"class":138},"(self) -> ",[128,117455,99055],{"class":166},[128,117457,241],{"class":138},[128,117459,117460,117462,117464,117466],{"class":130,"line":584},[128,117461,34292],{"class":166},[128,117463,20748],{"class":138},[128,117465,34303],{"class":166},[128,117467,5563],{"class":138},[128,117469,117470,117472,117475,117477,117479,117481],{"class":130,"line":593},[128,117471,2115],{"class":166},[128,117473,117474],{"class":138},".model ",[128,117476,270],{"class":134},[128,117478,104779],{"class":138},[128,117480,104681],{"class":166},[128,117482,180],{"class":138},[128,117484,117485,117487,117490,117492,117495,117497],{"class":130,"line":598},[128,117486,2115],{"class":166},[128,117488,117489],{"class":138},".data ",[128,117491,270],{"class":134},[128,117493,117494],{"class":138}," mujoco.MjData(",[128,117496,1970],{"class":166},[128,117498,117499],{"class":138},".model)\n",[128,117501,117502],{"class":130,"line":603},[128,117503,160],{"emptyLinePlaceholder":159},[128,117505,117506,117508,117511,117513,117516,117518,117521,117523],{"class":130,"line":614},[128,117507,2115],{"class":166},[128,117509,117510],{"class":138},".tip_site_id ",[128,117512,270],{"class":134},[128,117514,117515],{"class":138}," mujoco.mj_name2id(",[128,117517,1970],{"class":166},[128,117519,117520],{"class":138},".model, mujoco.mjtObj.mjOBJ_SITE, ",[128,117522,114893],{"class":176},[128,117524,180],{"class":138},[128,117526,117527,117529,117532,117534,117536,117538,117540,117542],{"class":130,"line":625},[128,117528,2115],{"class":166},[128,117530,117531],{"class":138},".target_site_id ",[128,117533,270],{"class":134},[128,117535,117515],{"class":138},[128,117537,1970],{"class":166},[128,117539,117520],{"class":138},[128,117541,115316],{"class":176},[128,117543,180],{"class":138},[128,117545,117546,117548,117550,117552,117554,117556,117559,117561,117563,117565,117567],{"class":130,"line":633},[128,117547,558],{"class":134},[128,117549,2148],{"class":166},[128,117551,117510],{"class":138},[128,117553,4657],{"class":134},[128,117555,7659],{"class":166},[128,117557,117558],{"class":134}," or",[128,117560,2148],{"class":166},[128,117562,117531],{"class":138},[128,117564,4657],{"class":134},[128,117566,7659],{"class":166},[128,117568,241],{"class":138},[128,117570,117571,117574,117576,117578,117581],{"class":130,"line":649},[128,117572,117573],{"class":134},"            raise",[128,117575,106798],{"class":166},[128,117577,253],{"class":138},[128,117579,117580],{"class":176},"\"required sites not found\"",[128,117582,180],{"class":138},[128,117584,117585],{"class":130,"line":660},[128,117586,160],{"emptyLinePlaceholder":159},[128,117588,117589,117591,117593,117595],{"class":130,"line":673},[128,117590,2115],{"class":166},[128,117592,117224],{"class":138},[128,117594,270],{"class":134},[128,117596,57808],{"class":166},[128,117598,117599,117601,117604,117606],{"class":130,"line":678},[128,117600,2115],{"class":166},[128,117602,117603],{"class":138},".max_steps ",[128,117605,270],{"class":134},[128,117607,117608],{"class":166}," 200\n",[128,117610,117611,117613,117615,117617],{"class":130,"line":683},[128,117612,2115],{"class":166},[128,117614,117063],{"class":138},[128,117616,270],{"class":134},[128,117618,50718],{"class":166},[128,117620,117621],{"class":130,"line":693},[128,117622,160],{"emptyLinePlaceholder":159},[128,117624,117625,117627,117629,117631,117633,117635,117637,117639,117641,117643,117645,117647,117649,117651,117653,117655,117657,117659,117661,117663],{"class":130,"line":702},[128,117626,2115],{"class":166},[128,117628,117111],{"class":138},[128,117630,270],{"class":134},[128,117632,117116],{"class":138},[128,117634,117119],{"class":266},[128,117636,117122],{"class":134},[128,117638,105766],{"class":166},[128,117640,258],{"class":138},[128,117642,117129],{"class":266},[128,117644,270],{"class":134},[128,117646,105766],{"class":166},[128,117648,258],{"class":138},[128,117650,99332],{"class":266},[128,117652,270],{"class":134},[128,117654,253],{"class":138},[128,117656,409],{"class":166},[128,117658,117146],{"class":138},[128,117660,96870],{"class":266},[128,117662,270],{"class":134},[128,117664,117153],{"class":138},[128,117666,117667,117669,117671,117673,117675,117677,117679,117681,117683,117685,117687,117689,117691,117693,117695,117697,117699,117701],{"class":130,"line":709},[128,117668,2115],{"class":166},[128,117670,117172],{"class":138},[128,117672,270],{"class":134},[128,117674,117116],{"class":138},[128,117676,117119],{"class":266},[128,117678,117122],{"class":134},[128,117680,117183],{"class":138},[128,117682,117129],{"class":266},[128,117684,270],{"class":134},[128,117686,117183],{"class":138},[128,117688,99332],{"class":266},[128,117690,270],{"class":134},[128,117692,253],{"class":138},[128,117694,4196],{"class":166},[128,117696,117146],{"class":138},[128,117698,96870],{"class":266},[128,117700,270],{"class":134},[128,117702,117153],{"class":138},[128,117704,117705],{"class":130,"line":723},[128,117706,160],{"emptyLinePlaceholder":159},[128,117708,117709,117711,117714],{"class":130,"line":732},[128,117710,1946],{"class":134},[128,117712,117713],{"class":199}," _get_obs",[128,117715,117716],{"class":138},"(self) -> np.ndarray:\n",[128,117718,117719,117721,117723,117725,117728,117730],{"class":130,"line":744},[128,117720,115494],{"class":138},[128,117722,270],{"class":134},[128,117724,2148],{"class":166},[128,117726,117727],{"class":138},".data.site_xpos[",[128,117729,1970],{"class":166},[128,117731,117732],{"class":138},".tip_site_id].copy()\n",[128,117734,117735,117737,117739,117741,117743,117745],{"class":130,"line":749},[128,117736,115507],{"class":138},[128,117738,270],{"class":134},[128,117740,2148],{"class":166},[128,117742,117727],{"class":138},[128,117744,1970],{"class":166},[128,117746,117747],{"class":138},".target_site_id].copy()\n",[128,117749,117750,117752,117754,117757,117759,117762,117764],{"class":130,"line":754},[128,117751,113539],{"class":138},[128,117753,270],{"class":134},[128,117755,117756],{"class":138}," np.concatenate([",[128,117758,1970],{"class":166},[128,117760,117761],{"class":138},".data.qpos.copy(), ",[128,117763,1970],{"class":166},[128,117765,117766],{"class":138},".data.qvel.copy(), tip, target])\n",[128,117768,117769,117771],{"class":130,"line":764},[128,117770,224],{"class":134},[128,117772,117773],{"class":138}," obs.astype(np.float32)\n",[128,117775,117776],{"class":130,"line":782},[128,117777,160],{"emptyLinePlaceholder":159},[128,117779,117780,117782,117785,117787,117789],{"class":130,"line":787},[128,117781,1946],{"class":134},[128,117783,117784],{"class":199}," _get_reward",[128,117786,117453],{"class":138},[128,117788,3798],{"class":166},[128,117790,241],{"class":138},[128,117792,117793,117795,117797,117799,117801,117803],{"class":130,"line":795},[128,117794,115494],{"class":138},[128,117796,270],{"class":134},[128,117798,2148],{"class":166},[128,117800,117727],{"class":138},[128,117802,1970],{"class":166},[128,117804,117805],{"class":138},".tip_site_id]\n",[128,117807,117808,117810,117812,117814,117816,117818],{"class":130,"line":807},[128,117809,115507],{"class":138},[128,117811,270],{"class":134},[128,117813,2148],{"class":166},[128,117815,117727],{"class":138},[128,117817,1970],{"class":166},[128,117819,117820],{"class":138},".target_site_id]\n",[128,117822,117823,117826,117828,117830,117832],{"class":130,"line":813},[128,117824,117825],{"class":138},"        dist ",[128,117827,270],{"class":134},[128,117829,114958],{"class":138},[128,117831,4281],{"class":134},[128,117833,114963],{"class":138},[128,117835,117836,117839,117841,117843,117845,117848,117850],{"class":130,"line":818},[128,117837,117838],{"class":138},"        control_cost ",[128,117840,270],{"class":134},[128,117842,115394],{"class":166},[128,117844,10075],{"class":134},[128,117846,117847],{"class":138}," np.sum(np.square(",[128,117849,1970],{"class":166},[128,117851,117852],{"class":138},".data.ctrl))\n",[128,117854,117855,117857,117859,117861,117863,117865,117867],{"class":130,"line":835},[128,117856,224],{"class":134},[128,117858,714],{"class":166},[128,117860,253],{"class":138},[128,117862,4281],{"class":134},[128,117864,114953],{"class":138},[128,117866,4281],{"class":134},[128,117868,115416],{"class":138},[128,117870,117871],{"class":130,"line":851},[128,117872,160],{"emptyLinePlaceholder":159},[128,117874,117875,117877,117880,117883,117885,117888,117890,117892,117894,117896,117898,117901,117904,117906,117908,117910,117912],{"class":130,"line":867},[128,117876,1946],{"class":134},[128,117878,117879],{"class":199}," reset",[128,117881,117882],{"class":138},"(self, ",[128,117884,4205],{"class":134},[128,117886,117887],{"class":138},", seed: ",[128,117889,3763],{"class":166},[128,117891,28596],{"class":134},[128,117893,1000],{"class":166},[128,117895,170],{"class":134},[128,117897,1000],{"class":166},[128,117899,117900],{"class":138},", options: ",[128,117902,117903],{"class":166},"dict",[128,117905,28596],{"class":134},[128,117907,1000],{"class":166},[128,117909,170],{"class":134},[128,117911,1000],{"class":166},[128,117913,34264],{"class":138},[128,117915,117916,117918,117921,117924,117926],{"class":130,"line":872},[128,117917,34292],{"class":166},[128,117919,117920],{"class":138},"().reset(",[128,117922,117923],{"class":266},"seed",[128,117925,270],{"class":134},[128,117927,117928],{"class":138},"seed)\n",[128,117930,117931,117934,117936,117939,117941],{"class":130,"line":878},[128,117932,117933],{"class":138},"        mujoco.mj_resetData(",[128,117935,1970],{"class":166},[128,117937,117938],{"class":138},".model, ",[128,117940,1970],{"class":166},[128,117942,117943],{"class":138},".data)\n",[128,117945,117946],{"class":130,"line":887},[128,117947,160],{"emptyLinePlaceholder":159},[128,117949,117950,117952,117955,117957,117959,117962,117964,117966,117968,117970,117972,117974,117976,117978,117980,117982,117984],{"class":130,"line":896},[128,117951,2115],{"class":166},[128,117953,117954],{"class":138},".data.qpos[:] ",[128,117956,270],{"class":134},[128,117958,2148],{"class":166},[128,117960,117961],{"class":138},".np_random.uniform(",[128,117963,117119],{"class":266},[128,117965,117122],{"class":134},[128,117967,89582],{"class":166},[128,117969,258],{"class":138},[128,117971,117129],{"class":266},[128,117973,270],{"class":134},[128,117975,89582],{"class":166},[128,117977,258],{"class":138},[128,117979,34965],{"class":266},[128,117981,270],{"class":134},[128,117983,1970],{"class":166},[128,117985,117986],{"class":138},".model.nq)\n",[128,117988,117989,117991,117994,117996],{"class":130,"line":905},[128,117990,2115],{"class":166},[128,117992,117993],{"class":138},".data.qvel[:] ",[128,117995,270],{"class":134},[128,117997,108124],{"class":166},[128,117999,118000,118003,118005,118007,118009],{"class":130,"line":914},[128,118001,118002],{"class":138},"        mujoco.mj_forward(",[128,118004,1970],{"class":166},[128,118006,117938],{"class":138},[128,118008,1970],{"class":166},[128,118010,117943],{"class":138},[128,118012,118013],{"class":130,"line":920},[128,118014,160],{"emptyLinePlaceholder":159},[128,118016,118017,118019,118021,118023],{"class":130,"line":926},[128,118018,2115],{"class":166},[128,118020,117063],{"class":138},[128,118022,270],{"class":134},[128,118024,50718],{"class":166},[128,118026,118027,118029,118031],{"class":130,"line":938},[128,118028,224],{"class":134},[128,118030,2148],{"class":166},[128,118032,118033],{"class":138},"._get_obs(), {}\n",[128,118035,118036],{"class":130,"line":943},[128,118037,160],{"emptyLinePlaceholder":159},[128,118039,118040,118042,118045],{"class":130,"line":948},[128,118041,1946],{"class":134},[128,118043,118044],{"class":199}," step",[128,118046,118047],{"class":138},"(self, action):\n",[128,118049,118050,118052,118054,118057,118059,118061],{"class":130,"line":958},[128,118051,113579],{"class":138},[128,118053,270],{"class":134},[128,118055,118056],{"class":138}," np.asarray(action, ",[128,118058,96870],{"class":266},[128,118060,270],{"class":134},[128,118062,117153],{"class":138},[128,118064,118065,118067,118069,118071,118073,118076,118078],{"class":130,"line":974},[128,118066,113579],{"class":138},[128,118068,270],{"class":134},[128,118070,110809],{"class":138},[128,118072,1970],{"class":166},[128,118074,118075],{"class":138},".action_space.low, ",[128,118077,1970],{"class":166},[128,118079,118080],{"class":138},".action_space.high)\n",[128,118082,118083],{"class":130,"line":985},[128,118084,160],{"emptyLinePlaceholder":159},[128,118086,118087,118089,118092,118094],{"class":130,"line":990},[128,118088,2115],{"class":166},[128,118090,118091],{"class":138},".data.ctrl[:] ",[128,118093,270],{"class":134},[128,118095,110832],{"class":138},[128,118097,118098,118100,118102,118104,118106,118108,118110],{"class":130,"line":1005},[128,118099,2141],{"class":134},[128,118101,104868],{"class":138},[128,118103,549],{"class":134},[128,118105,35910],{"class":166},[128,118107,253],{"class":138},[128,118109,1970],{"class":166},[128,118111,118112],{"class":138},".frame_skip):\n",[128,118114,118115,118118,118120,118122,118124],{"class":130,"line":1017},[128,118116,118117],{"class":138},"            mujoco.mj_step(",[128,118119,1970],{"class":166},[128,118121,117938],{"class":138},[128,118123,1970],{"class":166},[128,118125,117943],{"class":138},[128,118127,118128],{"class":130,"line":1022},[128,118129,160],{"emptyLinePlaceholder":159},[128,118131,118132,118134,118136,118138],{"class":130,"line":1027},[128,118133,2115],{"class":166},[128,118135,117063],{"class":138},[128,118137,13023],{"class":134},[128,118139,59079],{"class":166},[128,118141,118142],{"class":130,"line":1033},[128,118143,160],{"emptyLinePlaceholder":159},[128,118145,118146,118148,118150,118152],{"class":130,"line":1038},[128,118147,113539],{"class":138},[128,118149,270],{"class":134},[128,118151,2148],{"class":166},[128,118153,118154],{"class":138},"._get_obs()\n",[128,118156,118157,118159,118161,118163],{"class":130,"line":1050},[128,118158,113644],{"class":138},[128,118160,270],{"class":134},[128,118162,2148],{"class":166},[128,118164,118165],{"class":138},"._get_reward()\n",[128,118167,118168],{"class":130,"line":1055},[128,118169,160],{"emptyLinePlaceholder":159},[128,118171,118172,118174,118176,118178,118180,118182],{"class":130,"line":1060},[128,118173,115494],{"class":138},[128,118175,270],{"class":134},[128,118177,2148],{"class":166},[128,118179,117727],{"class":138},[128,118181,1970],{"class":166},[128,118183,117805],{"class":138},[128,118185,118186,118188,118190,118192,118194,118196],{"class":130,"line":1070},[128,118187,115507],{"class":138},[128,118189,270],{"class":134},[128,118191,2148],{"class":166},[128,118193,117727],{"class":138},[128,118195,1970],{"class":166},[128,118197,117820],{"class":138},[128,118199,118200,118202,118204,118206,118209,118211],{"class":130,"line":1086},[128,118201,117825],{"class":138},[128,118203,270],{"class":134},[128,118205,714],{"class":166},[128,118207,118208],{"class":138},"(np.linalg.norm(tip ",[128,118210,4281],{"class":134},[128,118212,118213],{"class":138}," target))\n",[128,118215,118216],{"class":130,"line":1095},[128,118217,160],{"emptyLinePlaceholder":159},[128,118219,118220,118223,118225,118227,118229],{"class":130,"line":1100},[128,118221,118222],{"class":138},"        terminated ",[128,118224,270],{"class":134},[128,118226,117046],{"class":138},[128,118228,4657],{"class":134},[128,118230,117051],{"class":166},[128,118232,118233,118236,118238,118240,118242,118244,118246],{"class":130,"line":1113},[128,118234,118235],{"class":138},"        truncated ",[128,118237,270],{"class":134},[128,118239,2148],{"class":166},[128,118241,117063],{"class":138},[128,118243,5308],{"class":134},[128,118245,2148],{"class":166},[128,118247,117070],{"class":138},[128,118249,118250,118253,118255,118257,118260],{"class":130,"line":1124},[128,118251,118252],{"class":138},"        info ",[128,118254,270],{"class":134},[128,118256,8013],{"class":138},[128,118258,118259],{"class":176},"\"distance\"",[128,118261,118262],{"class":138},": dist}\n",[128,118264,118265,118267],{"class":130,"line":1129},[128,118266,224],{"class":134},[128,118268,118269],{"class":138}," obs, reward, terminated, truncated, info\n",[128,118271,118272],{"class":130,"line":1134},[128,118273,160],{"emptyLinePlaceholder":159},[128,118275,118276],{"class":130,"line":1150},[128,118277,160],{"emptyLinePlaceholder":159},[128,118279,118280,118282,118284,118286,118288],{"class":130,"line":1164},[128,118281,196],{"class":134},[128,118283,1575],{"class":199},[128,118285,104765],{"class":138},[128,118287,99055],{"class":166},[128,118289,241],{"class":138},[128,118291,118292,118295,118297],{"class":130,"line":1178},[128,118293,118294],{"class":138},"    env ",[128,118296,270],{"class":134},[128,118298,118299],{"class":138}," ReacherEnv()\n",[128,118301,118302,118305,118307,118310,118312,118314,118316],{"class":130,"line":1183},[128,118303,118304],{"class":138},"    obs, info ",[128,118306,270],{"class":134},[128,118308,118309],{"class":138}," env.reset(",[128,118311,117923],{"class":266},[128,118313,270],{"class":134},[128,118315,2452],{"class":166},[128,118317,180],{"class":138},[128,118319,118320,118322,118324,118327],{"class":130,"line":1199},[128,118321,437],{"class":166},[128,118323,253],{"class":138},[128,118325,118326],{"class":176},"\"initial obs shape:\"",[128,118328,118329],{"class":138},", obs.shape)\n",[128,118331,118332,118334,118336,118339],{"class":130,"line":1214},[128,118333,437],{"class":166},[128,118335,253],{"class":138},[128,118337,118338],{"class":176},"\"initial info:\"",[128,118340,118341],{"class":138},", info)\n",[128,118343,118344],{"class":130,"line":1229},[128,118345,160],{"emptyLinePlaceholder":159},[128,118347,118348,118350,118352],{"class":130,"line":1234},[128,118349,113510],{"class":138},[128,118351,270],{"class":134},[128,118353,108124],{"class":166},[128,118355,118356,118358,118360,118362,118364,118366,118368],{"class":130,"line":1239},[128,118357,543],{"class":134},[128,118359,35085],{"class":138},[128,118361,549],{"class":134},[128,118363,35910],{"class":166},[128,118365,253],{"class":138},[128,118367,4449],{"class":166},[128,118369,34264],{"class":138},[128,118371,118372,118374,118376],{"class":130,"line":1251},[128,118373,113579],{"class":138},[128,118375,270],{"class":134},[128,118377,118378],{"class":138}," env.action_space.sample()\n",[128,118380,118381,118384,118386],{"class":130,"line":1256},[128,118382,118383],{"class":138},"        obs, reward, terminated, truncated, info ",[128,118385,270],{"class":134},[128,118387,116772],{"class":138},[128,118389,118390,118392,118394],{"class":130,"line":1261},[128,118391,113654],{"class":138},[128,118393,13023],{"class":134},[128,118395,113659],{"class":138},[128,118397,118398,118400,118402,118404,118406,118409,118411,118413,118416,118418,118420,118423,118425,118427,118430,118432,118434,118436],{"class":130,"line":1271},[128,118399,313],{"class":166},[128,118401,253],{"class":138},[128,118403,113688],{"class":176},[128,118405,113691],{"class":138},[128,118407,118408],{"class":176},"\"reward:\"",[128,118410,258],{"class":138},[128,118412,35485],{"class":166},[128,118414,118415],{"class":138},"(reward, ",[128,118417,3827],{"class":166},[128,118419,113702],{"class":138},[128,118421,118422],{"class":176},"\"distance:\"",[128,118424,258],{"class":138},[128,118426,35485],{"class":166},[128,118428,118429],{"class":138},"(info[",[128,118431,118259],{"class":176},[128,118433,115559],{"class":138},[128,118435,3827],{"class":166},[128,118437,3034],{"class":138},[128,118439,118440,118442,118445,118448],{"class":130,"line":1287},[128,118441,558],{"class":134},[128,118443,118444],{"class":138}," terminated ",[128,118446,118447],{"class":134},"or",[128,118449,118450],{"class":138}," truncated:\n",[128,118452,118453],{"class":130,"line":1296},[128,118454,1764],{"class":134},[128,118456,118457],{"class":130,"line":1301},[128,118458,160],{"emptyLinePlaceholder":159},[128,118460,118461,118463,118465,118467,118469,118471,118473,118475],{"class":130,"line":1314},[128,118462,437],{"class":166},[128,118464,253],{"class":138},[128,118466,113733],{"class":176},[128,118468,258],{"class":138},[128,118470,35485],{"class":166},[128,118472,113740],{"class":138},[128,118474,3827],{"class":166},[128,118476,3034],{"class":138},[128,118478,118479],{"class":130,"line":1325},[128,118480,160],{"emptyLinePlaceholder":159},[128,118482,118483],{"class":130,"line":1330},[128,118484,160],{"emptyLinePlaceholder":159},[128,118486,118487,118489,118491,118493,118495],{"class":130,"line":1335},[128,118488,1800],{"class":134},[128,118490,1803],{"class":166},[128,118492,1806],{"class":134},[128,118494,1809],{"class":176},[128,118496,241],{"class":138},[128,118498,118499],{"class":130,"line":1341},[128,118500,1817],{"class":138},[19,118502,106933],{},[106,118504,118506],{"className":27309,"code":118505,"language":27311,"meta":112,"style":112},"touch ch8_gym_env.py\n",[114,118507,118508],{"__ignoreMap":112},[128,118509,118510,118512],{"class":130,"line":131},[128,118511,104650],{"class":199},[128,118513,118514],{"class":176}," ch8_gym_env.py\n",[19,118516,113801],{},[106,118518,118520],{"className":27309,"code":118519,"language":27311,"meta":112,"style":112},"python ch8_gym_env.py\n",[114,118521,118522],{"__ignoreMap":112},[128,118523,118524,118526],{"class":130,"line":131},[128,118525,124],{"class":199},[128,118527,118514],{"class":176},[72,118529,104936],{"id":104936},[19,118531,118532],{},"继承 Gymnasium 环境：",[106,118534,118536],{"className":122,"code":118535,"language":124,"meta":112,"style":112},"class ReacherEnv(gym.Env):\n",[114,118537,118538],{"__ignoreMap":112},[128,118539,118540,118542,118544,118546,118548,118550,118552],{"class":130,"line":131},[128,118541,1901],{"class":134},[128,118543,117414],{"class":199},[128,118545,253],{"class":138},[128,118547,116897],{"class":199},[128,118549,4307],{"class":138},[128,118551,117423],{"class":199},[128,118553,34264],{"class":138},[19,118555,118556],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,118558,118559],{},"初始化模型：",[106,118561,118563],{"className":122,"code":118562,"language":124,"meta":112,"style":112},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[114,118564,118565,118579],{"__ignoreMap":112},[128,118566,118567,118569,118571,118573,118575,118577],{"class":130,"line":131},[128,118568,1970],{"class":166},[128,118570,117474],{"class":138},[128,118572,270],{"class":134},[128,118574,104779],{"class":138},[128,118576,104681],{"class":166},[128,118578,180],{"class":138},[128,118580,118581,118583,118585,118587,118589,118591],{"class":130,"line":142},[128,118582,1970],{"class":166},[128,118584,117489],{"class":138},[128,118586,270],{"class":134},[128,118588,117494],{"class":138},[128,118590,1970],{"class":166},[128,118592,117499],{"class":138},[19,118594,118595,118596,118598],{},"这和前面章节一样，只是现在放到了类的 ",[114,118597,34303],{}," 里。",[19,118600,118601],{},"缓存 site ID：",[106,118603,118605],{"className":122,"code":118604,"language":124,"meta":112,"style":112},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[114,118606,118607,118621],{"__ignoreMap":112},[128,118608,118609,118611,118613,118615,118617,118619],{"class":130,"line":131},[128,118610,1970],{"class":166},[128,118612,117510],{"class":138},[128,118614,270],{"class":134},[128,118616,117515],{"class":138},[128,118618,92924],{"class":166},[128,118620,180],{"class":138},[128,118622,118623,118625,118627,118629,118631,118633],{"class":130,"line":142},[128,118624,1970],{"class":166},[128,118626,117531],{"class":138},[128,118628,270],{"class":134},[128,118630,117515],{"class":138},[128,118632,92924],{"class":166},[128,118634,180],{"class":138},[19,118636,118637],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,118639,118640],{},"reset：",[106,118642,118644],{"className":122,"code":118643,"language":124,"meta":112,"style":112},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[114,118645,118646],{"__ignoreMap":112},[128,118647,118648,118650,118652,118654,118656,118658,118660,118662,118664,118666,118668,118670,118672,118674,118676,118678,118680],{"class":130,"line":131},[128,118649,196],{"class":134},[128,118651,117879],{"class":199},[128,118653,117882],{"class":138},[128,118655,4205],{"class":134},[128,118657,117887],{"class":138},[128,118659,3763],{"class":166},[128,118661,28596],{"class":134},[128,118663,1000],{"class":166},[128,118665,170],{"class":134},[128,118667,1000],{"class":166},[128,118669,117900],{"class":138},[128,118671,117903],{"class":166},[128,118673,28596],{"class":134},[128,118675,1000],{"class":166},[128,118677,170],{"class":134},[128,118679,1000],{"class":166},[128,118681,34264],{"class":138},[19,118683,118684,118686],{},[114,118685,73431],{}," 做四件事：",[26,118688,118689,118692,118695,118698],{},[29,118690,118691],{},"设置随机种子。",[29,118693,118694],{},"重置 MuJoCo data。",[29,118696,118697],{},"随机初始化关节角。",[29,118699,118700],{},"返回初始观测和 info。",[19,118702,118703],{},"step：",[106,118705,118707],{"className":122,"code":118706,"language":124,"meta":112,"style":112},"def step(self, action):\n",[114,118708,118709],{"__ignoreMap":112},[128,118710,118711,118713,118715],{"class":130,"line":131},[128,118712,196],{"class":134},[128,118714,118044],{"class":199},[128,118716,118047],{"class":138},[19,118718,118719,118721],{},[114,118720,110497],{}," 做六件事：",[26,118723,118724,118727,118733,118736,118739,118742],{},[29,118725,118726],{},"检查并裁剪 action。",[29,118728,118729,118730,1842],{},"写入 ",[114,118731,118732],{},"self.data.ctrl",[29,118734,118735],{},"连续推进若干个 MuJoCo 物理步。",[29,118737,118738],{},"计算新观测。",[29,118740,118741],{},"计算奖励和结束条件。",[29,118743,118744],{},"返回 Gymnasium 标准五元组。",[72,118746,105071],{"id":105071},[106,118748,118750],{"className":122,"code":118749,"language":124,"meta":112,"style":112},"import gymnasium as gym\n",[114,118751,118752],{"__ignoreMap":112},[128,118753,118754,118756,118758,118760],{"class":130,"line":131},[128,118755,135],{"class":134},[128,118757,117252],{"class":138},[128,118759,279],{"class":134},[128,118761,117257],{"class":138},[19,118763,118764,118765,118767,118768,118771],{},"导入 Gymnasium，并起别名 ",[114,118766,116897],{},"。后面写 ",[114,118769,118770],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[106,118773,118775],{"className":122,"code":118774,"language":124,"meta":112,"style":112},"from gymnasium import spaces\n",[114,118776,118777],{"__ignoreMap":112},[128,118778,118779,118781,118783,118785],{"class":130,"line":131},[128,118780,145],{"class":134},[128,118782,117252],{"class":138},[128,118784,135],{"class":134},[128,118786,117284],{"class":138},[19,118788,118789,118790,118793],{},"导入空间定义工具。",[114,118791,118792],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[106,118795,118796],{"className":122,"code":118535,"language":124,"meta":112,"style":112},[114,118797,118798],{"__ignoreMap":112},[128,118799,118800,118802,118804,118806,118808,118810,118812],{"class":130,"line":131},[128,118801,1901],{"class":134},[128,118803,117414],{"class":199},[128,118805,253],{"class":138},[128,118807,116897],{"class":199},[128,118809,4307],{"class":138},[128,118811,117423],{"class":199},[128,118813,34264],{"class":138},[19,118815,118816,118817,118820,118821,118823,118824,3330,118826,118828],{},"定义一个类，名字叫 ",[114,118818,118819],{},"ReacherEnv","。括号里的 ",[114,118822,118770],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[114,118825,73431],{},[114,118827,110497],{}," 这两个核心方法。",[106,118830,118832],{"className":122,"code":118831,"language":124,"meta":112,"style":112},"metadata = {\"render_modes\": []}\n",[114,118833,118834],{"__ignoreMap":112},[128,118835,118836,118839,118841,118843,118845],{"class":130,"line":131},[128,118837,118838],{"class":138},"metadata ",[128,118840,270],{"class":134},[128,118842,8013],{"class":138},[128,118844,117437],{"class":176},[128,118846,117440],{"class":138},[19,118848,118849],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[106,118851,118853],{"className":122,"code":118852,"language":124,"meta":112,"style":112},"def __init__(self) -> None:\n",[114,118854,118855],{"__ignoreMap":112},[128,118856,118857,118859,118861,118863,118865],{"class":130,"line":131},[128,118858,196],{"class":134},[128,118860,2108],{"class":166},[128,118862,117453],{"class":138},[128,118864,99055],{"class":166},[128,118866,241],{"class":138},[19,118868,118869,118871,118872,1842],{},[114,118870,34303],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[114,118873,118874],{},"env = ReacherEnv()",[106,118876,118878],{"className":122,"code":118877,"language":124,"meta":112,"style":112},"super().__init__()\n",[114,118879,118880],{"__ignoreMap":112},[128,118881,118882,118885,118887,118889],{"class":130,"line":131},[128,118883,118884],{"class":166},"super",[128,118886,20748],{"class":138},[128,118888,34303],{"class":166},[128,118890,5563],{"class":138},[19,118892,118893,118894,118896],{},"调用父类 ",[114,118895,118770],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[106,118898,118899],{"className":122,"code":118562,"language":124,"meta":112,"style":112},[114,118900,118901,118915],{"__ignoreMap":112},[128,118902,118903,118905,118907,118909,118911,118913],{"class":130,"line":131},[128,118904,1970],{"class":166},[128,118906,117474],{"class":138},[128,118908,270],{"class":134},[128,118910,104779],{"class":138},[128,118912,104681],{"class":166},[128,118914,180],{"class":138},[128,118916,118917,118919,118921,118923,118925,118927],{"class":130,"line":142},[128,118918,1970],{"class":166},[128,118920,117489],{"class":138},[128,118922,270],{"class":134},[128,118924,117494],{"class":138},[128,118926,1970],{"class":166},[128,118928,117499],{"class":138},[19,118930,118931,118932,118934,118935,3330,118938,118941],{},"把 MuJoCo 模型和状态保存到 ",[114,118933,1970],{}," 上。",[114,118936,118937],{},"self.model",[114,118939,118940],{},"self.data"," 表示这个环境对象自己的模型和状态。",[106,118943,118944],{"className":122,"code":118604,"language":124,"meta":112,"style":112},[114,118945,118946,118960],{"__ignoreMap":112},[128,118947,118948,118950,118952,118954,118956,118958],{"class":130,"line":131},[128,118949,1970],{"class":166},[128,118951,117510],{"class":138},[128,118953,270],{"class":134},[128,118955,117515],{"class":138},[128,118957,92924],{"class":166},[128,118959,180],{"class":138},[128,118961,118962,118964,118966,118968,118970,118972],{"class":130,"line":142},[128,118963,1970],{"class":166},[128,118965,117531],{"class":138},[128,118967,270],{"class":134},[128,118969,117515],{"class":138},[128,118971,92924],{"class":166},[128,118973,180],{"class":138},[19,118975,118976,118977,3330,118980,118983],{},"提前查好 tip 和 target 的 site ID。这样 ",[114,118978,118979],{},"_get_obs",[114,118981,118982],{},"_get_reward"," 里就不用每次按名字查找。",[106,118985,118987],{"className":122,"code":118986,"language":124,"meta":112,"style":112},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[114,118988,118989,118999,119009],{"__ignoreMap":112},[128,118990,118991,118993,118995,118997],{"class":130,"line":131},[128,118992,1970],{"class":166},[128,118994,117224],{"class":138},[128,118996,270],{"class":134},[128,118998,57808],{"class":166},[128,119000,119001,119003,119005,119007],{"class":130,"line":142},[128,119002,1970],{"class":166},[128,119004,117603],{"class":138},[128,119006,270],{"class":134},[128,119008,117608],{"class":166},[128,119010,119011,119013,119015,119017],{"class":130,"line":156},[128,119012,1970],{"class":166},[128,119014,117063],{"class":138},[128,119016,270],{"class":134},[128,119018,50718],{"class":166},[19,119020,119021,119024,119025,119028,119029,119032],{},[114,119022,119023],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[114,119026,119027],{},"max_steps"," 是一个 episode 最多运行多少步。",[114,119030,119031],{},"steps"," 记录当前 episode 已经走了多少步。",[106,119034,119035],{"className":122,"code":117102,"language":124,"meta":112,"style":112},[114,119036,119037],{"__ignoreMap":112},[128,119038,119039,119041,119043,119045,119047,119049,119051,119053,119055,119057,119059,119061,119063,119065,119067,119069,119071,119073,119075,119077],{"class":130,"line":131},[128,119040,1970],{"class":166},[128,119042,117111],{"class":138},[128,119044,270],{"class":134},[128,119046,117116],{"class":138},[128,119048,117119],{"class":266},[128,119050,117122],{"class":134},[128,119052,105766],{"class":166},[128,119054,258],{"class":138},[128,119056,117129],{"class":266},[128,119058,270],{"class":134},[128,119060,105766],{"class":166},[128,119062,258],{"class":138},[128,119064,99332],{"class":266},[128,119066,270],{"class":134},[128,119068,253],{"class":138},[128,119070,409],{"class":166},[128,119072,117146],{"class":138},[128,119074,96870],{"class":266},[128,119076,270],{"class":134},[128,119078,117153],{"class":138},[19,119080,119081,119082,119085,119086,3330,119089,119092],{},"定义动作空间。",[114,119083,119084],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[114,119087,119088],{},"low=-1.0",[114,119090,119091],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[106,119094,119095],{"className":122,"code":117163,"language":124,"meta":112,"style":112},[114,119096,119097],{"__ignoreMap":112},[128,119098,119099,119101,119103,119105,119107,119109,119111,119113,119115,119117,119119,119121,119123,119125,119127,119129,119131,119133],{"class":130,"line":131},[128,119100,1970],{"class":166},[128,119102,117172],{"class":138},[128,119104,270],{"class":134},[128,119106,117116],{"class":138},[128,119108,117119],{"class":266},[128,119110,117122],{"class":134},[128,119112,117183],{"class":138},[128,119114,117129],{"class":266},[128,119116,270],{"class":134},[128,119118,117183],{"class":138},[128,119120,99332],{"class":266},[128,119122,270],{"class":134},[128,119124,253],{"class":138},[128,119126,4196],{"class":166},[128,119128,117146],{"class":138},[128,119130,96870],{"class":266},[128,119132,270],{"class":134},[128,119134,117153],{"class":138},[19,119136,119137,119138,119141,119142,119145],{},"定义观测空间。",[114,119139,119140],{},"shape=(10,)"," 表示观测是 10 个数。",[114,119143,119144],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[106,119147,119149],{"className":122,"code":119148,"language":124,"meta":112,"style":112},"def _get_obs(self) -> np.ndarray:\n",[114,119150,119151],{"__ignoreMap":112},[128,119152,119153,119155,119157],{"class":130,"line":131},[128,119154,196],{"class":134},[128,119156,117713],{"class":199},[128,119158,117716],{"class":138},[19,119160,119161,119162,119164],{},"定义内部函数，用来生成观测。函数名前面的 ",[114,119163,4737],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[106,119166,119168],{"className":122,"code":119167,"language":124,"meta":112,"style":112},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[114,119169,119170,119184],{"__ignoreMap":112},[128,119171,119172,119174,119176,119178,119180,119182],{"class":130,"line":131},[128,119173,114925],{"class":138},[128,119175,270],{"class":134},[128,119177,2148],{"class":166},[128,119179,117727],{"class":138},[128,119181,1970],{"class":166},[128,119183,117732],{"class":138},[128,119185,119186,119188,119190,119192,119194,119196],{"class":130,"line":142},[128,119187,114935],{"class":138},[128,119189,270],{"class":134},[128,119191,2148],{"class":166},[128,119193,117727],{"class":138},[128,119195,1970],{"class":166},[128,119197,117747],{"class":138},[19,119199,119200],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[106,119202,119204],{"className":122,"code":119203,"language":124,"meta":112,"style":112},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[114,119205,119206,119222],{"__ignoreMap":112},[128,119207,119208,119210,119212,119214,119216,119218,119220],{"class":130,"line":131},[128,119209,114211],{"class":138},[128,119211,270],{"class":134},[128,119213,117756],{"class":138},[128,119215,1970],{"class":166},[128,119217,117761],{"class":138},[128,119219,1970],{"class":166},[128,119221,117766],{"class":138},[128,119223,119224,119226],{"class":130,"line":142},[128,119225,20533],{"class":134},[128,119227,117773],{"class":138},[19,119229,119230,119231,119234,119235,119237],{},"拼接观测，并转换成 ",[114,119232,119233],{},"float32","。很多强化学习库默认使用 ",[114,119236,119233],{},"，所以这里主动转换。",[106,119239,119240],{"className":122,"code":118643,"language":124,"meta":112,"style":112},[114,119241,119242],{"__ignoreMap":112},[128,119243,119244,119246,119248,119250,119252,119254,119256,119258,119260,119262,119264,119266,119268,119270,119272,119274,119276],{"class":130,"line":131},[128,119245,196],{"class":134},[128,119247,117879],{"class":199},[128,119249,117882],{"class":138},[128,119251,4205],{"class":134},[128,119253,117887],{"class":138},[128,119255,3763],{"class":166},[128,119257,28596],{"class":134},[128,119259,1000],{"class":166},[128,119261,170],{"class":134},[128,119263,1000],{"class":166},[128,119265,117900],{"class":138},[128,119267,117903],{"class":166},[128,119269,28596],{"class":134},[128,119271,1000],{"class":166},[128,119273,170],{"class":134},[128,119275,1000],{"class":166},[128,119277,34264],{"class":138},[19,119279,119280,119281,119283,119284,119287],{},"定义 reset。",[114,119282,117923],{}," 用来控制随机数，保证实验可以复现。",[114,119285,119286],{},"options"," 用来接收额外配置，本章暂时不用。",[106,119289,119291],{"className":122,"code":119290,"language":124,"meta":112,"style":112},"super().reset(seed=seed)\n",[114,119292,119293],{"__ignoreMap":112},[128,119294,119295,119297,119299,119301,119303],{"class":130,"line":131},[128,119296,118884],{"class":166},[128,119298,117920],{"class":138},[128,119300,117923],{"class":266},[128,119302,270],{"class":134},[128,119304,117928],{"class":138},[19,119306,119307,119308,119311],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[114,119309,119310],{},"self.np_random"," 生成可复现的随机数。",[106,119313,119315],{"className":122,"code":119314,"language":124,"meta":112,"style":112},"mujoco.mj_resetData(self.model, self.data)\n",[114,119316,119317],{"__ignoreMap":112},[128,119318,119319,119322,119324,119326,119328],{"class":130,"line":131},[128,119320,119321],{"class":138},"mujoco.mj_resetData(",[128,119323,1970],{"class":166},[128,119325,117938],{"class":138},[128,119327,1970],{"class":166},[128,119329,117943],{"class":138},[19,119331,119332],{},"把 MuJoCo 状态重置到默认状态。",[106,119334,119336],{"className":122,"code":119335,"language":124,"meta":112,"style":112},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[114,119337,119338],{"__ignoreMap":112},[128,119339,119340,119342,119344,119346,119348,119350,119352,119354,119356,119358,119360,119362,119364,119366,119368,119370,119372],{"class":130,"line":131},[128,119341,1970],{"class":166},[128,119343,117954],{"class":138},[128,119345,270],{"class":134},[128,119347,2148],{"class":166},[128,119349,117961],{"class":138},[128,119351,117119],{"class":266},[128,119353,117122],{"class":134},[128,119355,89582],{"class":166},[128,119357,258],{"class":138},[128,119359,117129],{"class":266},[128,119361,270],{"class":134},[128,119363,89582],{"class":166},[128,119365,258],{"class":138},[128,119367,34965],{"class":266},[128,119369,270],{"class":134},[128,119371,1970],{"class":166},[128,119373,117986],{"class":138},[19,119375,118697,119376,119379,119380,119383,119384,119386],{},[114,119377,119378],{},"[:]"," 表示修改整个数组。",[114,119381,119382],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[114,119385,105513],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[106,119388,119390],{"className":122,"code":119389,"language":124,"meta":112,"style":112},"self.data.qvel[:] = 0.0\n",[114,119391,119392],{"__ignoreMap":112},[128,119393,119394,119396,119398,119400],{"class":130,"line":131},[128,119395,1970],{"class":166},[128,119397,117993],{"class":138},[128,119399,270],{"class":134},[128,119401,108124],{"class":166},[19,119403,119404],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[106,119406,119408],{"className":122,"code":119407,"language":124,"meta":112,"style":112},"self.steps = 0\nreturn self._get_obs(), {}\n",[114,119409,119410,119420],{"__ignoreMap":112},[128,119411,119412,119414,119416,119418],{"class":130,"line":131},[128,119413,1970],{"class":166},[128,119415,117063],{"class":138},[128,119417,270],{"class":134},[128,119419,50718],{"class":166},[128,119421,119422,119424,119426],{"class":130,"line":142},[128,119423,20533],{"class":134},[128,119425,2148],{"class":166},[128,119427,118033],{"class":138},[19,119429,119430],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[106,119432,119433],{"className":122,"code":118706,"language":124,"meta":112,"style":112},[114,119434,119435],{"__ignoreMap":112},[128,119436,119437,119439,119441],{"class":130,"line":131},[128,119438,196],{"class":134},[128,119440,118044],{"class":199},[128,119442,118047],{"class":138},[19,119444,119445],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[106,119447,119449],{"className":122,"code":119448,"language":124,"meta":112,"style":112},"action = np.asarray(action, dtype=np.float32)\n",[114,119450,119451],{"__ignoreMap":112},[128,119452,119453,119455,119457,119459,119461,119463],{"class":130,"line":131},[128,119454,110804],{"class":138},[128,119456,270],{"class":134},[128,119458,118056],{"class":138},[128,119460,96870],{"class":266},[128,119462,270],{"class":134},[128,119464,117153],{"class":138},[19,119466,119467,119468,1842],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[114,119469,119233],{},[106,119471,119473],{"className":122,"code":119472,"language":124,"meta":112,"style":112},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[114,119474,119475],{"__ignoreMap":112},[128,119476,119477,119479,119481,119483,119485,119487,119489],{"class":130,"line":131},[128,119478,110804],{"class":138},[128,119480,270],{"class":134},[128,119482,110809],{"class":138},[128,119484,1970],{"class":166},[128,119486,118075],{"class":138},[128,119488,1970],{"class":166},[128,119490,118080],{"class":138},[19,119492,119493],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[106,119495,119497],{"className":122,"code":119496,"language":124,"meta":112,"style":112},"self.data.ctrl[:] = action\n",[114,119498,119499],{"__ignoreMap":112},[128,119500,119501,119503,119505,119507],{"class":130,"line":131},[128,119502,1970],{"class":166},[128,119504,118091],{"class":138},[128,119506,270],{"class":134},[128,119508,110832],{"class":138},[19,119510,119511],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[106,119513,119515],{"className":122,"code":119514,"language":124,"meta":112,"style":112},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[114,119516,119517,119533],{"__ignoreMap":112},[128,119518,119519,119521,119523,119525,119527,119529,119531],{"class":130,"line":131},[128,119520,2404],{"class":134},[128,119522,104868],{"class":138},[128,119524,549],{"class":134},[128,119526,35910],{"class":166},[128,119528,253],{"class":138},[128,119530,1970],{"class":166},[128,119532,118112],{"class":138},[128,119534,119535,119538,119540,119542,119544],{"class":130,"line":142},[128,119536,119537],{"class":138},"    mujoco.mj_step(",[128,119539,1970],{"class":166},[128,119541,117938],{"class":138},[128,119543,1970],{"class":166},[128,119545,117943],{"class":138},[19,119547,119548,119549,119552,119553,119555,119556,1842],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[114,119550,119551],{},"frame_skip=5","，所以外部调用一次 ",[114,119554,117234],{},"，内部实际执行 5 次 ",[114,119557,104582],{},[106,119559,119561],{"className":122,"code":119560,"language":124,"meta":112,"style":112},"self.steps += 1\n",[114,119562,119563],{"__ignoreMap":112},[128,119564,119565,119567,119569,119571],{"class":130,"line":131},[128,119566,1970],{"class":166},[128,119568,117063],{"class":138},[128,119570,13023],{"class":134},[128,119572,59079],{"class":166},[19,119574,119575],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[106,119577,119579],{"className":122,"code":119578,"language":124,"meta":112,"style":112},"obs = self._get_obs()\nreward = self._get_reward()\n",[114,119580,119581,119591],{"__ignoreMap":112},[128,119582,119583,119585,119587,119589],{"class":130,"line":131},[128,119584,114211],{"class":138},[128,119586,270],{"class":134},[128,119588,2148],{"class":166},[128,119590,118154],{"class":138},[128,119592,119593,119595,119597,119599],{"class":130,"line":142},[128,119594,114362],{"class":138},[128,119596,270],{"class":134},[128,119598,2148],{"class":166},[128,119600,118165],{"class":138},[19,119602,119603],{},"计算新的观测和奖励。",[106,119605,119607],{"className":122,"code":119606,"language":124,"meta":112,"style":112},"dist = float(np.linalg.norm(tip - target))\n",[114,119608,119609],{"__ignoreMap":112},[128,119610,119611,119613,119615,119617,119619,119621],{"class":130,"line":131},[128,119612,114953],{"class":138},[128,119614,270],{"class":134},[128,119616,714],{"class":166},[128,119618,118208],{"class":138},[128,119620,4281],{"class":134},[128,119622,118213],{"class":138},[19,119624,119625],{},"计算末端到目标的距离，并转换成 Python float。",[106,119627,119628],{"className":122,"code":117034,"language":124,"meta":112,"style":112},[114,119629,119630,119642],{"__ignoreMap":112},[128,119631,119632,119634,119636,119638,119640],{"class":130,"line":131},[128,119633,117041],{"class":138},[128,119635,270],{"class":134},[128,119637,117046],{"class":138},[128,119639,4657],{"class":134},[128,119641,117051],{"class":166},[128,119643,119644,119646,119648,119650,119652,119654,119656],{"class":130,"line":142},[128,119645,117056],{"class":138},[128,119647,270],{"class":134},[128,119649,2148],{"class":166},[128,119651,117063],{"class":138},[128,119653,5308],{"class":134},[128,119655,2148],{"class":166},[128,119657,117070],{"class":138},[19,119659,119660],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[106,119662,119664],{"className":122,"code":119663,"language":124,"meta":112,"style":112},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[114,119665,119666,119679],{"__ignoreMap":112},[128,119667,119668,119671,119673,119675,119677],{"class":130,"line":131},[128,119669,119670],{"class":138},"info ",[128,119672,270],{"class":134},[128,119674,8013],{"class":138},[128,119676,118259],{"class":176},[128,119678,118262],{"class":138},[128,119680,119681,119683],{"class":130,"line":142},[128,119682,20533],{"class":134},[128,119684,118269],{"class":138},[19,119686,119687,119690],{},[114,119688,119689],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[106,119692,119694],{"className":122,"code":119693,"language":124,"meta":112,"style":112},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[114,119695,119696,119705],{"__ignoreMap":112},[128,119697,119698,119701,119703],{"class":130,"line":131},[128,119699,119700],{"class":138},"env ",[128,119702,270],{"class":134},[128,119704,118299],{"class":138},[128,119706,119707,119709,119711,119713,119715,119717,119719],{"class":130,"line":142},[128,119708,116757],{"class":138},[128,119710,270],{"class":134},[128,119712,118309],{"class":138},[128,119714,117923],{"class":266},[128,119716,270],{"class":134},[128,119718,2452],{"class":166},[128,119720,180],{"class":138},[19,119722,119723,119724,119727],{},"创建环境并重置。",[114,119725,119726],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[106,119729,119731],{"className":122,"code":119730,"language":124,"meta":112,"style":112},"action = env.action_space.sample()\n",[114,119732,119733],{"__ignoreMap":112},[128,119734,119735,119737,119739],{"class":130,"line":131},[128,119736,110804],{"class":138},[128,119738,270],{"class":134},[128,119740,118378],{"class":138},[19,119742,119743],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,119745,105679],{"id":105678},[19,119747,108847],{},[106,119749,119752],{"className":119750,"code":119751,"language":111,"meta":112},[109],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[114,119753,119751],{"__ignoreMap":112},[19,119755,119756],{},"这个环境已经具备强化学习环境的基本结构。",[19,119758,119759],{},"主函数里使用随机动作：",[106,119761,119762],{"className":122,"code":119730,"language":124,"meta":112,"style":112},[114,119763,119764],{"__ignoreMap":112},[128,119765,119766,119768,119770],{"class":130,"line":131},[128,119767,110804],{"class":138},[128,119769,270],{"class":134},[128,119771,118378],{"class":138},[19,119773,119774],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,119776,105711],{"id":105710},[26,119778,119779,119782,119788,119797,119806,119815,119821],{},[29,119780,119781],{},"运行程序。",[29,119783,119784,119785,1842],{},"确认 ",[114,119786,119787],{},"obs.shape == (10,)",[29,119789,114538,119790,119793,119794,1842],{},[114,119791,119792],{},"env.action_space","，应类似 ",[114,119795,119796],{},"Box(-1.0, 1.0, (2,), float32)",[29,119798,108948,119799,119802,119803,1842],{},[114,119800,119801],{},"self.max_steps = 10","，确认环境会更快 ",[114,119804,119805],{},"truncated=True",[29,119807,105774,119808,105777,119811,119814],{},[114,119809,119810],{},"terminated = dist \u003C 0.05",[114,119812,119813],{},"dist \u003C 0.2","，观察是否更容易结束。",[29,119816,105774,119817,119820],{},[114,119818,119819],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[29,119822,119823,119824,119826,119827,119830],{},"在 ",[114,119825,119689],{}," 里加入 ",[114,119828,119829],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,119832,105816],{"id":105815},[72,119834,119836],{"id":119835},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,119838,119839,119840,119842],{},"Gymnasium 的 ",[114,119841,110497],{}," 返回 5 个值:",[106,119844,119846],{"className":122,"code":119845,"language":124,"meta":112,"style":112},"obs, reward, terminated, truncated, info\n",[114,119847,119848],{"__ignoreMap":112},[128,119849,119850],{"class":130,"line":131},[128,119851,119845],{"class":138},[19,119853,119854],{},"不是旧 Gym 的 4 个值。",[72,119856,119858,119861],{"id":119857},"datactrl-action-维度错误",[114,119859,119860],{},"data.ctrl[:] = action"," 维度错误",[19,119863,105886],{},[106,119865,119867],{"className":122,"code":119866,"language":124,"meta":112,"style":112},"print(self.model.nu)\nprint(action.shape)\n",[114,119868,119869,119880],{"__ignoreMap":112},[128,119870,119871,119873,119875,119877],{"class":130,"line":131},[128,119872,2469],{"class":166},[128,119874,253],{"class":138},[128,119876,1970],{"class":166},[128,119878,119879],{"class":138},".model.nu)\n",[128,119881,119882,119884],{"class":130,"line":142},[128,119883,2469],{"class":166},[128,119885,119886],{"class":138},"(action.shape)\n",[19,119888,119889],{},"两者必须匹配。",[72,119891,119893],{"id":119892},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,119895,105825],{},[106,119897,119899],{"className":122,"code":119898,"language":124,"meta":112,"style":112},"mujoco.mj_forward(self.model, self.data)\n",[114,119900,119901],{"__ignoreMap":112},[128,119902,119903,119906,119908,119910,119912],{"class":130,"line":131},[128,119904,119905],{"class":138},"mujoco.mj_forward(",[128,119907,1970],{"class":166},[128,119909,117938],{"class":138},[128,119911,1970],{"class":166},[128,119913,117943],{"class":138},[72,119915,119917,119919],{"id":119916},"observation_space-维度和-obs-不一致",[114,119918,116957],{}," 维度和 obs 不一致",[19,119921,105938],{},[106,119923,119925],{"className":122,"code":119924,"language":124,"meta":112,"style":112},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[114,119926,119927,119937,119944],{"__ignoreMap":112},[128,119928,119929,119931,119933,119935],{"class":130,"line":131},[128,119930,114211],{"class":138},[128,119932,270],{"class":134},[128,119934,2148],{"class":166},[128,119936,118154],{"class":138},[128,119938,119939,119941],{"class":130,"line":142},[128,119940,2469],{"class":166},[128,119942,119943],{"class":138},"(obs.shape)\n",[128,119945,119946,119948,119950,119952],{"class":130,"line":156},[128,119947,2469],{"class":166},[128,119949,253],{"class":138},[128,119951,1970],{"class":166},[128,119953,119954],{"class":138},".observation_space.shape)\n",[19,119956,119957],{},"两者必须一致。本章观测是：",[106,119959,119962],{"className":119960,"code":119961,"language":111,"meta":112},[109],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[114,119963,119961],{"__ignoreMap":112},[72,119965,119967],{"id":119966},"action-超过范围","action 超过范围",[19,119969,119970],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[106,119972,119973],{"className":122,"code":119472,"language":124,"meta":112,"style":112},[114,119974,119975],{"__ignoreMap":112},[128,119976,119977,119979,119981,119983,119985,119987,119989],{"class":130,"line":131},[128,119978,110804],{"class":138},[128,119980,270],{"class":134},[128,119982,110809],{"class":138},[128,119984,1970],{"class":166},[128,119986,118075],{"class":138},[128,119988,1970],{"class":166},[128,119990,118080],{"class":138},[19,119992,119993,119994,1842],{},"这能避免无效动作直接写入 ",[114,119995,104443],{},[72,119997,119999],{"id":119998},"忘记返回-info","忘记返回 info",[19,120001,119839,120002,3330,120004,120006],{},[114,120003,73431],{},[114,120005,110497],{}," 都会返回 info：",[106,120008,120009],{"className":122,"code":116750,"language":124,"meta":112,"style":112},[114,120010,120011,120019],{"__ignoreMap":112},[128,120012,120013,120015,120017],{"class":130,"line":131},[128,120014,116757],{"class":138},[128,120016,270],{"class":134},[128,120018,116762],{"class":138},[128,120020,120021,120023,120025],{"class":130,"line":142},[128,120022,116767],{"class":138},[128,120024,270],{"class":134},[128,120026,116772],{"class":138},[19,120028,120029,120030,1842],{},"即使暂时没有额外信息，也返回 ",[114,120031,35925],{},[14,120033,120035],{"id":120034},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,120037,120038],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[26,120040,120041,120044,120047,120050,120053,120056],{},[29,120042,120043],{},"更稳定的 reward。",[29,120045,120046],{},"合理的 episode 长度。",[29,120048,120049],{},"可重复的随机目标采样。",[29,120051,120052],{},"render 接口。",[29,120054,120055],{},"环境注册代码。",[29,120057,120058],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,120060,120061],{},"如果只是自己写训练循环，最小形式是：",[106,120063,120065],{"className":122,"code":120064,"language":124,"meta":112,"style":112},"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",[114,120066,120067,120075,120091,120095,120111,120120,120129,120139],{"__ignoreMap":112},[128,120068,120069,120071,120073],{"class":130,"line":131},[128,120070,119700],{"class":138},[128,120072,270],{"class":134},[128,120074,118299],{"class":138},[128,120076,120077,120079,120081,120083,120085,120087,120089],{"class":130,"line":142},[128,120078,116757],{"class":138},[128,120080,270],{"class":134},[128,120082,118309],{"class":138},[128,120084,117923],{"class":266},[128,120086,270],{"class":134},[128,120088,2452],{"class":166},[128,120090,180],{"class":138},[128,120092,120093],{"class":130,"line":156},[128,120094,160],{"emptyLinePlaceholder":159},[128,120096,120097,120099,120101,120103,120105,120107,120109],{"class":130,"line":163},[128,120098,2404],{"class":134},[128,120100,104868],{"class":138},[128,120102,549],{"class":134},[128,120104,35910],{"class":166},[128,120106,253],{"class":138},[128,120108,9967],{"class":166},[128,120110,34264],{"class":138},[128,120112,120113,120116,120118],{"class":130,"line":183},[128,120114,120115],{"class":138},"    action ",[128,120117,270],{"class":134},[128,120119,118378],{"class":138},[128,120121,120122,120125,120127],{"class":130,"line":188},[128,120123,120124],{"class":138},"    obs, reward, terminated, truncated, info ",[128,120126,270],{"class":134},[128,120128,116772],{"class":138},[128,120130,120131,120133,120135,120137],{"class":130,"line":193},[128,120132,209],{"class":134},[128,120134,118444],{"class":138},[128,120136,118447],{"class":134},[128,120138,118450],{"class":138},[128,120140,120141,120144,120146],{"class":130,"line":206},[128,120142,120143],{"class":138},"        obs, info ",[128,120145,270],{"class":134},[128,120147,116762],{"class":138},[14,120149,120151],{"id":120150},"_9本章小结","9.本章小结",[19,120153,120154],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[106,120156,120159],{"className":120157,"code":120158,"language":111,"meta":112},[109],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[114,120160,120158],{"__ignoreMap":112},[19,120162,120163],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[3659,120165,120166],{},"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":112,"searchDepth":142,"depth":142,"links":120168},[120169,120170,120171,120178,120182,120183,120184,120194,120195],{"id":104014,"depth":142,"text":104015},{"id":104137,"depth":142,"text":104138},{"id":104411,"depth":142,"text":104412,"children":120172},[120173,120175,120177],{"id":116981,"depth":156,"text":120174},"terminated 和 truncated 的区别",{"id":117084,"depth":156,"text":120176},"observation_space 和 action_space",{"id":117211,"depth":156,"text":117212},{"id":104619,"depth":142,"text":104620,"children":120179},[120180,120181],{"id":104936,"depth":156,"text":104936},{"id":105071,"depth":156,"text":105071},{"id":105678,"depth":142,"text":105679},{"id":105710,"depth":142,"text":105711},{"id":105815,"depth":142,"text":105816,"children":120185},[120186,120187,120189,120190,120192,120193],{"id":119835,"depth":156,"text":119836},{"id":119857,"depth":156,"text":120188},"data.ctrl[:] = action 维度错误",{"id":119892,"depth":156,"text":119893},{"id":119916,"depth":156,"text":120191},"observation_space 维度和 obs 不一致",{"id":119966,"depth":156,"text":119967},{"id":119998,"depth":156,"text":119999},{"id":120034,"depth":142,"text":120035},{"id":120150,"depth":142,"text":120151},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":116734,"description":112},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":120202,"title":120203,"body":120204,"description":120627,"extension":3687,"meta":120628,"navigation":159,"path":120629,"seo":120630,"stem":120631,"__hash__":120632},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":120205,"toc":120617},[120206,120210,120213,120216,120236,120242,120248,120258,120261,120264,120284,120287,120291,120294,120300,120303,120317,120320,120323,120397,120400,120406,120409,120432,120435,120485,120488,120494,120497,120500,120503,120522,120525,120531,120534,120537,120540,120560,120563,120566,120569,120614],[10,120207,120209],{"id":120208},"mujoco-学习","MuJoCo 学习",[19,120211,120212],{},"初版",[19,120214,120215],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[26,120217,120218,120221,120224,120233],{},[29,120219,120220],{},"MuJoCo 模型文件在描述什么。",[29,120222,120223],{},"Python 代码怎样读取和推进仿真。",[29,120225,120226,3550,120228,3550,120230,120232],{},[114,120227,107393],{},[114,120229,107723],{},[114,120231,107726],{}," 这些数组为什么重要。",[29,120234,120235],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,120237,120238,120239,120241],{},"默认环境为 Fedora 44、Python >= 3.10、",[114,120240,104394],{}," 官方 Python bindings。",[19,120243,120244,120245,120247],{},"注意：本文禁止使用 ",[114,120246,104380],{},"。所有示例均使用：",[106,120249,120250],{"className":122,"code":104942,"language":124,"meta":112,"style":112},[114,120251,120252],{"__ignoreMap":112},[128,120253,120254,120256],{"class":130,"line":131},[128,120255,135],{"class":134},[128,120257,104668],{"class":138},[14,120259,120260],{"id":120260},"适合谁阅读",[19,120262,120263],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[26,120265,120266,120269,120272,120275],{},[29,120267,120268],{},"没学过 MuJoCo，只会一点 Python。",[29,120270,120271],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[29,120273,120274],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[29,120276,120277,120278,120280,120281,120283],{},"以前接触过 ",[114,120279,104380],{},"，现在想迁移到官方 ",[114,120282,104388],{}," Python bindings。",[19,120285,120286],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,120288,120290],{"id":120289},"mujoco-到底是什么","MuJoCo 到底是什么",[19,120292,120293],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[106,120295,120298],{"className":120296,"code":120297,"language":111,"meta":112},[109],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[114,120299,120297],{"__ignoreMap":112},[19,120301,120302],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[26,120304,120305,120308,120311,120314],{},[29,120306,120307],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[29,120309,120310],{},"快速测试控制算法，不必一开始就上真实机器人。",[29,120312,120313],{},"生成强化学习环境。",[29,120315,120316],{},"采集状态、动作、图像、奖励等训练数据。",[14,120318,120319],{"id":120319},"学习前的心智模型",[19,120321,120322],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[3891,120324,120325,120337],{},[3894,120326,120327],{},[3897,120328,120329,120332,120335],{},[3900,120330,120331],{"align":27223},"部分",[3900,120333,120334],{"align":27223},"负责什么",[3900,120336,24674],{"align":27223},[3938,120338,120339,120350,120362,120374,120386],{},[3897,120340,120341,120344,120347],{},[3943,120342,120343],{"align":27223},"MJCF XML",[3943,120345,120346],{"align":27223},"定义世界和机器人结构",[3943,120348,120349],{"align":27223},"地面、盒子、关节、电机、摄像头",[3897,120351,120352,120356,120359],{},[3943,120353,120354],{"align":27223},[114,120355,104077],{},[3943,120357,120358],{"align":27223},"编译后的静态模型",[3943,120360,120361],{"align":27223},"有几个关节、有几个电机、时间步长是多少",[3897,120363,120364,120368,120371],{},[3943,120365,120366],{"align":27223},[114,120367,104087],{},[3943,120369,120370],{"align":27223},"运行中的动态状态",[3943,120372,120373],{"align":27223},"当前时间、位置、速度、电机输入",[3897,120375,120376,120380,120383],{},[3943,120377,120378],{"align":27223},[114,120379,104582],{},[3943,120381,120382],{"align":27223},"推进一步物理仿真",[3943,120384,120385],{"align":27223},"根据重力、力、碰撞更新状态",[3897,120387,120388,120391,120394],{},[3943,120389,120390],{"align":27223},"Viewer \u002F Renderer",[3943,120392,120393],{"align":27223},"把仿真显示出来",[3943,120395,120396],{"align":27223},"打开窗口或保存图片",[19,120398,120399],{},"一句话总结：",[106,120401,120404],{"className":120402,"code":120403,"language":111,"meta":112},[109],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[114,120405,120403],{"__ignoreMap":112},[19,120407,120408],{},"参考来源：",[4752,120410,120411,120418,120425],{},[29,120412,120413,120414],{},"MuJoCo Python 官方文档：",[3989,120415,120416],{"href":120416,"rel":120417},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[27352],[29,120419,120420,120421],{},"MuJoCo XML Reference：",[3989,120422,120423],{"href":120423,"rel":120424},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[27352],[29,120426,120427,120428],{},"MuJoCo Overview：",[3989,120429,120430],{"href":120430,"rel":120431},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[27352],[14,120433,120434],{"id":120434},"章节目录",[26,120436,120437,120443,120449,120455,120461,120467,120473,120479],{},[29,120438,120439],{},[3989,120440,120442],{"href":120441},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[29,120444,120445],{},[3989,120446,120448],{"href":120447},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[29,120450,120451],{},[3989,120452,120454],{"href":120453},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[29,120456,120457],{},[3989,120458,120460],{"href":120459},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[29,120462,120463],{},[3989,120464,120466],{"href":120465},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[29,120468,120469],{},[3989,120470,120472],{"href":120471},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[29,120474,120475],{},[3989,120476,120478],{"href":120477},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[29,120480,120481],{},[3989,120482,120484],{"href":120483},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,120486,120487],{"id":120487},"推荐学习路线",[106,120489,120492],{"className":120490,"code":120491,"language":111,"meta":112},[109],"环境安装\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",[114,120493,120491],{"__ignoreMap":112},[19,120495,120496],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,120498,120499],{"id":120499},"建议的目录结构",[19,120501,120502],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[106,120504,120506],{"className":27309,"code":120505,"language":27311,"meta":112,"style":112},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[114,120507,120508,120516],{"__ignoreMap":112},[128,120509,120510,120512,120514],{"class":130,"line":131},[128,120511,104633],{"class":199},[128,120513,32700],{"class":166},[128,120515,104638],{"class":176},[128,120517,120518,120520],{"class":130,"line":142},[128,120519,104643],{"class":166},[128,120521,104638],{"class":176},[19,120523,120524],{},"每一章的代码都单独保存：",[106,120526,120529],{"className":120527,"code":120528,"language":111,"meta":112},[109],"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",[114,120530,120528],{"__ignoreMap":112},[19,120532,120533],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,120535,120536],{"id":120536},"学习方法",[19,120538,120539],{},"每章建议按这个顺序操作：",[26,120541,120542,120545,120548,120551,120554,120557],{},[29,120543,120544],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[29,120546,120547],{},"复制最小可运行代码，保存成指定文件。",[29,120549,120550],{},"运行代码，确认没有报错。",[29,120552,120553],{},"对照“运行结果说明”理解输出。",[29,120555,120556],{},"做“验证步骤”，主动改一两个参数。",[29,120558,120559],{},"遇到报错先看“常见错误与解决方案”。",[19,120561,120562],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,120564,120565],{"id":120565},"全局排错顺序",[19,120567,120568],{},"遇到问题时，按下面顺序查：",[26,120570,120571,120577,120583,120588,120591,120594,120601,120611],{},[29,120572,120573,120574],{},"Python 环境是否激活：",[114,120575,120576],{},"which python",[29,120578,120579,120580],{},"MuJoCo 是否能导入：",[114,120581,120582],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[29,120584,120585,120586],{},"是否误装了 ",[114,120587,104380],{},[29,120589,120590],{},"XML 标签是否闭合、属性是否拼写正确",[29,120592,120593],{},"actuator 引用的 joint 名字是否存在",[29,120595,120596,120598,120599],{},[114,120597,104443],{}," 的长度是否等于 ",[114,120600,105521],{},[29,120602,108948,120603,85912,120605,120607,120608],{},[114,120604,107393],{},[114,120606,107723],{}," 后是否调用了 ",[114,120609,120610],{},"mujoco.mj_forward",[29,120612,120613],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[3659,120615,120616],{},"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":112,"searchDepth":142,"depth":142,"links":120618},[120619,120620,120621,120622,120623,120624,120625,120626],{"id":120260,"depth":142,"text":120260},{"id":120289,"depth":142,"text":120290},{"id":120319,"depth":142,"text":120319},{"id":120434,"depth":142,"text":120434},{"id":120487,"depth":142,"text":120487},{"id":120499,"depth":142,"text":120499},{"id":120536,"depth":142,"text":120536},{"id":120565,"depth":142,"text":120565},"仿真搭建。",{"category":26865},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":120203,"description":120627},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":120634,"title":120635,"body":120636,"description":3686,"extension":3687,"meta":121091,"navigation":159,"path":121092,"seo":121093,"stem":121094,"__hash__":121095},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":120637,"toc":121089},[120638,120641,120644,120650,121086],[10,120639,120635],{"id":120640},"_1-最常用的基本操作更新",[19,120642,120643],{},"装linux系统教程：",[19,120645,120646],{},[3989,120647,120648],{"href":120648,"rel":120649},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[27352],[106,120651,120655],{"className":120652,"code":120653,"language":120654,"meta":112,"style":112},"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",[114,120656,120657,120662,120667,120676,120681,120690,120695,120715,120720,120731,120736,120745,120750,120778,120783,120802,120807,120826,120830,120835,120851,120855,120860,120890,120894,120899,120915,120919,120924,120939,120943,120948,120964,120968,120973,120985,120997,121001,121006,121023,121027,121032,121050,121054,121059,121068,121072,121077],{"__ignoreMap":112},[128,120658,120659],{"class":130,"line":131},[128,120660,120661],{"class":3814},"#更新相关的知识\n",[128,120663,120664],{"class":130,"line":142},[128,120665,120666],{"class":3814},"# 更新软件包列表（从服务器获取最新软件信息）\n",[128,120668,120669,120671,120674],{"class":130,"line":156},[128,120670,28064],{"class":199},[128,120672,120673],{"class":176}," apt",[128,120675,29727],{"class":176},[128,120677,120678],{"class":130,"line":163},[128,120679,120680],{"class":3814},"# 升级所有可更新的软件包（不删除旧包）\n",[128,120682,120683,120685,120687],{"class":130,"line":183},[128,120684,28064],{"class":199},[128,120686,120673],{"class":176},[128,120688,120689],{"class":176}," upgrade\n",[128,120691,120692],{"class":130,"line":188},[128,120693,120694],{"class":3814},"#更新和升级软件包\n",[128,120696,120697,120699,120701,120704,120706,120708,120710,120713],{"class":130,"line":193},[128,120698,28064],{"class":199},[128,120700,120673],{"class":176},[128,120702,120703],{"class":176}," update",[128,120705,29675],{"class":138},[128,120707,28064],{"class":199},[128,120709,120673],{"class":176},[128,120711,120712],{"class":176}," upgrade",[128,120714,104349],{"class":166},[128,120716,120717],{"class":130,"line":206},[128,120718,120719],{"class":3814},"#列出可更新的软件包及版本信息\n",[128,120721,120722,120725,120728],{"class":130,"line":221},[128,120723,120724],{"class":199},"apt",[128,120726,120727],{"class":176}," list",[128,120729,120730],{"class":166}," --upgradable\n",[128,120732,120733],{"class":130,"line":230},[128,120734,120735],{"class":3814},"#彻底升级（处理依赖关系，可能删除旧包）\n",[128,120737,120738,120740,120742],{"class":130,"line":235},[128,120739,28064],{"class":199},[128,120741,120673],{"class":176},[128,120743,120744],{"class":176}," full-upgrade\n",[128,120746,120747],{"class":130,"line":244},[128,120748,120749],{"class":3814},"#设置指定版本\n",[128,120751,120752,120754,120756,120758,120760,120763,120765,120767,120769,120771,120774,120776],{"class":130,"line":287},[128,120753,28064],{"class":199},[128,120755,120673],{"class":176},[128,120757,27321],{"class":176},[128,120759,32386],{"class":134},[128,120761,120762],{"class":176},"package_nam",[128,120764,3830],{"class":138},[128,120766,4705],{"class":134},[128,120768,270],{"class":176},[128,120770,4657],{"class":134},[128,120772,120773],{"class":176},"version_numbe",[128,120775,4419],{"class":138},[128,120777,54692],{"class":134},[128,120779,120780],{"class":130,"line":301},[128,120781,120782],{"class":3814},"#只安装软件包不升级\n",[128,120784,120785,120787,120789,120791,120793,120795,120797,120799],{"class":130,"line":310},[128,120786,28064],{"class":199},[128,120788,120673],{"class":176},[128,120790,27321],{"class":176},[128,120792,32386],{"class":134},[128,120794,120762],{"class":176},[128,120796,3830],{"class":138},[128,120798,4705],{"class":134},[128,120800,120801],{"class":166}," --no-upgrade\n",[128,120803,120804],{"class":130,"line":323},[128,120805,120806],{"class":3814},"#只升级，不存在就不安装\n",[128,120808,120809,120811,120813,120815,120817,120819,120821,120823],{"class":130,"line":330},[128,120810,28064],{"class":199},[128,120812,120673],{"class":176},[128,120814,27321],{"class":176},[128,120816,32386],{"class":134},[128,120818,120762],{"class":176},[128,120820,3830],{"class":138},[128,120822,4705],{"class":134},[128,120824,120825],{"class":166}," --only-upgrade\n",[128,120827,120828],{"class":130,"line":335},[128,120829,160],{"emptyLinePlaceholder":159},[128,120831,120832],{"class":130,"line":340},[128,120833,120834],{"class":3814},"#安装指定的软件命令\n",[128,120836,120837,120839,120841,120843,120845,120847,120849],{"class":130,"line":351},[128,120838,28064],{"class":199},[128,120840,120673],{"class":176},[128,120842,27321],{"class":176},[128,120844,32386],{"class":134},[128,120846,120762],{"class":176},[128,120848,3830],{"class":138},[128,120850,54692],{"class":134},[128,120852,120853],{"class":130,"line":384},[128,120854,160],{"emptyLinePlaceholder":159},[128,120856,120857],{"class":130,"line":414},[128,120858,120859],{"class":3814},"#安装多个软件包\n",[128,120861,120862,120864,120866,120868,120870,120873,120876,120878,120880,120883,120885,120887],{"class":130,"line":419},[128,120863,28064],{"class":199},[128,120865,120673],{"class":176},[128,120867,27321],{"class":176},[128,120869,32386],{"class":134},[128,120871,120872],{"class":176},"package_",[128,120874,120875],{"class":134},"1>",[128,120877,32386],{"class":134},[128,120879,120872],{"class":176},[128,120881,120882],{"class":134},"2>",[128,120884,32386],{"class":134},[128,120886,120872],{"class":176},[128,120888,120889],{"class":134},"3>\n",[128,120891,120892],{"class":130,"line":424},[128,120893,160],{"emptyLinePlaceholder":159},[128,120895,120896],{"class":130,"line":434},[128,120897,120898],{"class":3814},"#更新指定的软件命令\n",[128,120900,120901,120903,120905,120907,120909,120911,120913],{"class":130,"line":447},[128,120902,28064],{"class":199},[128,120904,120673],{"class":176},[128,120906,120703],{"class":176},[128,120908,32386],{"class":134},[128,120910,120762],{"class":176},[128,120912,3830],{"class":138},[128,120914,54692],{"class":134},[128,120916,120917],{"class":130,"line":459},[128,120918,160],{"emptyLinePlaceholder":159},[128,120920,120921],{"class":130,"line":471},[128,120922,120923],{"class":3814},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[128,120925,120926,120928,120931,120933,120935,120937],{"class":130,"line":483},[128,120927,120724],{"class":199},[128,120929,120930],{"class":176}," show",[128,120932,32386],{"class":134},[128,120934,120762],{"class":176},[128,120936,3830],{"class":138},[128,120938,54692],{"class":134},[128,120940,120941],{"class":130,"line":495},[128,120942,160],{"emptyLinePlaceholder":159},[128,120944,120945],{"class":130,"line":507},[128,120946,120947],{"class":3814},"#删除软件包命令\n",[128,120949,120950,120952,120954,120956,120958,120960,120962],{"class":130,"line":519},[128,120951,28064],{"class":199},[128,120953,120673],{"class":176},[128,120955,29564],{"class":176},[128,120957,32386],{"class":134},[128,120959,120762],{"class":176},[128,120961,3830],{"class":138},[128,120963,54692],{"class":134},[128,120965,120966],{"class":130,"line":524},[128,120967,160],{"emptyLinePlaceholder":159},[128,120969,120970],{"class":130,"line":529},[128,120971,120972],{"class":3814},"# 清理旧版本和缓存（释放磁盘空间）\n",[128,120974,120975,120977,120979,120982],{"class":130,"line":540},[128,120976,28064],{"class":199},[128,120978,120673],{"class":176},[128,120980,120981],{"class":176}," autoremove",[128,120983,120984],{"class":3814},"  # 删除不再需要的依赖和库文件\n",[128,120986,120987,120989,120991,120994],{"class":130,"line":555},[128,120988,28064],{"class":199},[128,120990,120673],{"class":176},[128,120992,120993],{"class":176}," clean",[128,120995,120996],{"class":3814},"       # 清理下载的缓存包\n",[128,120998,120999],{"class":130,"line":576},[128,121000,160],{"emptyLinePlaceholder":159},[128,121002,121003],{"class":130,"line":584},[128,121004,121005],{"class":3814},"#移除软件包及配置文件\n",[128,121007,121008,121010,121012,121015,121017,121019,121021],{"class":130,"line":593},[128,121009,28064],{"class":199},[128,121011,120673],{"class":176},[128,121013,121014],{"class":176}," purge",[128,121016,32386],{"class":134},[128,121018,120762],{"class":176},[128,121020,3830],{"class":138},[128,121022,54692],{"class":134},[128,121024,121025],{"class":130,"line":598},[128,121026,160],{"emptyLinePlaceholder":159},[128,121028,121029],{"class":130,"line":603},[128,121030,121031],{"class":3814},"#查找软件包命令\n",[128,121033,121034,121036,121038,121041,121043,121046,121048],{"class":130,"line":614},[128,121035,28064],{"class":199},[128,121037,120673],{"class":176},[128,121039,121040],{"class":176}," search",[128,121042,32386],{"class":134},[128,121044,121045],{"class":176},"keywor",[128,121047,4064],{"class":138},[128,121049,54692],{"class":134},[128,121051,121052],{"class":130,"line":625},[128,121053,160],{"emptyLinePlaceholder":159},[128,121055,121056],{"class":130,"line":633},[128,121057,121058],{"class":3814},"#列出所有已安装的包\n",[128,121060,121061,121063,121065],{"class":130,"line":649},[128,121062,120724],{"class":199},[128,121064,120727],{"class":176},[128,121066,121067],{"class":166}," --installed\n",[128,121069,121070],{"class":130,"line":660},[128,121071,160],{"emptyLinePlaceholder":159},[128,121073,121074],{"class":130,"line":673},[128,121075,121076],{"class":3814},"#列出所有已安装的包的版本信息\n",[128,121078,121079,121081,121083],{"class":130,"line":678},[128,121080,120724],{"class":199},[128,121082,120727],{"class":176},[128,121084,121085],{"class":166}," --all-versions\n",[3659,121087,121088],{},"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":112,"searchDepth":142,"depth":142,"links":121090},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":120635,"description":3686},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":121097,"title":121098,"body":121099,"description":3686,"extension":3687,"meta":121840,"navigation":159,"path":121841,"seo":121842,"stem":121843,"__hash__":121844},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":121100,"toc":121827},[121101,121104,121108,121111,121117,121121,121125,121131,121136,121141,121146,121151,121156,121159,121162,121165,121168,121172,121175,121180,121183,121188,121191,121196,121203,121206,121209,121212,121215,121218,121229,121233,121237,121242,121247,121251,121256,121260,121265,121269,121273,121278,121281,121326,121331,121335,121339,121344,121350,121355,121365,121370,121380,121385,121390,121417,121421,121424,121429,121432,121457,121461,121466,121469,121474,121479,121499,121504,121507,121522,121526,121579,121582,121587,121591,121594,121609,121612,121615,121620,121624,121628,121631,121635,121639,121642,121647,121652,121656,121663,121671,121674,121681,121686,121691,121694,121699,121706,121711,121718,121722,121724,121729,121733,121736,121739,121744,121747,121752,121755,121760,121765,121770,121774,121779,121783,121824],[10,121102,121098],{"id":121103},"_2-linux装机教程",[14,121105,121107],{"id":121106},"_21-实体机","2.1 实体机",[19,121109,121110],{},"使用清华源：（Ubuntu24.04）",[19,121112,121113],{},[3989,121114,121115],{"href":121115,"rel":121116},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[27352],[14,121118,121120],{"id":121119},"_22-普通虚拟机","2.2 普通虚拟机",[72,121122,121124],{"id":121123},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,121126,121127],{},[3989,121128,121129],{"href":121129,"rel":121130},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[27352],[19,121132,121133],{},[5074,121134],{"alt":112,"src":121135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,121137,121138],{},[5074,121139],{"alt":112,"src":121140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,121142,121143],{},[5074,121144],{"alt":112,"src":121145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,121147,121148],{},[5074,121149],{"alt":112,"src":121150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,121152,121153],{},[5074,121154],{"alt":112,"src":121155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,121157,121158],{},"内存4G（4096MB）；",[19,121160,121161],{},"CPU给4个核；",[19,121163,121164],{},"硬盘动态分配60G；",[19,121166,121167],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[72,121169,121171],{"id":121170},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,121173,121174],{},"按照1.1的步骤下载Ubuntu",[19,121176,121177],{},[5074,121178],{"alt":112,"src":121179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,121181,121182],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,121184,121185],{},[5074,121186],{"alt":112,"src":121187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,121189,121190],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,121192,121193],{},[5074,121194],{"alt":112,"src":121195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,121197,121198,121199,121202],{},"选择“正常安装”(找不到都用Alt+F7)， ",[3903,121200,121201],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,121204,121205],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,121207,121208],{},"将改动写入磁盘吗 继续",[19,121210,121211],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,121213,121214],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,121216,121217],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,121219,121220,121221,121224,121225,121228],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[3903,121222,121223],{},"除了"," 选不发送系统信息与不升级之外， ",[3903,121226,121227],{},"其它"," 都跳过或前进）",[72,121230,121232],{"id":121231},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[25485,121234,121236],{"id":121235},"_2231-全屏","2.2.3.1 全屏",[19,121238,121239],{},[5074,121240],{"alt":112,"src":121241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,121243,121244],{},[5074,121245],{"alt":112,"src":121246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[25485,121248,121250],{"id":121249},"_2232-文件交换","2.2.3.2 文件交换",[19,121252,121253],{},[5074,121254],{"alt":112,"src":121255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[25485,121257,121259],{"id":121258},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,121261,121262],{},[5074,121263],{"alt":112,"src":121264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,121266,121268],{"id":121267},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[72,121270,121272],{"id":121271},"_231-简介与优缺点","2.3.1 简介与优缺点",[26,121274,121275],{},[29,121276,121277],{},"什么情况下推荐？",[19,121279,121280],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[26,121282,121283],{"start":142},[29,121284,121285,121286],{},"优缺点：",[26,121287,121288,121318],{},[29,121289,121290,121291],{},"优点：",[26,121292,121293,121296,121303,121306,121309,121312,121315],{},[29,121294,121295],{},"WSL2是最好的Linux发行版;(bushi)",[29,121297,121298,121299,121302],{},"性能损耗极低。且比在Windows上跑深度性能 ",[3903,121300,121301],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[29,121304,121305],{},"非常方便调用USB设备，可以USB直通;",[29,121307,121308],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[29,121310,121311],{},"非常方便Win与WSL2互相传文件等协同操作;",[29,121313,121314],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[29,121316,121317],{},"非常方便使用Windows的VScode远程开发;",[29,121319,121320,121321],{},"缺点：",[26,121322,121323],{},[29,121324,121325],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,121327,121328],{},[5074,121329],{"alt":112,"src":121330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[72,121332,121334],{"id":121333},"_232-安装教程","2.3.2 安装教程",[25485,121336,121338],{"id":121337},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[26,121340,121341],{},[29,121342,121343],{},"方法一(图形界面)",[19,121345,121346,121347,28105],{},"用Win+R输入",[114,121348,121349],{},"appwiz.cpl",[19,121351,121352],{},[5074,121353],{"alt":112,"src":121354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,121356,121357,121358,121361,121362,29958],{},"点击OK进入 ",[3903,121359,121360],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[3903,121363,121364],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,121366,121367],{},[5074,121368],{"alt":112,"src":121369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,121371,121372,121373,3330,121376,121379],{},"选择 ",[3903,121374,121375],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[3903,121377,121378],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,121381,121382],{},[5074,121383],{"alt":112,"src":121384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[26,121386,121387],{"start":142},[29,121388,121389],{},"方法二(命令行)",[106,121391,121395],{"className":121392,"code":121393,"language":121394,"meta":112,"style":112},"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",[114,121396,121397,121402,121407,121412],{"__ignoreMap":112},[128,121398,121399],{"class":130,"line":131},[128,121400,121401],{},"# 开启 Linux 子系统\n",[128,121403,121404],{"class":130,"line":142},[128,121405,121406],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[128,121408,121409],{"class":130,"line":156},[128,121410,121411],{},"# 开启虚拟机平台\n",[128,121413,121414],{"class":130,"line":163},[128,121415,121416],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[25485,121418,121420],{"id":121419},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,121422,121423],{},"用管理员权限打开powershell",[19,121425,121426],{},[5074,121427],{"alt":112,"src":121428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,121430,121431],{},"升级WSL并设置默认版本为WSL2",[106,121433,121435],{"className":121392,"code":121434,"language":121394,"meta":112,"style":112},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[114,121436,121437,121442,121447,121452],{"__ignoreMap":112},[128,121438,121439],{"class":130,"line":131},[128,121440,121441],{},"# 更新 wsl\n",[128,121443,121444],{"class":130,"line":142},[128,121445,121446],{},"wsl --update\n",[128,121448,121449],{"class":130,"line":156},[128,121450,121451],{},"# 将 wsl 版本设置为 wsl2\n",[128,121453,121454],{"class":130,"line":163},[128,121455,121456],{},"wsl --set-default-version 2\n",[25485,121458,121460],{"id":121459},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[26,121462,121463],{},[29,121464,121465],{},"方式一(商店下载)",[19,121467,121468],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,121470,121471],{},[5074,121472],{"alt":112,"src":121473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[26,121475,121476],{"start":142},[29,121477,121478],{},"方式二(命令行安装)",[106,121480,121482],{"className":121392,"code":121481,"language":121394,"meta":112,"style":112},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[114,121483,121484,121489,121494],{"__ignoreMap":112},[128,121485,121486],{"class":130,"line":131},[128,121487,121488],{},"# 列出可安装的 Linux 版本\n",[128,121490,121491],{"class":130,"line":142},[128,121492,121493],{},"#（需要科学手段）\n",[128,121495,121496],{"class":130,"line":156},[128,121497,121498],{},"wsl --list --online\n",[19,121500,121501],{},[5074,121502],{"alt":112,"src":121503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,121505,121506],{},"选择对应发行版并安装",[106,121508,121510],{"className":121392,"code":121509,"language":121394,"meta":112,"style":112},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[114,121511,121512,121517],{"__ignoreMap":112},[128,121513,121514],{"class":130,"line":131},[128,121515,121516],{},"# Ubuntu安装完毕后需要重启系统\n",[128,121518,121519],{"class":130,"line":142},[128,121520,121521],{},"wsl --install -d Ubuntu-24.04\n",[25485,121523,121525],{"id":121524},"_2324-查看系统状态","2.3.2.4 查看系统状态",[106,121527,121529],{"className":121392,"code":121528,"language":121394,"meta":112,"style":112},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[114,121530,121531,121536,121541,121546,121551,121555,121559,121564,121569,121574],{"__ignoreMap":112},[128,121532,121533],{"class":130,"line":131},[128,121534,121535],{},"# 查看 wsl\n",[128,121537,121538],{"class":130,"line":142},[128,121539,121540],{},"wsl -l\n",[128,121542,121543],{"class":130,"line":156},[128,121544,121545],{},"# 查看 wsl 运行版本或模式\n",[128,121547,121548],{"class":130,"line":163},[128,121549,121550],{},"wsl -l -v\n",[128,121552,121553],{"class":130,"line":183},[128,121554,160],{"emptyLinePlaceholder":159},[128,121556,121557],{"class":130,"line":188},[128,121558,160],{"emptyLinePlaceholder":159},[128,121560,121561],{"class":130,"line":193},[128,121562,121563],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[128,121565,121566],{"class":130,"line":206},[128,121567,121568],{},"wsl --set-version \u003Cdistro> 2\n",[128,121570,121571],{"class":130,"line":221},[128,121572,121573],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[128,121575,121576],{"class":130,"line":230},[128,121577,121578],{},"wsl --unregister \u003Cdistro>\n",[19,121580,121581],{},"输出Version为2即正常",[19,121583,121584],{},[5074,121585],{"alt":112,"src":121586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[25485,121588,121590],{"id":121589},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,121592,121593],{},"直接在Powershell里输入wsl命令进入子系统",[106,121595,121597],{"className":121392,"code":121596,"language":121394,"meta":112,"style":112},"# 进入子系统\nwsl\n",[114,121598,121599,121604],{"__ignoreMap":112},[128,121600,121601],{"class":130,"line":131},[128,121602,121603],{},"# 进入子系统\n",[128,121605,121606],{"class":130,"line":142},[128,121607,121608],{},"wsl\n",[19,121610,121611],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,121613,121614],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,121616,121617],{},[5074,121618],{"alt":112,"src":121619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[72,121621,121623],{"id":121622},"_233-配置各种环境","2.3.3 配置各种环境",[25485,121625,121627],{"id":121626},"_2331-换源","2.3.3.1 换源",[19,121629,121630],{},"(同实体机LINUX，往下找教程)",[25485,121632,121634],{"id":121633},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[26397,121636,121638],{"id":121637},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,121640,121641],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,121643,121644],{},[5074,121645],{"alt":112,"src":121646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,121648,121649],{},[5074,121650],{"alt":112,"src":121651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[26397,121653,121655],{"id":121654},"_23322-cuda","2.3.3.2.2 CUDA",[19,121657,121658,121659],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[3989,121660,121661],{"href":121661,"rel":121662},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[27352],[19,121664,121665,121668],{},[5074,121666],{"alt":112,"src":121667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[5074,121669],{"alt":112,"src":121670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,121672,121673],{},"在下方的网站，选择合适的版本。",[19,121675,121676,121677],{},"WSL2 专属 CUDA 指南：",[3989,121678,121679],{"href":121679,"rel":121680},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[27352],[19,121682,121683],{},[3903,121684,121685],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,121687,121688],{},[5074,121689],{"alt":112,"src":121690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,121692,121693],{},"挨行敲一遍",[19,121695,121696],{},[5074,121697],{"alt":112,"src":121698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,121700,121701,121702,121705],{},"敲完后，输入",[114,121703,121704],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,121707,121708],{},[5074,121709],{"alt":112,"src":121710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,121712,121713,121714,121717],{},"（请详看下方教程的",[3903,121715,121716],{},"安装CUDA的配置环境来看","如何配置环境）",[26397,121719,121721],{"id":121720},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,121723,121630],{},[19,121725,121726],{},[5074,121727],{"alt":112,"src":121728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[25485,121730,121732],{"id":121731},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,121734,121735],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,121737,121738],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,121740,121741],{},[5074,121742],{"alt":112,"src":121743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,121745,121746],{},"连接WSL2",[19,121748,121749],{},[5074,121750],{"alt":112,"src":121751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,121753,121754],{},"远程开发成功。",[19,121756,121757],{},[5074,121758],{"alt":112,"src":121759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,121761,121762],{},[5074,121763],{"alt":112,"src":121764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,121766,121767],{},[5074,121768],{"alt":112,"src":121769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[25485,121771,121773],{"id":121772},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,121775,121776],{},[5074,121777],{"alt":112,"src":121778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[25485,121780,121782],{"id":121781},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[106,121784,121786],{"className":120652,"code":121785,"language":120654,"meta":112,"style":112},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[114,121787,121788,121796,121804,121815,121819],{"__ignoreMap":112},[128,121789,121790,121792,121794],{"class":130,"line":131},[128,121791,28064],{"class":199},[128,121793,120673],{"class":176},[128,121795,29727],{"class":176},[128,121797,121798,121800,121802],{"class":130,"line":142},[128,121799,28064],{"class":199},[128,121801,120673],{"class":176},[128,121803,120689],{"class":176},[128,121805,121806,121808,121810,121812],{"class":130,"line":156},[128,121807,28064],{"class":199},[128,121809,120673],{"class":176},[128,121811,27321],{"class":176},[128,121813,121814],{"class":176}," mesa-utils\n",[128,121816,121817],{"class":130,"line":163},[128,121818,160],{"emptyLinePlaceholder":159},[128,121820,121821],{"class":130,"line":183},[128,121822,121823],{"class":3814},"#然后重启wsl2即可\n",[3659,121825,121826],{},"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":112,"searchDepth":142,"depth":142,"links":121828},[121829,121830,121835],{"id":121106,"depth":142,"text":121107},{"id":121119,"depth":142,"text":121120,"children":121831},[121832,121833,121834],{"id":121123,"depth":156,"text":121124},{"id":121170,"depth":156,"text":121171},{"id":121231,"depth":156,"text":121232},{"id":121267,"depth":142,"text":121268,"children":121836},[121837,121838,121839],{"id":121271,"depth":156,"text":121272},{"id":121333,"depth":156,"text":121334},{"id":121622,"depth":156,"text":121623},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":121098,"description":3686},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":121846,"title":121847,"body":121848,"description":3686,"extension":3687,"meta":124784,"navigation":159,"path":124785,"seo":124786,"stem":124787,"__hash__":124788},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":121849,"toc":124756},[121850,121853,121857,121863,121867,121873,121877,122065,122068,122073,122077,122081,122084,122087,122093,122098,122101,122104,122109,122142,122147,122151,122228,122231,122236,122240,122243,122282,122285,122294,122312,122317,122324,122441,122446,122449,122476,122481,122485,122494,122544,122551,122555,122558,122572,122579,122613,122618,122622,122645,122648,122653,122657,122660,122663,122666,122708,122712,122715,122718,122759,122763,122767,122770,122775,122780,122783,122806,122809,122817,122822,122825,122830,122835,122838,122843,122847,122852,122875,122880,122942,122950,122955,122960,122963,122968,122971,122976,122981,122999,123004,123010,123015,123029,123033,123036,123039,123042,123085,123088,123093,123194,123197,123202,123206,123210,123247,123251,123255,123259,123305,123309,123354,123358,123365,123373,123428,123431,123508,123511,123534,123538,123541,123546,123551,123559,123562,123567,123572,123577,123580,123585,123594,123597,123602,123605,123676,123681,123684,123689,123692,123697,123700,123705,123708,123713,123718,123721,123796,123799,123812,123817,123820,123834,123837,123866,123871,123900,123903,123908,123912,123917,123926,123929,123934,123937,123942,123945,123948,123953,123956,123961,123966,123969,123974,123977,124102,124107,124137,124140,124145,124150,124167,124170,124213,124216,124243,124248,124261,124404,124408,124413,124427,124430,124481,124484,124514,124517,124533,124538,124552,124555,124622,124627,124636,124641,124644,124656,124661,124668,124692,124695,124700,124703,124722,124727,124734,124746,124753],[10,121851,121847],{"id":121852},"_3-安装必备配置",[14,121854,121856],{"id":121855},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[106,121858,121861],{"className":121859,"code":121860,"language":111},[109],"  打开下方网站（注意，该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",[114,121862,121860],{"__ignoreMap":112},[72,121864,121866],{"id":121865},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[106,121868,121871],{"className":121869,"code":121870,"language":111},[109],"  输入以下命令\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",[114,121872,121870],{"__ignoreMap":112},[72,121874,121876],{"id":121875},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[106,121878,121882],{"className":121879,"code":121880,"language":121881,"meta":112,"style":112},"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",[114,121883,121884,121892,121903,121915,121929,121933,121943,121948,121952,121956,121961,121965,121977,121981,121986,121990,122001,122005,122021,122025,122036,122040,122045,122049,122057],{"__ignoreMap":112},[128,121885,121886,121888,121890],{"class":130,"line":131},[128,121887,28064],{"class":199},[128,121889,120673],{"class":176},[128,121891,29727],{"class":176},[128,121893,121894,121896,121898,121900],{"class":130,"line":142},[128,121895,28064],{"class":199},[128,121897,120673],{"class":176},[128,121899,27321],{"class":176},[128,121901,121902],{"class":176}," vim\n",[128,121904,121905,121907,121910,121912],{"class":130,"line":156},[128,121906,28064],{"class":199},[128,121908,121909],{"class":176}," rm",[128,121911,28811],{"class":166},[128,121913,121914],{"class":176}," \u002Fetc\u002Fapt\u002Fsources.list\n",[128,121916,121917,121919,121921,121923,121926],{"class":130,"line":163},[128,121918,28064],{"class":199},[128,121920,121909],{"class":176},[128,121922,28811],{"class":166},[128,121924,121925],{"class":176}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[128,121927,121928],{"class":166},"**\n",[128,121930,121931],{"class":130,"line":183},[128,121932,160],{"emptyLinePlaceholder":159},[128,121934,121935,121937,121940],{"class":130,"line":188},[128,121936,28064],{"class":199},[128,121938,121939],{"class":176}," vim",[128,121941,121942],{"class":176}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[128,121944,121945],{"class":130,"line":193},[128,121946,121947],{"class":176},"```\n",[128,121949,121950],{"class":130,"line":206},[128,121951,160],{"emptyLinePlaceholder":159},[128,121953,121954],{"class":130,"line":221},[128,121955,160],{"emptyLinePlaceholder":159},[128,121957,121958],{"class":130,"line":230},[128,121959,121960],{"class":199},"选择好Ubuntu版本后，复制下方的内容。\n",[128,121962,121963],{"class":130,"line":235},[128,121964,160],{"emptyLinePlaceholder":159},[128,121966,121967,121969,121972,121975],{"class":130,"line":244},[128,121968,3977],{"class":134},[128,121970,121971],{"class":176},"[](",[128,121973,121974],{"class":199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[128,121976,180],{"class":176},[128,121978,121979],{"class":130,"line":287},[128,121980,160],{"emptyLinePlaceholder":159},[128,121982,121983],{"class":130,"line":301},[128,121984,121985],{"class":199},"粘贴进去\n",[128,121987,121988],{"class":130,"line":310},[128,121989,160],{"emptyLinePlaceholder":159},[128,121991,121992,121994,121996,121999],{"class":130,"line":323},[128,121993,3977],{"class":134},[128,121995,121971],{"class":176},[128,121997,121998],{"class":199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[128,122000,180],{"class":176},[128,122002,122003],{"class":130,"line":330},[128,122004,160],{"emptyLinePlaceholder":159},[128,122006,122007,122010,122013,122016,122018],{"class":130,"line":335},[128,122008,122009],{"class":199},"按一下ESC，然后英文冒号，输入",[128,122011,122012],{"class":176}," `",[128,122014,122015],{"class":199},":wq!",[128,122017,4717],{"class":176},[128,122019,122020],{"class":199},"然后回车\n",[128,122022,122023],{"class":130,"line":340},[128,122024,160],{"emptyLinePlaceholder":159},[128,122026,122027,122029,122031,122034],{"class":130,"line":351},[128,122028,3977],{"class":134},[128,122030,121971],{"class":176},[128,122032,122033],{"class":199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[128,122035,180],{"class":176},[128,122037,122038],{"class":130,"line":384},[128,122039,160],{"emptyLinePlaceholder":159},[128,122041,122042],{"class":130,"line":414},[128,122043,122044],{"class":199},"输入以下命令\n",[128,122046,122047],{"class":130,"line":419},[128,122048,160],{"emptyLinePlaceholder":159},[128,122050,122051,122054],{"class":130,"line":424},[128,122052,122053],{"class":176},"```",[128,122055,122056],{"class":199},"Bash\n",[128,122058,122059,122061,122063],{"class":130,"line":434},[128,122060,28064],{"class":199},[128,122062,120673],{"class":176},[128,122064,29727],{"class":176},[19,122066,122067],{},"这里被替换成对应学校则成功",[19,122069,122070],{},[5074,122071],{"alt":112,"src":122072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,122074,122076],{"id":122075},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[72,122078,122080],{"id":122079},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,122082,122083],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,122085,122086],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,122088,122089],{},[3989,122090,122091],{"href":122091,"rel":122092},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[27352],[19,122094,122095],{},[5074,122096],{"alt":112,"src":122097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,122099,122100],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,122102,122103],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,122105,122106],{},[5074,122107],{"alt":112,"src":122108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[106,122110,122112],{"className":120652,"code":122111,"language":120654,"meta":112,"style":112},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[114,122113,122114,122119,122126,122131],{"__ignoreMap":112},[128,122115,122116],{"class":130,"line":131},[128,122117,122118],{"class":3814},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[128,122120,122121,122123],{"class":130,"line":142},[128,122122,104643],{"class":166},[128,122124,122125],{"class":176}," ~\u002FDownloads\n",[128,122127,122128],{"class":130,"line":156},[128,122129,122130],{"class":3814},"#下方chrome安装包名不一定是这个，根据名字来看\n",[128,122132,122133,122135,122137,122139],{"class":130,"line":163},[128,122134,28064],{"class":199},[128,122136,120673],{"class":176},[128,122138,27321],{"class":176},[128,122140,122141],{"class":176}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,122143,122144],{},[5074,122145],{"alt":112,"src":122146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[72,122148,122150],{"id":122149},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[106,122152,122154],{"className":120652,"code":122153,"language":120654,"meta":112,"style":112},"# 老版\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",[114,122155,122156,122161,122169,122180,122185,122189,122194,122204,122212,122223],{"__ignoreMap":112},[128,122157,122158],{"class":130,"line":131},[128,122159,122160],{"class":3814},"# 老版\n",[128,122162,122163,122165,122167],{"class":130,"line":142},[128,122164,28064],{"class":199},[128,122166,120673],{"class":176},[128,122168,29727],{"class":176},[128,122170,122171,122173,122175,122177],{"class":130,"line":156},[128,122172,28064],{"class":199},[128,122174,120673],{"class":176},[128,122176,27321],{"class":176},[128,122178,122179],{"class":176}," neofetch\n",[128,122181,122182],{"class":130,"line":163},[128,122183,122184],{"class":199},"neofetch\n",[128,122186,122187],{"class":130,"line":183},[128,122188,160],{"emptyLinePlaceholder":159},[128,122190,122191],{"class":130,"line":188},[128,122192,122193],{"class":3814},"# 新版\n",[128,122195,122196,122198,122201],{"class":130,"line":193},[128,122197,28064],{"class":199},[128,122199,122200],{"class":176}," add-apt-repository",[128,122202,122203],{"class":176}," ppa:zhangsongcui3371\u002Ffastfetch\n",[128,122205,122206,122208,122210],{"class":130,"line":206},[128,122207,28064],{"class":199},[128,122209,120673],{"class":176},[128,122211,29727],{"class":176},[128,122213,122214,122216,122218,122220],{"class":130,"line":221},[128,122215,28064],{"class":199},[128,122217,120673],{"class":176},[128,122219,27321],{"class":176},[128,122221,122222],{"class":176}," fastfetch\n",[128,122224,122225],{"class":130,"line":230},[128,122226,122227],{"class":199},"fastfetch\n",[19,122229,122230],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,122232,122233],{},[5074,122234],{"alt":112,"src":122235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[72,122237,122239],{"id":122238},"_323-移除snap应用","3.2.3 移除snap应用",[19,122241,122242],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[106,122244,122246],{"className":120652,"code":122245,"language":120654,"meta":112,"style":112},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[114,122247,122248,122260,122271],{"__ignoreMap":112},[128,122249,122250,122252,122254,122257],{"class":130,"line":131},[128,122251,28064],{"class":199},[128,122253,29998],{"class":176},[128,122255,122256],{"class":176}," disable",[128,122258,122259],{"class":176}," snapd.service\n",[128,122261,122262,122264,122266,122268],{"class":130,"line":142},[128,122263,28064],{"class":199},[128,122265,29998],{"class":176},[128,122267,122256],{"class":176},[128,122269,122270],{"class":176}," snapd.socket\n",[128,122272,122273,122275,122277,122279],{"class":130,"line":156},[128,122274,28064],{"class":199},[128,122276,29998],{"class":176},[128,122278,122256],{"class":176},[128,122280,122281],{"class":176}," snapd.seeded.service\n",[19,122283,122284],{},"然后查看snap应用列表",[19,122286,122287,122288,122293],{},"根据你安装的选择不同（最小安装或普通安装），有",[3989,122289,122292],{"href":122290,"rel":122291},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[27352],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[106,122295,122297],{"className":120652,"code":122296,"language":120654,"meta":112,"style":112},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[114,122298,122299,122304],{"__ignoreMap":112},[128,122300,122301],{"class":130,"line":131},[128,122302,122303],{"class":3814},"# 查询当前系统上snap安装了哪些app\n",[128,122305,122306,122309],{"class":130,"line":142},[128,122307,122308],{"class":199},"snap",[128,122310,122311],{"class":176}," list\n",[19,122313,122314],{},[5074,122315],{"alt":112,"src":122316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,122318,122319,122320,122323],{},"卸载掉图中所有应用，按照 ",[3903,122321,122322],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[106,122325,122327],{"className":120652,"code":122326,"language":120654,"meta":112,"style":112},"#移除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",[114,122328,122329,122334,122346,122351,122362,122367,122378,122383,122394,122399,122403,122408,122419,122430],{"__ignoreMap":112},[128,122330,122331],{"class":130,"line":131},[128,122332,122333],{"class":3814},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[128,122335,122336,122338,122341,122343],{"class":130,"line":142},[128,122337,28064],{"class":199},[128,122339,122340],{"class":176}," snap",[128,122342,29564],{"class":176},[128,122344,122345],{"class":176}," snap-store\n",[128,122347,122348],{"class":130,"line":156},[128,122349,122350],{"class":3814},"#移除firefox浏览器\n",[128,122352,122353,122355,122357,122359],{"class":130,"line":163},[128,122354,28064],{"class":199},[128,122356,122340],{"class":176},[128,122358,29564],{"class":176},[128,122360,122361],{"class":176}," firefox\n",[128,122363,122364],{"class":130,"line":183},[128,122365,122366],{"class":3814},"#移除gnome-42-2204\n",[128,122368,122369,122371,122373,122375],{"class":130,"line":188},[128,122370,28064],{"class":199},[128,122372,122340],{"class":176},[128,122374,29564],{"class":176},[128,122376,122377],{"class":176}," gnome-42-2204\n",[128,122379,122380],{"class":130,"line":193},[128,122381,122382],{"class":3814},"#移除gtk-common-themes\n",[128,122384,122385,122387,122389,122391],{"class":130,"line":206},[128,122386,28064],{"class":199},[128,122388,122340],{"class":176},[128,122390,29564],{"class":176},[128,122392,122393],{"class":176}," gtk-common-themes\n",[128,122395,122396],{"class":130,"line":221},[128,122397,122398],{"class":3814},"#移除其它...\n",[128,122400,122401],{"class":130,"line":230},[128,122402,6247],{"class":138},[128,122404,122405],{"class":130,"line":235},[128,122406,122407],{"class":3814},"#移除core22,bare以及snapd\n",[128,122409,122410,122412,122414,122416],{"class":130,"line":244},[128,122411,28064],{"class":199},[128,122413,122340],{"class":176},[128,122415,29564],{"class":176},[128,122417,122418],{"class":176}," core22\n",[128,122420,122421,122423,122425,122427],{"class":130,"line":287},[128,122422,28064],{"class":199},[128,122424,122340],{"class":176},[128,122426,29564],{"class":176},[128,122428,122429],{"class":176}," bare\n",[128,122431,122432,122434,122436,122438],{"class":130,"line":301},[128,122433,28064],{"class":199},[128,122435,122340],{"class":176},[128,122437,29564],{"class":176},[128,122439,122440],{"class":176}," snapd\n",[19,122442,122443],{},[5074,122444],{"alt":112,"src":122445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,122447,122448],{},"输入以下命令查看是否还有snap包",[106,122450,122452],{"className":120652,"code":122451,"language":120654,"meta":112,"style":112},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[114,122453,122454,122460,122464,122468,122472],{"__ignoreMap":112},[128,122455,122456,122458],{"class":130,"line":131},[128,122457,122308],{"class":199},[128,122459,122311],{"class":176},[128,122461,122462],{"class":130,"line":142},[128,122463,122160],{"class":3814},[128,122465,122466],{"class":130,"line":156},[128,122467,122184],{"class":199},[128,122469,122470],{"class":130,"line":163},[128,122471,122193],{"class":3814},[128,122473,122474],{"class":130,"line":183},[128,122475,122227],{"class":199},[19,122477,122478],{},[5074,122479],{"alt":112,"src":122480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[72,122482,122484],{"id":122483},"_324-移除snap","3.2.4 移除snap",[19,122486,122487,122488,122493],{},"在删除掉",[3989,122489,122492],{"href":122490,"rel":122491},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[27352],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[106,122495,122497],{"className":120652,"code":122496,"language":120654,"meta":112,"style":112}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[114,122498,122499,122504,122517,122522,122533],{"__ignoreMap":112},[128,122500,122501],{"class":130,"line":131},[128,122502,122503],{"class":3814}," #使用apt移除掉snap\n",[128,122505,122506,122508,122510,122512,122515],{"class":130,"line":142},[128,122507,28064],{"class":199},[128,122509,120673],{"class":176},[128,122511,120981],{"class":176},[128,122513,122514],{"class":166}," --purge",[128,122516,122440],{"class":176},[128,122518,122519],{"class":130,"line":156},[128,122520,122521],{"class":3814},"#移除snapd的一些目录\n",[128,122523,122524,122526,122528,122530],{"class":130,"line":163},[128,122525,28064],{"class":199},[128,122527,121909],{"class":176},[128,122529,28811],{"class":166},[128,122531,122532],{"class":176}," \u002Fvar\u002Fcache\u002Fsnapd\n",[128,122534,122535,122537,122539,122541],{"class":130,"line":183},[128,122536,28064],{"class":199},[128,122538,121909],{"class":176},[128,122540,28811],{"class":166},[128,122542,122543],{"class":176}," ~\u002Fsnap\n",[19,122545,122546,122547,122550],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[114,122548,122549],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[72,122552,122554],{"id":122553},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,122556,122557],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[106,122559,122561],{"className":120652,"code":122560,"language":120654,"meta":112,"style":112},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[114,122562,122563],{"__ignoreMap":112},[128,122564,122565,122567,122569],{"class":130,"line":131},[128,122566,28064],{"class":199},[128,122568,121939],{"class":176},[128,122570,122571],{"class":176}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,122573,122574,122575,122578],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[114,122576,122577],{},":wq"," 回车",[106,122580,122582],{"className":120652,"code":122581,"language":120654,"meta":112,"style":112},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[114,122583,122584,122591,122605],{"__ignoreMap":112},[128,122585,122586,122589],{"class":130,"line":131},[128,122587,122588],{"class":199},"Package:",[128,122590,122440],{"class":176},[128,122592,122593,122596,122599,122602],{"class":130,"line":142},[128,122594,122595],{"class":199},"Pin:",[128,122597,122598],{"class":176}," release",[128,122600,122601],{"class":176}," a=",[128,122603,122604],{"class":166},"*\n",[128,122606,122607,122610],{"class":130,"line":156},[128,122608,122609],{"class":199},"Pin-Priority:",[128,122611,122612],{"class":166}," -10\n",[19,122614,122615],{},[5074,122616],{"alt":112,"src":122617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[72,122619,122621],{"id":122620},"_326-测试是否成功","3.2.6 测试是否成功",[106,122623,122625],{"className":120652,"code":122624,"language":120654,"meta":112,"style":112},"sudo apt update\nsudo apt install firefox\n",[114,122626,122627,122635],{"__ignoreMap":112},[128,122628,122629,122631,122633],{"class":130,"line":131},[128,122630,28064],{"class":199},[128,122632,120673],{"class":176},[128,122634,29727],{"class":176},[128,122636,122637,122639,122641,122643],{"class":130,"line":142},[128,122638,28064],{"class":199},[128,122640,120673],{"class":176},[128,122642,27321],{"class":176},[128,122644,122361],{"class":176},[19,122646,122647],{},"这里提示snapd无法被安装，就证明成功了",[19,122649,122650],{},[5074,122651],{"alt":112,"src":122652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[72,122654,122656],{"id":122655},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,122658,122659],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,122661,122662],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,122664,122665],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[106,122667,122669],{"className":120652,"code":122668,"language":120654,"meta":112,"style":112},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[114,122670,122671,122676,122685,122690,122698],{"__ignoreMap":112},[128,122672,122673],{"class":130,"line":131},[128,122674,122675],{"class":3814},"# 添加Mozilla提供的源\n",[128,122677,122678,122680,122682],{"class":130,"line":142},[128,122679,28064],{"class":199},[128,122681,122200],{"class":176},[128,122683,122684],{"class":176}," ppa:mozillateam\u002Fppa\n",[128,122686,122687],{"class":130,"line":156},[128,122688,122689],{"class":3814},"# 安装Firefox\n",[128,122691,122692,122694,122696],{"class":130,"line":163},[128,122693,28064],{"class":199},[128,122695,120673],{"class":176},[128,122697,29727],{"class":176},[128,122699,122700,122702,122704,122706],{"class":130,"line":183},[128,122701,28064],{"class":199},[128,122703,120673],{"class":176},[128,122705,27321],{"class":176},[128,122707,122361],{"class":176},[72,122709,122711],{"id":122710},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,122713,122714],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,122716,122717],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[106,122719,122721],{"className":120652,"code":122720,"language":120654,"meta":112,"style":112},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[114,122722,122723,122728,122738,122746,122750],{"__ignoreMap":112},[128,122724,122725],{"class":130,"line":131},[128,122726,122727],{"class":3814},"#删掉禁止安装snap的配置文件\n",[128,122729,122730,122732,122734,122736],{"class":130,"line":142},[128,122731,28064],{"class":199},[128,122733,121909],{"class":176},[128,122735,28811],{"class":166},[128,122737,122571],{"class":176},[128,122739,122740,122742,122744],{"class":130,"line":156},[128,122741,28064],{"class":199},[128,122743,120673],{"class":176},[128,122745,29727],{"class":176},[128,122747,122748],{"class":130,"line":163},[128,122749,160],{"emptyLinePlaceholder":159},[128,122751,122752,122754,122756],{"class":130,"line":183},[128,122753,28064],{"class":199},[128,122755,120673],{"class":176},[128,122757,122758],{"class":176}," dist-update\n",[14,122760,122762],{"id":122761},"_33-中文输入法","3.3 中文输入法",[72,122764,122766],{"id":122765},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,122768,122769],{},"官网下载搜狗输入法",[19,122771,122772],{},[5074,122773],{"alt":112,"src":122774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,122776,122777],{},[5074,122778],{"alt":112,"src":122779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,122781,122782],{},"打开终端输入如下",[106,122784,122786],{"className":120652,"code":122785,"language":120654,"meta":112,"style":112},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[114,122787,122788,122795],{"__ignoreMap":112},[128,122789,122790,122792],{"class":130,"line":131},[128,122791,104643],{"class":166},[128,122793,122794],{"class":176}," ~\u002FDownloads\u002F\n",[128,122796,122797,122799,122801,122803],{"class":130,"line":142},[128,122798,28064],{"class":199},[128,122800,120673],{"class":176},[128,122802,27321],{"class":176},[128,122804,122805],{"class":176}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,122807,122808],{},"打开Fcitx",[19,122810,122811,122814],{},[5074,122812],{"alt":112,"src":122813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[5074,122815],{"alt":112,"src":122816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,122818,122819],{},[5074,122820],{"alt":112,"src":122821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,122823,122824],{},"添加搜狗输入法",[19,122826,122827],{},[5074,122828],{"alt":112,"src":122829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,122831,122832],{},[5074,122833],{"alt":112,"src":122834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,122836,122837],{},"将搜狗输入法设置为唯一输入法",[19,122839,122840],{},[5074,122841],{"alt":112,"src":122842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[72,122844,122846],{"id":122845},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[26,122848,122849],{},[29,122850,122851],{},"卸载旧输入法",[106,122853,122855],{"className":121879,"code":122854,"language":121881,"meta":112,"style":112},"sudo apt purge fcitx* ibus*\n",[114,122856,122857],{"__ignoreMap":112},[128,122858,122859,122861,122863,122865,122868,122870,122873],{"class":130,"line":131},[128,122860,28064],{"class":199},[128,122862,120673],{"class":176},[128,122864,121014],{"class":176},[128,122866,122867],{"class":176}," fcitx",[128,122869,4205],{"class":166},[128,122871,122872],{"class":176}," ibus",[128,122874,122604],{"class":166},[26,122876,122877],{"start":142},[29,122878,122879],{},"安装Fcitx5",[106,122881,122883],{"className":120652,"code":122882,"language":120654,"meta":112,"style":112},"# 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",[114,122884,122885,122890,122904,122908,122913,122922,122930],{"__ignoreMap":112},[128,122886,122887],{"class":130,"line":131},[128,122888,122889],{"class":3814},"# Ubuntu22.04及以上、Debian12及以上\n",[128,122891,122892,122894,122896,122898,122901],{"class":130,"line":142},[128,122893,28064],{"class":199},[128,122895,120673],{"class":176},[128,122897,27321],{"class":176},[128,122899,122900],{"class":176}," fcitx5",[128,122902,122903],{"class":176}," fcitx5-chinese-addons\n",[128,122905,122906],{"class":130,"line":156},[128,122907,160],{"emptyLinePlaceholder":159},[128,122909,122910],{"class":130,"line":163},[128,122911,122912],{"class":3814},"# Ubuntu20.04\n",[128,122914,122915,122917,122919],{"class":130,"line":183},[128,122916,28064],{"class":199},[128,122918,122200],{"class":176},[128,122920,122921],{"class":176}," ppa:zhsj\u002Ffcitx5\n",[128,122923,122924,122926,122928],{"class":130,"line":188},[128,122925,28064],{"class":199},[128,122927,120673],{"class":176},[128,122929,29727],{"class":176},[128,122931,122932,122934,122936,122938,122940],{"class":130,"line":193},[128,122933,28064],{"class":199},[128,122935,120673],{"class":176},[128,122937,27321],{"class":176},[128,122939,122900],{"class":176},[128,122941,122903],{"class":176},[26,122943,122944,122947],{"start":156},[29,122945,122946],{},"Reboot System",[29,122948,122949],{},"启动Fcitx5",[19,122951,122952],{},[5074,122953],{"alt":112,"src":122954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[26,122956,122957],{"start":183},[29,122958,122959],{},"修改一些设置",[19,122961,122962],{},"将Pinyin和Keyboard - English US加入到左边。",[19,122964,122965],{},[5074,122966],{"alt":112,"src":122967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,122969,122970],{},"添加快捷键以便于更好切换中英文",[19,122972,122973],{},[5074,122974],{"alt":112,"src":122975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[26,122977,122978],{"start":188},[29,122979,122980],{},"重启",[106,122982,122984],{"className":121879,"code":122983,"language":121881,"meta":112,"style":112},"sudo shutdown -r now\n",[114,122985,122986],{"__ignoreMap":112},[128,122987,122988,122990,122993,122996],{"class":130,"line":131},[128,122989,28064],{"class":199},[128,122991,122992],{"class":176}," shutdown",[128,122994,122995],{"class":166}," -r",[128,122997,122998],{"class":176}," now\n",[26,123000,123001],{"start":193},[29,123002,123003],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,123005,123006],{},[3989,123007,123008],{"href":123008,"rel":123009},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[27352],[26,123011,123012],{"start":206},[29,123013,123014],{},"再重启",[106,123016,123017],{"className":121879,"code":122983,"language":121881,"meta":112,"style":112},[114,123018,123019],{"__ignoreMap":112},[128,123020,123021,123023,123025,123027],{"class":130,"line":131},[128,123022,28064],{"class":199},[128,123024,122992],{"class":176},[128,123026,122995],{"class":166},[128,123028,122998],{"class":176},[14,123030,123032],{"id":123031},"_34-pip3源替换","3.4 pip3源替换",[19,123034,123035],{},"非Debian系发行版需要做。",[19,123037,123038],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,123040,123041],{},"使用dnf的系统也可能不用做。",[106,123043,123045],{"className":120652,"code":123044,"language":120654,"meta":112,"style":112},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[114,123046,123047,123052,123059,123064,123069],{"__ignoreMap":112},[128,123048,123049],{"class":130,"line":131},[128,123050,123051],{"class":3814},"# 检查是否已安装 pip\n",[128,123053,123054,123057],{"class":130,"line":142},[128,123055,123056],{"class":199},"pip3",[128,123058,29778],{"class":166},[128,123060,123061],{"class":130,"line":156},[128,123062,123063],{"class":3814},"# 如果未安装，先安装 pip3（见下方）\n",[128,123065,123066],{"class":130,"line":163},[128,123067,123068],{"class":3814},"# 配置 pip 使用清华源\n",[128,123070,123071,123073,123076,123079,123082],{"class":130,"line":183},[128,123072,123056],{"class":199},[128,123074,123075],{"class":176}," config",[128,123077,123078],{"class":176}," set",[128,123080,123081],{"class":176}," global.index-url",[128,123083,123084],{"class":176}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,123086,123087],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,123089,123090],{},[5074,123091],{"alt":112,"src":123092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[106,123094,123096],{"className":120652,"code":123095,"language":120654,"meta":112,"style":112},"#安装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",[114,123097,123098,123103,123111,123122,123126,123131,123150,123154,123159,123171,123175,123180],{"__ignoreMap":112},[128,123099,123100],{"class":130,"line":131},[128,123101,123102],{"class":3814},"#安装pip3\n",[128,123104,123105,123107,123109],{"class":130,"line":142},[128,123106,28064],{"class":199},[128,123108,120673],{"class":176},[128,123110,29727],{"class":176},[128,123112,123113,123115,123117,123119],{"class":130,"line":156},[128,123114,28064],{"class":199},[128,123116,29561],{"class":176},[128,123118,27321],{"class":176},[128,123120,123121],{"class":176}," python3-pip\n",[128,123123,123124],{"class":130,"line":163},[128,123125,160],{"emptyLinePlaceholder":159},[128,123127,123128],{"class":130,"line":183},[128,123129,123130],{"class":3814},"#更新pip3\n",[128,123132,123133,123135,123137,123139,123141,123143,123146,123148],{"class":130,"line":188},[128,123134,104247],{"class":199},[128,123136,104250],{"class":166},[128,123138,104273],{"class":176},[128,123140,27321],{"class":176},[128,123142,29915],{"class":166},[128,123144,123145],{"class":176}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[128,123147,104278],{"class":166},[128,123149,104281],{"class":176},[128,123151,123152],{"class":130,"line":193},[128,123153,160],{"emptyLinePlaceholder":159},[128,123155,123156],{"class":130,"line":206},[128,123157,123158],{"class":3814},"#设置pip源为清华源\n",[128,123160,123161,123163,123165,123167,123169],{"class":130,"line":221},[128,123162,123056],{"class":199},[128,123164,123075],{"class":176},[128,123166,123078],{"class":176},[128,123168,123081],{"class":176},[128,123170,123084],{"class":176},[128,123172,123173],{"class":130,"line":230},[128,123174,160],{"emptyLinePlaceholder":159},[128,123176,123177],{"class":130,"line":235},[128,123178,123179],{"class":3814},"#测试\n",[128,123181,123182,123184,123186,123188,123190,123192],{"class":130,"line":244},[128,123183,104247],{"class":199},[128,123185,104250],{"class":166},[128,123187,104273],{"class":176},[128,123189,27321],{"class":176},[128,123191,104278],{"class":166},[128,123193,104281],{"class":176},[19,123195,123196],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,123198,123199],{},[5074,123200],{"alt":112,"src":123201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,123203,123205],{"id":123204},"_35-显卡驱动安装","3.5 显卡驱动安装",[72,123207,123209],{"id":123208},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[106,123211,123213],{"className":121879,"code":123212,"language":121881,"meta":112,"style":112},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[114,123214,123215,123220,123235,123240],{"__ignoreMap":112},[128,123216,123217],{"class":130,"line":131},[128,123218,123219],{"class":3814},"# 如果是使用apt安装的驱动\n",[128,123221,123222,123224,123226,123228,123230,123233],{"class":130,"line":142},[128,123223,28064],{"class":199},[128,123225,29561],{"class":176},[128,123227,29564],{"class":176},[128,123229,122514],{"class":166},[128,123231,123232],{"class":176}," nvidia",[128,123234,122604],{"class":166},[128,123236,123237],{"class":130,"line":156},[128,123238,123239],{"class":3814},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[128,123241,123242,123244],{"class":130,"line":163},[128,123243,28064],{"class":199},[128,123245,123246],{"class":176}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[72,123248,123250],{"id":123249},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[25485,123252,123254],{"id":123253},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[26397,123256,123258],{"id":123257},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[106,123260,123262],{"className":121879,"code":123261,"language":121881,"meta":112,"style":112},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[114,123263,123264,123269,123280,123285,123295,123300],{"__ignoreMap":112},[128,123265,123266],{"class":130,"line":131},[128,123267,123268],{"class":3814},"# 安装英伟达驱动\n",[128,123270,123271,123273,123275,123277],{"class":130,"line":142},[128,123272,28064],{"class":199},[128,123274,120673],{"class":176},[128,123276,27321],{"class":176},[128,123278,123279],{"class":176}," nvidia-driver-版本号\n",[128,123281,123282],{"class":130,"line":156},[128,123283,123284],{"class":3814},"# 重启 \n",[128,123286,123287,123289,123291,123293],{"class":130,"line":163},[128,123288,28064],{"class":199},[128,123290,122992],{"class":176},[128,123292,122995],{"class":166},[128,123294,122998],{"class":176},[128,123296,123297],{"class":130,"line":183},[128,123298,123299],{"class":3814},"# 检查驱动是否安装成功\n",[128,123301,123302],{"class":130,"line":188},[128,123303,123304],{"class":199},"nvidia-smi\n",[26397,123306,123308],{"id":123307},"_35212-debian","3.5.2.1.2 Debian",[106,123310,123312],{"className":121879,"code":123311,"language":121881,"meta":112,"style":112},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[114,123313,123314,123318,123332,123336,123346,123350],{"__ignoreMap":112},[128,123315,123316],{"class":130,"line":131},[128,123317,123268],{"class":3814},[128,123319,123320,123322,123324,123326,123329],{"class":130,"line":142},[128,123321,28064],{"class":199},[128,123323,120673],{"class":176},[128,123325,27321],{"class":176},[128,123327,123328],{"class":176}," nvidia-driver",[128,123330,123331],{"class":176}," nvidia-settings\n",[128,123333,123334],{"class":130,"line":156},[128,123335,123284],{"class":3814},[128,123337,123338,123340,123342,123344],{"class":130,"line":163},[128,123339,28064],{"class":199},[128,123341,122992],{"class":176},[128,123343,122995],{"class":166},[128,123345,122998],{"class":176},[128,123347,123348],{"class":130,"line":183},[128,123349,123299],{"class":3814},[128,123351,123352],{"class":130,"line":188},[128,123353,123304],{"class":199},[25485,123355,123357],{"id":123356},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,123359,123360,123361,123364],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[3903,123362,123363],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,123366,123367,123368],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[27040,123369,123370],{},[3903,123371,123372],{},"（也可以不禁用桌面环境，直接进行下一步。）",[106,123374,123376],{"className":121879,"code":123375,"language":121881,"meta":112,"style":112},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[114,123377,123378,123383,123393,123398,123411,123416],{"__ignoreMap":112},[128,123379,123380],{"class":130,"line":131},[128,123381,123382],{"class":3814},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[128,123384,123385,123387,123390],{"class":130,"line":142},[128,123386,28064],{"class":199},[128,123388,123389],{"class":176}," telinit",[128,123391,123392],{"class":166}," 3\n",[128,123394,123395],{"class":130,"line":156},[128,123396,123397],{"class":3814},"# ubuntu 使用下方命令\n",[128,123399,123400,123402,123405,123408],{"class":130,"line":163},[128,123401,28064],{"class":199},[128,123403,123404],{"class":176}," service",[128,123406,123407],{"class":176}," lightdm",[128,123409,123410],{"class":176}," stop\n",[128,123412,123413],{"class":130,"line":183},[128,123414,123415],{"class":3814},"# Fedora 使用下方命令\n",[128,123417,123418,123420,123422,123425],{"class":130,"line":188},[128,123419,28064],{"class":199},[128,123421,29998],{"class":176},[128,123423,123424],{"class":176}," isolate",[128,123426,123427],{"class":176}," multi-user.target\n",[19,123429,123430],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[106,123432,123434],{"className":121879,"code":123433,"language":121881,"meta":112,"style":112},"# 编译环境+准备工作\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",[114,123435,123436,123441,123452,123457,123464,123469,123481,123486,123493,123498],{"__ignoreMap":112},[128,123437,123438],{"class":130,"line":131},[128,123439,123440],{"class":3814},"# 编译环境+准备工作\n",[128,123442,123443,123445,123447,123449],{"class":130,"line":142},[128,123444,28064],{"class":199},[128,123446,120673],{"class":176},[128,123448,27321],{"class":176},[128,123450,123451],{"class":176}," build-essential\n",[128,123453,123454],{"class":130,"line":156},[128,123455,123456],{"class":3814},"# 进入到.run目录中\n",[128,123458,123459,123461],{"class":130,"line":163},[128,123460,104643],{"class":166},[128,123462,123463],{"class":176}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[128,123465,123466],{"class":130,"line":183},[128,123467,123468],{"class":3814},"# 给驱动文件增加可执行权限：\n",[128,123470,123471,123473,123475,123478],{"class":130,"line":188},[128,123472,28064],{"class":199},[128,123474,28067],{"class":176},[128,123476,123477],{"class":176}," a+x",[128,123479,123480],{"class":176}," NVIDIA-Linux-x86_64-550.107.02.run\n",[128,123482,123483],{"class":130,"line":193},[128,123484,123485],{"class":3814},"# 然后执行安装：\n",[128,123487,123488,123490],{"class":130,"line":206},[128,123489,28064],{"class":199},[128,123491,123492],{"class":176}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[128,123494,123495],{"class":130,"line":221},[128,123496,123497],{"class":3814},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[128,123499,123500,123502,123505],{"class":130,"line":230},[128,123501,28064],{"class":199},[128,123503,123504],{"class":176}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[128,123506,123507],{"class":166},"  --no-opengl-files\n",[19,123509,123510],{},"安装完毕重启即可",[106,123512,123514],{"className":121879,"code":123513,"language":121881,"meta":112,"style":112},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[114,123515,123516,123520,123526,123530],{"__ignoreMap":112},[128,123517,123518],{"class":130,"line":131},[128,123519,123284],{"class":3814},[128,123521,123522,123524],{"class":130,"line":142},[128,123523,28064],{"class":199},[128,123525,30132],{"class":176},[128,123527,123528],{"class":130,"line":156},[128,123529,123299],{"class":3814},[128,123531,123532],{"class":130,"line":163},[128,123533,123304],{"class":199},[72,123535,123537],{"id":123536},"_353-安装cuda","3.5.3 安装CUDA",[19,123539,123540],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,123542,123543],{},[5074,123544],{"alt":112,"src":123545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[26,123547,123548],{},[29,123549,123550],{},"先查看显卡驱动所支持的最高CUDA版本",[106,123552,123553],{"className":121879,"code":123304,"language":121881,"meta":112,"style":112},[114,123554,123555],{"__ignoreMap":112},[128,123556,123557],{"class":130,"line":131},[128,123558,123304],{"class":199},[19,123560,123561],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,123563,123564],{},[5074,123565],{"alt":112,"src":123566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[26,123568,123569],{"start":142},[29,123570,123571],{},"下载CUDA并安装CUDA",[19,123573,121658,123574],{},[3989,123575,121661],{"href":121661,"rel":123576},[27352],[19,123578,123579],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,123581,123582],{},[5074,123583],{"alt":112,"src":123584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,123586,123587,123588,123593],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[3989,123589,123592],{"href":123590,"rel":123591},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[27352],"Vinci机器人队单片机教程","）",[19,123595,123596],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,123598,123599],{},[5074,123600],{"alt":112,"src":123601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,123603,123604],{},"将最下方框框里的命令敲入终端",[106,123606,123608],{"className":121879,"code":123607,"language":121881,"meta":112,"style":112},"# 在当前文件夹下创建一个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",[114,123609,123610,123615,123624,123629,123636,123641,123649,123654,123665,123670],{"__ignoreMap":112},[128,123611,123612],{"class":130,"line":131},[128,123613,123614],{"class":3814},"# 在当前文件夹下创建一个ttt的子文件夹\n",[128,123616,123617,123619,123621],{"class":130,"line":142},[128,123618,104633],{"class":199},[128,123620,32700],{"class":166},[128,123622,123623],{"class":176}," .\u002Fttt\n",[128,123625,123626],{"class":130,"line":156},[128,123627,123628],{"class":3814},"# 进入ttt文件夹\n",[128,123630,123631,123633],{"class":130,"line":163},[128,123632,104643],{"class":166},[128,123634,123635],{"class":176}," ttt\n",[128,123637,123638],{"class":130,"line":183},[128,123639,123640],{"class":3814},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[128,123642,123643,123646],{"class":130,"line":188},[128,123644,123645],{"class":199},"wget",[128,123647,123648],{"class":176}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[128,123650,123651],{"class":130,"line":193},[128,123652,123653],{"class":3814},"# 给予权限\n",[128,123655,123656,123658,123660,123662],{"class":130,"line":206},[128,123657,28064],{"class":199},[128,123659,28067],{"class":176},[128,123661,123477],{"class":176},[128,123663,123664],{"class":176}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[128,123666,123667],{"class":130,"line":221},[128,123668,123669],{"class":3814},"# 运行脚本\n",[128,123671,123672,123674],{"class":130,"line":230},[128,123673,28064],{"class":199},[128,123675,123664],{"class":176},[19,123677,123678],{},[5074,123679],{"alt":112,"src":123680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,123682,123683],{},"正在安装中：",[19,123685,123686],{},[5074,123687],{"alt":112,"src":123688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,123690,123691],{},"输入accept接受即可",[19,123693,123694],{},[5074,123695],{"alt":112,"src":123696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,123698,123699],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,123701,123702],{},[5074,123703],{"alt":112,"src":123704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,123706,123707],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,123709,123710],{},[5074,123711],{"alt":112,"src":123712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[26,123714,123715],{"start":156},[29,123716,123717],{},"配置环境",[19,123719,123720],{},"根据上方确认一下路径，比如我上面红色框起来的为",[106,123722,123724],{"className":121879,"code":123723,"language":121881,"meta":112,"style":112},"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",[114,123725,123726,123742,123757],{"__ignoreMap":112},[128,123727,123728,123731,123734,123737,123740],{"class":130,"line":131},[128,123729,123730],{"class":199},"Please",[128,123732,123733],{"class":176}," make",[128,123735,123736],{"class":176}," sure",[128,123738,123739],{"class":176}," that",[128,123741,6247],{"class":138},[128,123743,123744,123746,123749,123752,123755],{"class":130,"line":142},[128,123745,55653],{"class":199},[128,123747,123748],{"class":176},"   PATH",[128,123750,123751],{"class":176}," includes",[128,123753,123754],{"class":176}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[128,123756,6247],{"class":138},[128,123758,123759,123761,123764,123766,123769,123772,123774,123777,123780,123783,123786,123788,123791,123793],{"class":130,"line":156},[128,123760,55653],{"class":199},[128,123762,123763],{"class":176},"   LD_LIBRARY_PATH",[128,123765,123751],{"class":176},[128,123767,123768],{"class":176}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[128,123770,123771],{"class":176}," or,",[128,123773,2187],{"class":176},[128,123775,123776],{"class":176}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[128,123778,123779],{"class":176}," to",[128,123781,123782],{"class":176}," \u002Fetc\u002Fld.so.conf",[128,123784,123785],{"class":176}," and",[128,123787,30715],{"class":176},[128,123789,123790],{"class":176}," ldconfig",[128,123792,67982],{"class":176},[128,123794,123795],{"class":176}," root\n",[19,123797,123798],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[106,123800,123802],{"className":121879,"code":123801,"language":121881,"meta":112,"style":112},"which nvcc\n",[114,123803,123804],{"__ignoreMap":112},[128,123805,123806,123809],{"class":130,"line":131},[128,123807,123808],{"class":166},"which",[128,123810,123811],{"class":176}," nvcc\n",[19,123813,123814],{},[5074,123815],{"alt":112,"src":123816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,123818,123819],{},"所以我进行以下操作：",[106,123821,123823],{"className":121879,"code":123822,"language":121881,"meta":112,"style":112},"sudo vim ~\u002F.bashrc\n",[114,123824,123825],{"__ignoreMap":112},[128,123826,123827,123829,123831],{"class":130,"line":131},[128,123828,28064],{"class":199},[128,123830,121939],{"class":176},[128,123832,123833],{"class":176}," ~\u002F.bashrc\n",[19,123835,123836],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[106,123838,123840],{"className":121879,"code":123839,"language":121881,"meta":112,"style":112},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[114,123841,123842,123854],{"__ignoreMap":112},[128,123843,123844,123846,123849,123851],{"class":130,"line":131},[128,123845,28529],{"class":134},[128,123847,123848],{"class":138}," PATH",[128,123850,270],{"class":134},[128,123852,123853],{"class":138},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[128,123855,123856,123858,123861,123863],{"class":130,"line":142},[128,123857,28529],{"class":134},[128,123859,123860],{"class":138}," LD_LIBRARY_PATH",[128,123862,270],{"class":134},[128,123864,123865],{"class":138},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,123867,123868],{},[5074,123869],{"alt":112,"src":123870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[106,123872,123874],{"className":121879,"code":123873,"language":121881,"meta":112,"style":112},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[114,123875,123876,123881,123887,123892],{"__ignoreMap":112},[128,123877,123878],{"class":130,"line":131},[128,123879,123880],{"class":3814},"# 刷新当前终端的环境变量\n",[128,123882,123883,123885],{"class":130,"line":142},[128,123884,104261],{"class":166},[128,123886,123833],{"class":176},[128,123888,123889],{"class":130,"line":156},[128,123890,123891],{"class":3814},"# 验证CUDA是否安装成功\n",[128,123893,123894,123897],{"class":130,"line":163},[128,123895,123896],{"class":199},"nvcc",[128,123898,123899],{"class":166}," -V\n",[19,123901,123902],{},"出现下图这种则安装成功。",[19,123904,123905],{},[5074,123906],{"alt":112,"src":123907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[72,123909,123911],{"id":123910},"_354-安装cudnn","3.5.4 安装cuDNN",[26,123913,123914],{},[29,123915,123916],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,123918,123919,123920,123925],{},"前往 NVIDIA cuDNN 下载页面：",[3989,123921,123924],{"href":123922,"rel":123923},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[27352],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,123927,123928],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,123930,123931],{},[5074,123932],{"alt":112,"src":123933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,123935,123936],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,123938,123939],{},[5074,123940],{"alt":112,"src":123941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,123943,123944],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,123946,123947],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,123949,123950],{},[3903,123951,123952],{},"我这里选择所有Linux X86_64最通用的办法：",[19,123954,123955],{},"下载好的：",[19,123957,123958],{},[5074,123959],{"alt":112,"src":123960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[26,123962,123963],{"start":142},[29,123964,123965],{},"安装cuDNN",[19,123967,123968],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,123970,123971],{},[5074,123972],{"alt":112,"src":123973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,123975,123976],{},"解压文件，并复制到对应位置完成安装",[106,123978,123980],{"className":121879,"code":123979,"language":121881,"meta":112,"style":112},"# 解压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",[114,123981,123982,123987,123998,124003,124010,124015,124031,124045,124050,124061,124070,124074,124090],{"__ignoreMap":112},[128,123983,123984],{"class":130,"line":131},[128,123985,123986],{"class":3814},"# 解压cuDNN文件\n",[128,123988,123989,123992,123995],{"class":130,"line":142},[128,123990,123991],{"class":199},"tar",[128,123993,123994],{"class":166}," -xvf",[128,123996,123997],{"class":176}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[128,123999,124000],{"class":130,"line":156},[128,124001,124002],{"class":3814},"# cd进文件夹\n",[128,124004,124005,124007],{"class":130,"line":163},[128,124006,104643],{"class":166},[128,124008,124009],{"class":176}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[128,124011,124012],{"class":130,"line":183},[128,124013,124014],{"class":3814},"# 复制cuDNN文件到CUDA目录\n",[128,124016,124017,124019,124021,124024,124026,124029],{"class":130,"line":188},[128,124018,28064],{"class":199},[128,124020,31346],{"class":176},[128,124022,124023],{"class":176}," include\u002Fcudnn",[128,124025,4205],{"class":166},[128,124027,124028],{"class":176},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[128,124030,6247],{"class":138},[128,124032,124033,124035,124037,124040,124042],{"class":130,"line":193},[128,124034,28064],{"class":199},[128,124036,31346],{"class":176},[128,124038,124039],{"class":176}," lib\u002Flibcudnn",[128,124041,4205],{"class":166},[128,124043,124044],{"class":176},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[128,124046,124047],{"class":130,"line":206},[128,124048,124049],{"class":3814},"# 对比一下有没有缺文件\n",[128,124051,124052,124054,124057,124059],{"class":130,"line":221},[128,124053,30246],{"class":199},[128,124055,124056],{"class":176}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[128,124058,4205],{"class":166},[128,124060,6247],{"class":138},[128,124062,124063,124065,124068],{"class":130,"line":230},[128,124064,30246],{"class":199},[128,124066,124067],{"class":176}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[128,124069,122604],{"class":166},[128,124071,124072],{"class":130,"line":235},[128,124073,123653],{"class":3814},[128,124075,124076,124078,124080,124083,124085,124087],{"class":130,"line":244},[128,124077,28064],{"class":199},[128,124079,28067],{"class":176},[128,124081,124082],{"class":176}," a+r",[128,124084,124056],{"class":176},[128,124086,4205],{"class":166},[128,124088,124089],{"class":138},"   \n",[128,124091,124092,124094,124096,124098,124100],{"class":130,"line":287},[128,124093,28064],{"class":199},[128,124095,28067],{"class":176},[128,124097,124082],{"class":176},[128,124099,124067],{"class":176},[128,124101,122604],{"class":166},[26,124103,124104],{"start":156},[29,124105,124106],{},"检查是否安装成功",[106,124108,124110],{"className":121879,"code":124109,"language":121881,"meta":112,"style":112},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[114,124111,124112,124117],{"__ignoreMap":112},[128,124113,124114],{"class":130,"line":131},[128,124115,124116],{"class":3814},"# 检查cuDNN版本命令\n",[128,124118,124119,124122,124125,124127,124129,124132,124135],{"class":130,"line":142},[128,124120,124121],{"class":199},"cat",[128,124123,124124],{"class":176}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[128,124126,28596],{"class":134},[128,124128,33720],{"class":199},[128,124130,124131],{"class":176}," CUDNN_MAJOR",[128,124133,124134],{"class":166}," -A",[128,124136,51108],{"class":166},[19,124138,124139],{},"出现下图这样的就是安装成功了",[19,124141,124142],{},[5074,124143],{"alt":112,"src":124144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[26,124146,124147],{"start":163},[29,124148,124149],{},"软链接(一般不需要)",[106,124151,124153],{"className":121879,"code":124152,"language":121881,"meta":112,"style":112},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[114,124154,124155,124160],{"__ignoreMap":112},[128,124156,124157],{"class":130,"line":131},[128,124158,124159],{"class":3814},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[128,124161,124162,124164],{"class":130,"line":142},[128,124163,28064],{"class":199},[128,124165,124166],{"class":176}," ldconfig\n",[19,124168,124169],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[106,124171,124176],{"className":124172,"code":124173,"language":124174,"meta":124175,"style":112},"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",[114,124177,124178,124183,124188,124193,124198,124203,124208],{"__ignoreMap":112},[128,124179,124180],{"class":130,"line":131},[128,124181,124182],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[128,124184,124185],{"class":130,"line":142},[128,124186,124187],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[128,124189,124190],{"class":130,"line":156},[128,124191,124192],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[128,124194,124195],{"class":130,"line":163},[128,124196,124197],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[128,124199,124200],{"class":130,"line":183},[128,124201,124202],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[128,124204,124205],{"class":130,"line":188},[128,124206,124207],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[128,124209,124210],{"class":130,"line":193},[128,124211,124212],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,124214,124215],{},"运行下方的命令",[106,124217,124219],{"className":121879,"code":124218,"language":121881,"meta":112,"style":112},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[114,124220,124221,124226,124233,124238],{"__ignoreMap":112},[128,124222,124223],{"class":130,"line":131},[128,124224,124225],{"class":3814},"# cd进入CUDA路径\n",[128,124227,124228,124230],{"class":130,"line":142},[128,124229,104643],{"class":166},[128,124231,124232],{"class":176}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[128,124234,124235],{"class":130,"line":156},[128,124236,124237],{"class":3814}," # 查看本路径下的需要软链接的文件名\n",[128,124239,124240],{"class":130,"line":163},[128,124241,124242],{"class":199}," ls\n",[19,124244,124245],{},[5074,124246],{"alt":112,"src":124247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,124249,124250,124251,21897,124254,21897,124257,124260],{},"如上图，我需要将",[114,124252,124253],{},"libcudnn_xxx_xxxxx.so.8.9.7",[114,124255,124256],{},"libcudnn_xxx_xxxxx.so.8",[114,124258,124259],{},"libcudnn_xxx_xxxxx.so","软链接",[106,124262,124264],{"className":121879,"code":124263,"language":121881,"meta":112,"style":112},"# 创建符号链接。对于每个 .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",[114,124265,124266,124271,124287,124301,124315,124329,124343,124357,124371,124376,124382,124387],{"__ignoreMap":112},[128,124267,124268],{"class":130,"line":131},[128,124269,124270],{"class":3814},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[128,124272,124273,124275,124278,124281,124284],{"class":130,"line":142},[128,124274,28064],{"class":199},[128,124276,124277],{"class":176}," ln",[128,124279,124280],{"class":166}," -sf",[128,124282,124283],{"class":176}," libcudnn_cnn_train.so.8.9.7",[128,124285,124286],{"class":176}," libcudnn_cnn_train.so.8\n",[128,124288,124289,124291,124293,124295,124298],{"class":130,"line":156},[128,124290,28064],{"class":199},[128,124292,124277],{"class":176},[128,124294,124280],{"class":166},[128,124296,124297],{"class":176}," libcudnn_adv_infer.so.8.9.7",[128,124299,124300],{"class":176}," libcudnn_adv_infer.so.8\n",[128,124302,124303,124305,124307,124309,124312],{"class":130,"line":163},[128,124304,28064],{"class":199},[128,124306,124277],{"class":176},[128,124308,124280],{"class":166},[128,124310,124311],{"class":176}," libcudnn_adv_train.so.8.9.7",[128,124313,124314],{"class":176}," libcudnn_adv_train.so.8\n",[128,124316,124317,124319,124321,124323,124326],{"class":130,"line":183},[128,124318,28064],{"class":199},[128,124320,124277],{"class":176},[128,124322,124280],{"class":166},[128,124324,124325],{"class":176}," libcudnn_cnn_infer.so.8.9.7",[128,124327,124328],{"class":176}," libcudnn_cnn_infer.so.8\n",[128,124330,124331,124333,124335,124337,124340],{"class":130,"line":188},[128,124332,28064],{"class":199},[128,124334,124277],{"class":176},[128,124336,124280],{"class":166},[128,124338,124339],{"class":176}," libcudnn.so.8.9.7",[128,124341,124342],{"class":176}," libcudnn.so.8\n",[128,124344,124345,124347,124349,124351,124354],{"class":130,"line":193},[128,124346,28064],{"class":199},[128,124348,124277],{"class":176},[128,124350,124280],{"class":166},[128,124352,124353],{"class":176}," libcudnn_ops_infer.so.8.9.7",[128,124355,124356],{"class":176}," libcudnn_ops_infer.so.8\n",[128,124358,124359,124361,124363,124365,124368],{"class":130,"line":206},[128,124360,28064],{"class":199},[128,124362,124277],{"class":176},[128,124364,124280],{"class":166},[128,124366,124367],{"class":176}," libcudnn_ops_train.so.8.9.7",[128,124369,124370],{"class":176}," libcudnn_ops_train.so.8\n",[128,124372,124373],{"class":130,"line":221},[128,124374,124375],{"class":3814},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[128,124377,124378,124380],{"class":130,"line":230},[128,124379,28064],{"class":199},[128,124381,124166],{"class":176},[128,124383,124384],{"class":130,"line":235},[128,124385,124386],{"class":3814},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[128,124388,124389,124391,124394,124397,124399,124402],{"class":130,"line":244},[128,124390,30246],{"class":199},[128,124392,124393],{"class":166}," -l",[128,124395,124396],{"class":176}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[128,124398,4205],{"class":166},[128,124400,124401],{"class":176},".so",[128,124403,122604],{"class":166},[72,124405,124407],{"id":124406},"_355-常见问题","3.5.5 常见问题",[26,124409,124410],{},[29,124411,124412],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[106,124414,124416],{"className":121879,"code":124415,"language":121881,"meta":112,"style":112},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[114,124417,124418],{"__ignoreMap":112},[128,124419,124420,124422,124424],{"class":130,"line":131},[128,124421,28064],{"class":199},[128,124423,121939],{"class":176},[128,124425,124426],{"class":176}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,124428,124429],{},"blacklist-nouveau.conf文件内容如下：",[106,124431,124433],{"className":121879,"code":124432,"language":121881,"meta":112,"style":112},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[114,124434,124435,124443,124450,124462,124472],{"__ignoreMap":112},[128,124436,124437,124440],{"class":130,"line":131},[128,124438,124439],{"class":199},"blacklist",[128,124441,124442],{"class":176}," nouveau\n",[128,124444,124445,124447],{"class":130,"line":142},[128,124446,124439],{"class":199},[128,124448,124449],{"class":176}," lbm-nouveau\n",[128,124451,124452,124454,124457,124460],{"class":130,"line":156},[128,124453,119286],{"class":199},[128,124455,124456],{"class":176}," nouveau",[128,124458,124459],{"class":176}," modeset=",[128,124461,6656],{"class":166},[128,124463,124464,124467,124469],{"class":130,"line":163},[128,124465,124466],{"class":166},"alias",[128,124468,124456],{"class":176},[128,124470,124471],{"class":176}," off\n",[128,124473,124474,124476,124479],{"class":130,"line":183},[128,124475,124466],{"class":166},[128,124477,124478],{"class":176}," lbm-nouveau",[128,124480,124471],{"class":176},[19,124482,124483],{},"接着运行下方命令",[106,124485,124487],{"className":121879,"code":124486,"language":121881,"meta":112,"style":112},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[114,124488,124489,124499,124504],{"__ignoreMap":112},[128,124490,124491,124493,124496],{"class":130,"line":131},[128,124492,28064],{"class":199},[128,124494,124495],{"class":176}," update-initramfs",[128,124497,124498],{"class":166}," -u\n",[128,124500,124501],{"class":130,"line":142},[128,124502,124503],{"class":199},"或者\n",[128,124505,124506,124508,124511],{"class":130,"line":156},[128,124507,28064],{"class":199},[128,124509,124510],{"class":176}," dracut",[128,124512,124513],{"class":166}," --force\n",[19,124515,124516],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[106,124518,124520],{"className":121879,"code":124519,"language":121881,"meta":112,"style":112},"lsmod | grep nouveau\n",[114,124521,124522],{"__ignoreMap":112},[128,124523,124524,124527,124529,124531],{"class":130,"line":131},[128,124525,124526],{"class":199},"lsmod",[128,124528,28596],{"class":134},[128,124530,33720],{"class":199},[128,124532,124442],{"class":176},[26,124534,124535],{"start":142},[29,124536,124537],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[106,124539,124541],{"className":121879,"code":124540,"language":121881,"meta":112,"style":112},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[114,124542,124543],{"__ignoreMap":112},[128,124544,124545,124547,124549],{"class":130,"line":131},[128,124546,28064],{"class":199},[128,124548,121939],{"class":176},[128,124550,124551],{"class":176}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,124553,124554],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[106,124556,124558],{"className":121879,"code":124557,"language":121881,"meta":112,"style":112},"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",[114,124559,124560,124568,124576,124584,124591,124599,124609,124617],{"__ignoreMap":112},[128,124561,124562,124565],{"class":130,"line":131},[128,124563,124564],{"class":199},"Section",[128,124566,124567],{"class":176}," \"OutputClass\"\n",[128,124569,124570,124573],{"class":130,"line":142},[128,124571,124572],{"class":199},"   Identifier",[128,124574,124575],{"class":176}," \"nvidia\"\n",[128,124577,124578,124581],{"class":130,"line":156},[128,124579,124580],{"class":199},"   MatchDriver",[128,124582,124583],{"class":176}," \"nvidia-drm\"\n",[128,124585,124586,124589],{"class":130,"line":163},[128,124587,124588],{"class":199},"   Driver",[128,124590,124575],{"class":176},[128,124592,124593,124596],{"class":130,"line":183},[128,124594,124595],{"class":199},"   Option",[128,124597,124598],{"class":176}," \"AllowEmptyInitialConfiguration\"\n",[128,124600,124601,124603,124606],{"class":130,"line":188},[128,124602,124595],{"class":199},[128,124604,124605],{"class":176}," \"PrimaryGPU\"",[128,124607,124608],{"class":176}," \"yes\"\n",[128,124610,124611,124614],{"class":130,"line":193},[128,124612,124613],{"class":199},"   ModulePath",[128,124615,124616],{"class":176}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[128,124618,124619],{"class":130,"line":206},[128,124620,124621],{"class":199},"EndSection\n",[26,124623,124624],{"start":156},[29,124625,124626],{},"安装N卡驱动提示错误",[106,124628,124630],{"className":124172,"code":124629,"language":124174,"meta":124175,"style":112},"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",[114,124631,124632],{"__ignoreMap":112},[128,124633,124634],{"class":130,"line":131},[128,124635,124629],{},[26,124637,124638],{},[29,124639,124640],{},"检查当前运行的内核版本：",[19,124642,124643],{},"运行以下命令以查看你当前正在使用的内核版本：",[106,124645,124647],{"className":120652,"code":124646,"language":120654,"meta":112,"style":112},"uname -r\n",[114,124648,124649],{"__ignoreMap":112},[128,124650,124651,124653],{"class":130,"line":131},[128,124652,73579],{"class":199},[128,124654,124655],{"class":166}," -r\n",[26,124657,124658],{"start":142},[29,124659,124660],{},"安装内核开发文件：",[19,124662,124663,124664,124667],{},"确保你已经安装了与当前内核版本相匹配的 ",[114,124665,124666],{},"kernel-devel"," 包。运行以下命令来安装：",[106,124669,124671],{"className":120652,"code":124670,"language":120654,"meta":112,"style":112},"sudo dnf install kernel-devel-$(uname -r)\n",[114,124672,124673],{"__ignoreMap":112},[128,124674,124675,124677,124679,124681,124684,124686,124688,124690],{"class":130,"line":131},[128,124676,28064],{"class":199},[128,124678,29800],{"class":176},[128,124680,27321],{"class":176},[128,124682,124683],{"class":176}," kernel-devel-",[128,124685,28586],{"class":138},[128,124687,73579],{"class":199},[128,124689,122995],{"class":166},[128,124691,180],{"class":138},[19,124693,124694],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[26,124696,124697],{"start":156},[29,124698,124699],{},"安装内核源代码（如果需要）：",[19,124701,124702],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[106,124704,124706],{"className":120652,"code":124705,"language":120654,"meta":112,"style":112},"sudo dnf install kernel-headers kernel-source\n",[114,124707,124708],{"__ignoreMap":112},[128,124709,124710,124712,124714,124716,124719],{"class":130,"line":131},[128,124711,28064],{"class":199},[128,124713,29800],{"class":176},[128,124715,27321],{"class":176},[128,124717,124718],{"class":176}," kernel-headers",[128,124720,124721],{"class":176}," kernel-source\n",[26,124723,124724],{"start":163},[29,124725,124726],{},"检查安装：",[19,124728,124729,124730,124733],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[114,124731,124732],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[106,124735,124737],{"className":120652,"code":124736,"language":120654,"meta":112,"style":112},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[114,124738,124739],{"__ignoreMap":112},[128,124740,124741,124743],{"class":130,"line":131},[128,124742,30246],{"class":199},[128,124744,124745],{"class":176}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,124747,124748,124749,124752],{},"如果仍然遇到问题，可以通过 ",[114,124750,124751],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[3659,124754,124755],{},"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":112,"searchDepth":142,"depth":142,"links":124757},[124758,124762,124772,124776,124777],{"id":121855,"depth":142,"text":121856,"children":124759},[124760,124761],{"id":121865,"depth":156,"text":121866},{"id":121875,"depth":156,"text":121876},{"id":122075,"depth":142,"text":122076,"children":124763},[124764,124765,124766,124767,124768,124769,124770,124771],{"id":122079,"depth":156,"text":122080},{"id":122149,"depth":156,"text":122150},{"id":122238,"depth":156,"text":122239},{"id":122483,"depth":156,"text":122484},{"id":122553,"depth":156,"text":122554},{"id":122620,"depth":156,"text":122621},{"id":122655,"depth":156,"text":122656},{"id":122710,"depth":156,"text":122711},{"id":122761,"depth":142,"text":122762,"children":124773},[124774,124775],{"id":122765,"depth":156,"text":122766},{"id":122845,"depth":156,"text":122846},{"id":123031,"depth":142,"text":123032},{"id":123204,"depth":142,"text":123205,"children":124778},[124779,124780,124781,124782,124783],{"id":123208,"depth":156,"text":123209},{"id":123249,"depth":156,"text":123250},{"id":123536,"depth":156,"text":123537},{"id":123910,"depth":156,"text":123911},{"id":124406,"depth":156,"text":124407},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":121847,"description":3686},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":124790,"title":124791,"body":124792,"description":3686,"extension":3687,"meta":125132,"navigation":159,"path":125133,"seo":125134,"stem":125135,"__hash__":125136},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":124793,"toc":125130},[124794,124797,124802,124805,125051,125056,125059,125095,125098,125127],[10,124795,124791],{"id":124796},"_4-命令教程长期积累",[26,124798,124799],{},[29,124800,124801],{},"大多数命令",[19,124803,124804],{},"常用 Linux 命令速查：",[106,124806,124808],{"className":120652,"code":124807,"language":120654,"meta":112,"style":112},"# 文件与目录\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",[114,124809,124810,124815,124822,124829,124837,124844,124851,124859,124867,124874,124881,124889,124893,124898,124905,124913,124920,124924,124929,124936,124944,124952,124960,124968,124972,124977,124985,124992,124999,125007,125015,125019,125024,125033,125042],{"__ignoreMap":112},[128,124811,124812],{"class":130,"line":131},[128,124813,124814],{"class":3814},"# 文件与目录\n",[128,124816,124817,124819],{"class":130,"line":142},[128,124818,30246],{"class":199},[128,124820,124821],{"class":3814},"        # 列出目录内容\n",[128,124823,124824,124826],{"class":130,"line":156},[128,124825,104643],{"class":166},[128,124827,124828],{"class":3814},"        # 切换目录\n",[128,124830,124831,124834],{"class":130,"line":163},[128,124832,124833],{"class":166},"pwd",[128,124835,124836],{"class":3814},"       # 显示当前路径\n",[128,124838,124839,124841],{"class":130,"line":183},[128,124840,104633],{"class":199},[128,124842,124843],{"class":3814},"     # 创建目录\n",[128,124845,124846,124848],{"class":130,"line":188},[128,124847,28808],{"class":199},[128,124849,124850],{"class":3814},"        # 删除文件或目录\n",[128,124852,124853,124856],{"class":130,"line":193},[128,124854,124855],{"class":199},"cp",[128,124857,124858],{"class":3814},"        # 复制文件或目录\n",[128,124860,124861,124864],{"class":130,"line":206},[128,124862,124863],{"class":199},"mv",[128,124865,124866],{"class":3814},"        # 移动\u002F重命名文件或目录\n",[128,124868,124869,124871],{"class":130,"line":221},[128,124870,104650],{"class":199},[128,124872,124873],{"class":3814},"     # 创建空文件\n",[128,124875,124876,124878],{"class":130,"line":230},[128,124877,124121],{"class":199},[128,124879,124880],{"class":3814},"       # 查看文件内容\n",[128,124882,124883,124886],{"class":130,"line":235},[128,124884,124885],{"class":199},"head\u002Ftail",[128,124887,124888],{"class":3814}," # 查看文件头部\u002F尾部\n",[128,124890,124891],{"class":130,"line":244},[128,124892,160],{"emptyLinePlaceholder":159},[128,124894,124895],{"class":130,"line":287},[128,124896,124897],{"class":3814},"# 权限管理\n",[128,124899,124900,124902],{"class":130,"line":301},[128,124901,28098],{"class":199},[128,124903,124904],{"class":3814},"     # 修改文件权限\n",[128,124906,124907,124910],{"class":130,"line":310},[128,124908,124909],{"class":199},"chown",[128,124911,124912],{"class":3814},"     # 修改文件所有者\n",[128,124914,124915,124917],{"class":130,"line":323},[128,124916,28064],{"class":199},[128,124918,124919],{"class":3814},"      # 以管理员身份执行\n",[128,124921,124922],{"class":130,"line":330},[128,124923,160],{"emptyLinePlaceholder":159},[128,124925,124926],{"class":130,"line":335},[128,124927,124928],{"class":3814},"# 系统信息\n",[128,124930,124931,124933],{"class":130,"line":340},[128,124932,73579],{"class":199},[128,124934,124935],{"class":3814},"     # 系统信息\n",[128,124937,124938,124941],{"class":130,"line":351},[128,124939,124940],{"class":199},"df",[128,124942,124943],{"class":3814},"        # 磁盘使用情况\n",[128,124945,124946,124949],{"class":130,"line":384},[128,124947,124948],{"class":199},"free",[128,124950,124951],{"class":3814},"      # 内存使用情况\n",[128,124953,124954,124957],{"class":130,"line":414},[128,124955,124956],{"class":199},"top\u002Fhtop",[128,124958,124959],{"class":3814},"  # 进程监控\n",[128,124961,124962,124965],{"class":130,"line":419},[128,124963,124964],{"class":199},"ps",[128,124966,124967],{"class":3814},"        # 查看进程\n",[128,124969,124970],{"class":130,"line":424},[128,124971,160],{"emptyLinePlaceholder":159},[128,124973,124974],{"class":130,"line":434},[128,124975,124976],{"class":3814},"# 网络\n",[128,124978,124979,124982],{"class":130,"line":447},[128,124980,124981],{"class":199},"ping",[128,124983,124984],{"class":3814},"      # 测试网络连通性\n",[128,124986,124987,124989],{"class":130,"line":459},[128,124988,30334],{"class":199},[128,124990,124991],{"class":3814},"      # 发送 HTTP 请求\n",[128,124993,124994,124996],{"class":130,"line":471},[128,124995,123645],{"class":199},[128,124997,124998],{"class":3814},"      # 下载文件\n",[128,125000,125001,125004],{"class":130,"line":483},[128,125002,125003],{"class":199},"ssh",[128,125005,125006],{"class":3814},"       # 远程登录\n",[128,125008,125009,125012],{"class":130,"line":495},[128,125010,125011],{"class":199},"scp",[128,125013,125014],{"class":3814},"       # 远程文件传输\n",[128,125016,125017],{"class":130,"line":507},[128,125018,160],{"emptyLinePlaceholder":159},[128,125020,125021],{"class":130,"line":519},[128,125022,125023],{"class":3814},"# 包管理（Debian\u002FUbuntu）\n",[128,125025,125026,125028,125030],{"class":130,"line":524},[128,125027,120724],{"class":199},[128,125029,120703],{"class":176},[128,125031,125032],{"class":3814},"   # 更新软件源\n",[128,125034,125035,125037,125039],{"class":130,"line":529},[128,125036,120724],{"class":199},[128,125038,27321],{"class":176},[128,125040,125041],{"class":3814},"  # 安装软件包\n",[128,125043,125044,125046,125048],{"class":130,"line":540},[128,125045,120724],{"class":199},[128,125047,29564],{"class":176},[128,125049,125050],{"class":3814},"   # 卸载软件包\n",[26,125052,125053],{"start":142},[29,125054,125055],{},"KDE Dolphin 以root打开",[19,125057,125058],{},"kde5",[106,125060,125062],{"className":120652,"code":125061,"language":120654,"meta":112,"style":112},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[114,125063,125064],{"__ignoreMap":112},[128,125065,125066,125069,125072,125075,125077,125079,125082,125085,125087,125090,125092],{"class":130,"line":131},[128,125067,125068],{"class":199},"pkexec",[128,125070,125071],{"class":176}," env",[128,125073,125074],{"class":176}," DISPLAY=",[128,125076,31628],{"class":138},[128,125078,31686],{"class":176},[128,125080,125081],{"class":138},"$XAUTHORITY ",[128,125083,125084],{"class":176},"KDE_SESSION_VERSION=",[128,125086,4069],{"class":166},[128,125088,125089],{"class":176}," KDE_FULL_SESSION=",[128,125091,4974],{"class":166},[128,125093,125094],{"class":176}," dolphin\n",[19,125096,125097],{},"kde6",[106,125099,125101],{"className":120652,"code":125100,"language":120654,"meta":112,"style":112},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[114,125102,125103],{"__ignoreMap":112},[128,125104,125105,125107,125109,125111,125113,125115,125117,125119,125121,125123,125125],{"class":130,"line":131},[128,125106,125068],{"class":199},[128,125108,125071],{"class":176},[128,125110,125074],{"class":176},[128,125112,31628],{"class":138},[128,125114,31686],{"class":176},[128,125116,125081],{"class":138},[128,125118,125084],{"class":176},[128,125120,4094],{"class":166},[128,125122,125089],{"class":176},[128,125124,4974],{"class":166},[128,125126,125094],{"class":176},[3659,125128,125129],{},"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":112,"searchDepth":142,"depth":142,"links":125131},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":124791,"description":3686},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":125138,"title":125139,"body":125140,"description":3686,"extension":3687,"meta":125154,"navigation":159,"path":125155,"seo":125156,"stem":125157,"__hash__":125158},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":125141,"toc":125152},[125142,125145],[10,125143,125139],{"id":125144},"_5-各种环境配置",[19,125146,125147],{},[3989,125148,125151],{"href":125149,"rel":125150},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[27352],"电控组环境搭建大全",{"title":112,"searchDepth":142,"depth":142,"links":125153},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":125139,"description":3686},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":125160,"title":125161,"body":125162,"description":3686,"extension":3687,"meta":125510,"navigation":159,"path":125511,"seo":125512,"stem":125513,"__hash__":125514},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":125163,"toc":125502},[125164,125167,125171,125175,125179,125184,125191,125195,125488,125492,125499],[10,125165,125161],{"id":125166},"_6-拓展功能",[14,125168,125170],{"id":125169},"_61-wine","6.1 Wine",[14,125172,125174],{"id":125173},"_62-android","6.2 Android",[72,125176,125178],{"id":125177},"_621-i卡a卡","6.2.1 I卡、A卡",[26,125180,125181],{},[29,125182,125183],{},"Wayland-Waydroid(体验超级好)",[19,125185,125186,125187],{},"Waydroid 官网与安装指南：",[3989,125188,125189],{"href":125189,"rel":125190},"https:\u002F\u002Fwaydro.id\u002F",[27352],[72,125192,125194],{"id":125193},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[26,125196,125197],{},[29,125198,125199,125200,125202,125203,125207,125209,125212,125217,125414],{},"QEMU-KVM虚拟机 + BlissOS-X86",[57098,125201],{},"BlissOS 官网下载：",[3989,125204,125205],{"href":125205,"rel":125206},"https:\u002F\u002Fblissos.org\u002F",[27352],[57098,125208],{},[5074,125210],{"alt":112,"src":125211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[26,125213,125214],{"start":156},[29,125215,125216],{},"比较推荐的配置",[106,125218,125220],{"className":120652,"code":125219,"language":120654,"meta":112,"style":112},"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",[114,125221,125222,125229,125239,125249,125259,125271,125281,125288,125298,125307,125316,125326,125336,125345,125355,125365,125377,125387,125396,125406],{"__ignoreMap":112},[128,125223,125224,125227],{"class":130,"line":131},[128,125225,125226],{"class":199},"qemu-system-x86_64",[128,125228,28165],{"class":166},[128,125230,125231,125234,125237],{"class":130,"line":142},[128,125232,125233],{"class":166},"        -M",[128,125235,125236],{"class":176}," q35,vmport=off",[128,125238,28165],{"class":166},[128,125240,125241,125244,125247],{"class":130,"line":156},[128,125242,125243],{"class":166},"        -accel",[128,125245,125246],{"class":176}," kvm",[128,125248,28165],{"class":166},[128,125250,125251,125254,125257],{"class":130,"line":163},[128,125252,125253],{"class":166},"        -cpu",[128,125255,125256],{"class":176}," qemu64,+sse3,+sse4.2",[128,125258,28165],{"class":166},[128,125260,125261,125264,125267,125269],{"class":130,"line":183},[128,125262,125263],{"class":166},"        -smp",[128,125265,125266],{"class":176}," 8,cores=",[128,125268,4043],{"class":166},[128,125270,28165],{"class":166},[128,125272,125273,125276,125279],{"class":130,"line":188},[128,125274,125275],{"class":166},"        -m",[128,125277,125278],{"class":176}," 6G",[128,125280,28165],{"class":166},[128,125282,125283,125286],{"class":130,"line":193},[128,125284,125285],{"class":166},"        -usb",[128,125287,28165],{"class":166},[128,125289,125290,125293,125296],{"class":130,"line":206},[128,125291,125292],{"class":166},"        -device",[128,125294,125295],{"class":176}," virtio-tablet",[128,125297,28165],{"class":166},[128,125299,125300,125302,125305],{"class":130,"line":221},[128,125301,125292],{"class":166},[128,125303,125304],{"class":176}," virtio-keyboard",[128,125306,28165],{"class":166},[128,125308,125309,125311,125314],{"class":130,"line":230},[128,125310,125292],{"class":166},[128,125312,125313],{"class":176}," usb-tablet",[128,125315,28165],{"class":166},[128,125317,125318,125321,125324],{"class":130,"line":235},[128,125319,125320],{"class":166},"        -bios",[128,125322,125323],{"class":176}," OVMF-pure-efi64.fd",[128,125325,28165],{"class":166},[128,125327,125328,125331,125334],{"class":130,"line":244},[128,125329,125330],{"class":166},"        -net",[128,125332,125333],{"class":176}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[128,125335,28165],{"class":166},[128,125337,125338,125340,125343],{"class":130,"line":287},[128,125339,125330],{"class":166},[128,125341,125342],{"class":176}," nic,model=virtio",[128,125344,28165],{"class":166},[128,125346,125347,125350,125353],{"class":130,"line":301},[128,125348,125349],{"class":166},"        -audio",[128,125351,125352],{"class":176}," sdl,model=hda",[128,125354,28165],{"class":166},[128,125356,125357,125360,125363],{"class":130,"line":310},[128,125358,125359],{"class":166},"        -display",[128,125361,125362],{"class":176}," sdl,gl=on,show-cursor=on",[128,125364,28165],{"class":166},[128,125366,125367,125369,125372,125375],{"class":130,"line":323},[128,125368,125292],{"class":166},[128,125370,125371],{"class":176}," virtio-vga-gl,xres=1920,yres=",[128,125373,125374],{"class":166},"1080",[128,125376,28165],{"class":166},[128,125378,125379,125382,125385],{"class":130,"line":330},[128,125380,125381],{"class":166},"        -drive",[128,125383,125384],{"class":176}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[128,125386,28165],{"class":166},[128,125388,125389,125391,125394],{"class":130,"line":335},[128,125390,125381],{"class":166},[128,125392,125393],{"class":176}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[128,125395,28165],{"class":166},[128,125397,125398,125401,125404],{"class":130,"line":340},[128,125399,125400],{"class":166},"        -monitor",[128,125402,125403],{"class":176}," stdio",[128,125405,28165],{"class":166},[128,125407,125408,125411],{"class":130,"line":351},[128,125409,125410],{"class":166},"        -serial",[128,125412,125413],{"class":176}," none\n",[26,125415,125416],{"start":183},[29,125417,125418,125419],{},"常用操作：",[26,125420,125421,125424,125480],{},[29,125422,125423],{},"全屏：Ctrl+Alt+F",[29,125425,125426,125427,125432],{},"adb调试",[26,125428,125429],{},[29,125430,125431],{},"使Linux与Android用ADB连接。",[106,125433,125435],{"className":120652,"code":125434,"language":120654,"meta":112,"style":112},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[114,125436,125437,125442,125453,125458,125470,125475],{"__ignoreMap":112},[128,125438,125439],{"class":130,"line":131},[128,125440,125441],{"class":3814},"# 连接安卓\n",[128,125443,125444,125447,125450],{"class":130,"line":142},[128,125445,125446],{"class":199},"adb",[128,125448,125449],{"class":176}," connect",[128,125451,125452],{"class":166}," 127.0.0.1\n",[128,125454,125455],{"class":130,"line":156},[128,125456,125457],{"class":3814},"# 打开shell\n",[128,125459,125460,125462,125464,125467],{"class":130,"line":163},[128,125461,125446],{"class":199},[128,125463,30368],{"class":166},[128,125465,125466],{"class":176}," 127.0.0.1:5555",[128,125468,125469],{"class":176}," shell\n",[128,125471,125472],{"class":130,"line":183},[128,125473,125474],{"class":3814},"# 使用root权限\n",[128,125476,125477],{"class":130,"line":188},[128,125478,125479],{"class":199},"su\n",[29,125481,125482,125483],{},"中文输入法",[26,125484,125485],{},[29,125486,125487],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,125489,125491],{"id":125490},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,125493,125494,125495],{},"rEFInd 官网与文档：",[3989,125496,125497],{"href":125497,"rel":125498},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[27352],[3659,125500,125501],{},"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":112,"searchDepth":142,"depth":142,"links":125503},[125504,125505,125509],{"id":125169,"depth":142,"text":125170},{"id":125173,"depth":142,"text":125174,"children":125506},[125507,125508],{"id":125177,"depth":156,"text":125178},{"id":125193,"depth":156,"text":125194},{"id":125490,"depth":142,"text":125491},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":125161,"description":3686},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":125516,"title":125517,"body":125518,"description":3686,"extension":3687,"meta":128816,"navigation":159,"path":128817,"seo":128818,"stem":128819,"__hash__":128820},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":125519,"toc":128790},[125520,125523,125527,125530,125537,125787,125790,125862,125865,125869,125873,125878,125881,125884,125887,125892,125895,125898,125901,125906,125909,125914,125917,125920,125925,125928,125933,125936,125940,125944,125947,125952,125955,125969,125972,125975,125984,125987,125996,125999,126002,126011,126014,126023,126026,126029,126038,126041,126044,126059,126062,126065,126074,126079,126082,126085,126094,126097,126106,126109,126118,126121,126130,126135,126138,126146,126151,126154,126163,126166,126174,126179,126182,126191,126194,126197,126201,126204,126209,126212,126217,126231,126236,126241,126252,126257,126263,126268,126283,126288,126291,126296,126301,126306,126314,126319,126326,126331,126342,126347,126350,126354,126357,126360,126365,126368,126387,126392,126395,126404,126409,126412,126434,126437,126467,126470,126475,126478,126492,126497,126516,126519,126522,126527,126539,126544,126549,126552,126557,126560,126575,126578,126583,126588,126592,126597,126637,126640,126644,126650,126656,126661,126664,126671,126676,126683,126686,126689,126696,126710,126713,126773,126776,126790,126802,126805,126808,126811,126875,126878,126881,126884,126904,126907,126912,126919,126923,126926,126930,126935,126940,126944,126947,126950,126992,126997,127000,127022,127037,127039,127044,127056,127116,127118,127120,127174,127176,127178,127184,127189,127192,127197,127201,127204,127266,127271,127274,127276,127280,127292,127374,127376,127378,127432,127438,127440,127444,127449,127451,127456,127460,127480,127515,127519,127522,127525,127528,127535,127538,127550,127553,127568,127571,127590,127638,127641,127658,127661,127675,127680,127683,127692,127707,127719,127756,127761,127770,127775,127780,127806,127815,127819,127823,127828,127831,127835,127839,127844,127847,127852,127855,127860,127863,127868,127871,127875,127880,127883,127888,127891,127895,127900,127903,127908,127911,127916,127919,127923,127928,127931,127936,127939,127944,127947,127951,127956,127959,127964,127967,127972,127975,127980,127983,127988,127991,127996,127999,128003,128008,128011,128016,128023,128027,128032,128035,128040,128043,128047,128052,128055,128058,128061,128064,128067,128071,128074,128084,128089,128094,128116,128121,128126,128133,128137,128142,128145,128148,128153,128156,128159,128162,128165,128168,128171,128174,128177,128180,128183,128186,128189,128194,128199,128204,128209,128214,128219,128224,128227,128231,128234,128238,128243,128248,128253,128258,128262,128268,128276,128281,128284,128289,128304,128307,128312,128346,128361,128364,128419,128445,128457,128460,128469,128472,128487,128492,128495,128501,128506,128509,128514,128517,128522,128527,128534,128537,128552,128555,128590,128595,128603,128641,128644,128647,128652,128655,128660,128671,128705,128710,128713,128722,128727,128733,128736,128741,128750,128755,128758,128761,128766,128774,128777,128782,128787],[10,125521,125517],{"id":125522},"_7-其他操作",[14,125524,125526],{"id":125525},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,125528,125529],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,125531,125532,125533,125536],{},"进入工控机的硬盘目录，进入",[114,125534,125535],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[106,125538,125542],{"className":125539,"code":125540,"language":125541,"meta":112,"style":112},"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",[114,125543,125544,125552,125563,125570,125577,125589,125596,125608,125619,125630,125637,125644,125651,125663,125675,125682,125694,125706,125713,125725,125737,125749,125760,125767,125778],{"__ignoreMap":112},[128,125545,125546,125549],{"class":130,"line":131},[128,125547,125548],{"class":54685},"network",[128,125550,125551],{"class":138},": \n",[128,125553,125554,125557,125559,125561],{"class":130,"line":142},[128,125555,125556],{"class":54685},"  version",[128,125558,1967],{"class":138},[128,125560,409],{"class":166},[128,125562,6247],{"class":138},[128,125564,125565,125568],{"class":130,"line":156},[128,125566,125567],{"class":54685},"  wifis",[128,125569,125551],{"class":138},[128,125571,125572,125575],{"class":130,"line":163},[128,125573,125574],{"class":54685},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[128,125576,125551],{"class":138},[128,125578,125579,125582,125584,125587],{"class":130,"line":183},[128,125580,125581],{"class":54685},"      renderer",[128,125583,1967],{"class":138},[128,125585,125586],{"class":176},"NetworkManager",[128,125588,6247],{"class":138},[128,125590,125591,125594],{"class":130,"line":188},[128,125592,125593],{"class":54685},"      match",[128,125595,125551],{"class":138},[128,125597,125598,125601,125603,125606],{"class":130,"line":193},[128,125599,125600],{"class":54685},"        name",[128,125602,1967],{"class":138},[128,125604,125605],{"class":176},"\"wlan0\"",[128,125607,6247],{"class":138},[128,125609,125610,125613,125615,125617],{"class":130,"line":206},[128,125611,125612],{"class":54685},"      dhcp4",[128,125614,1967],{"class":138},[128,125616,4974],{"class":166},[128,125618,6247],{"class":138},[128,125620,125621,125624,125626,125628],{"class":130,"line":221},[128,125622,125623],{"class":54685},"      dhcp6",[128,125625,1967],{"class":138},[128,125627,4974],{"class":166},[128,125629,6247],{"class":138},[128,125631,125632,125635],{"class":130,"line":230},[128,125633,125634],{"class":54685},"      access-points",[128,125636,125551],{"class":138},[128,125638,125639,125642],{"class":130,"line":235},[128,125640,125641],{"class":176},"        \"EMIS_Vinci_Robocon_5G\"",[128,125643,125551],{"class":138},[128,125645,125646,125649],{"class":130,"line":244},[128,125647,125648],{"class":54685},"          auth",[128,125650,125551],{"class":138},[128,125652,125653,125656,125658,125661],{"class":130,"line":287},[128,125654,125655],{"class":54685},"            key-management",[128,125657,1967],{"class":138},[128,125659,125660],{"class":176},"\"psk\"",[128,125662,6247],{"class":138},[128,125664,125665,125668,125670,125673],{"class":130,"line":301},[128,125666,125667],{"class":54685},"            password",[128,125669,1967],{"class":138},[128,125671,125672],{"class":176},"\"vinci666\"",[128,125674,6247],{"class":138},[128,125676,125677,125680],{"class":130,"line":310},[128,125678,125679],{"class":54685},"          networkmanager",[128,125681,125551],{"class":138},[128,125683,125684,125687,125689,125692],{"class":130,"line":323},[128,125685,125686],{"class":54685},"            uuid",[128,125688,1967],{"class":138},[128,125690,125691],{"class":176},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[128,125693,6247],{"class":138},[128,125695,125696,125699,125701,125704],{"class":130,"line":330},[128,125697,125698],{"class":54685},"            name",[128,125700,1967],{"class":138},[128,125702,125703],{"class":176},"\"EMIS_Vinci_Robocon_5G\"",[128,125705,6247],{"class":138},[128,125707,125708,125711],{"class":130,"line":335},[128,125709,125710],{"class":54685},"            passthrough",[128,125712,125551],{"class":138},[128,125714,125715,125718,125720,125723],{"class":130,"line":340},[128,125716,125717],{"class":54685},"              wifi-security.auth-alg",[128,125719,1967],{"class":138},[128,125721,125722],{"class":176},"\"open\"",[128,125724,6247],{"class":138},[128,125726,125727,125730,125732,125735],{"class":130,"line":351},[128,125728,125729],{"class":54685},"              ipv6.addr-gen-mode",[128,125731,1967],{"class":138},[128,125733,125734],{"class":176},"\"default\"",[128,125736,6247],{"class":138},[128,125738,125739,125742,125744,125747],{"class":130,"line":384},[128,125740,125741],{"class":54685},"              ipv6.ip6-privacy",[128,125743,1967],{"class":138},[128,125745,125746],{"class":176},"\"-1\"",[128,125748,6247],{"class":138},[128,125750,125751,125754,125756,125758],{"class":130,"line":414},[128,125752,125753],{"class":54685},"              proxy._",[128,125755,1967],{"class":138},[128,125757,11209],{"class":176},[128,125759,6247],{"class":138},[128,125761,125762,125765],{"class":130,"line":419},[128,125763,125764],{"class":54685},"      networkmanager",[128,125766,125551],{"class":138},[128,125768,125769,125772,125774,125776],{"class":130,"line":424},[128,125770,125771],{"class":54685},"        uuid",[128,125773,1967],{"class":138},[128,125775,125691],{"class":176},[128,125777,6247],{"class":138},[128,125779,125780,125782,125784],{"class":130,"line":434},[128,125781,125600],{"class":54685},[128,125783,1967],{"class":138},[128,125785,125786],{"class":176},"\"EMIS_Vinci_Robocon_5G\"\n",[19,125788,125789],{},"将其改为新wifi的名和密码：",[106,125791,125793],{"className":125539,"code":125792,"language":125541,"meta":112,"style":112},"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",[114,125794,125795,125801,125810,125816,125823,125832,125840,125846,125852],{"__ignoreMap":112},[128,125796,125797,125799],{"class":130,"line":131},[128,125798,125548],{"class":54685},[128,125800,241],{"class":138},[128,125802,125803,125805,125807],{"class":130,"line":142},[128,125804,125556],{"class":54685},[128,125806,1967],{"class":138},[128,125808,125809],{"class":166},"2\n",[128,125811,125812,125814],{"class":130,"line":156},[128,125813,125567],{"class":54685},[128,125815,241],{"class":138},[128,125817,125818,125821],{"class":130,"line":163},[128,125819,125820],{"class":54685},"    wlan0",[128,125822,241],{"class":138},[128,125824,125825,125827,125829],{"class":130,"line":183},[128,125826,125612],{"class":54685},[128,125828,1967],{"class":138},[128,125830,125831],{"class":166},"true\n",[128,125833,125834,125836,125838],{"class":130,"line":188},[128,125835,125623],{"class":54685},[128,125837,1967],{"class":138},[128,125839,125831],{"class":166},[128,125841,125842,125844],{"class":130,"line":193},[128,125843,125634],{"class":54685},[128,125845,241],{"class":138},[128,125847,125848,125850],{"class":130,"line":206},[128,125849,125641],{"class":176},[128,125851,241],{"class":138},[128,125853,125854,125857,125859],{"class":130,"line":221},[128,125855,125856],{"class":54685},"          password",[128,125858,1967],{"class":138},[128,125860,125861],{"class":176},"\"vinci666\"\n",[19,125863,125864],{},"工控机开机即可连上网。",[14,125866,125868],{"id":125867},"_72-ssh远程开发","7.2 SSH远程开发",[72,125870,125872],{"id":125871},"_721-环境准备","7.2.1 环境准备",[19,125874,125875],{},[3903,125876,125877],{},"1.硬件准备",[19,125879,125880],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,125882,125883],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,125885,125886],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,125888,125889],{},[3903,125890,125891],{},"2.设置固定IP",[19,125893,125894],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,125896,125897],{},"1.进入设置界面",[19,125899,125900],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,125902,125903],{},[5074,125904],{"alt":112,"src":125905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,125907,125908],{},"2.配置所连接的网络",[19,125910,125911],{},[5074,125912],{"alt":112,"src":125913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,125915,125916],{},"3.设置固定IP",[19,125918,125919],{},"查看当前IP地址。",[19,125921,125922],{},[5074,125923],{"alt":112,"src":125924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,125926,125927],{},"设置固定IP。",[19,125929,125930],{},[5074,125931],{"alt":112,"src":125932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,125934,125935],{},"至此，IP配置完毕。",[72,125937,125939],{"id":125938},"_722-环境搭建","7.2.2 环境搭建",[19,125941,125942],{},[3903,125943,29239],{},[19,125945,125946],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,125948,125949],{},[3903,125950,125951],{},"实现",[19,125953,125954],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[26,125956,125957,125960,125963,125966],{},[29,125958,125959],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[29,125961,125962],{},"远程主机启动SSH服务；",[29,125964,125965],{},"本地主机登陆远程主机；",[29,125967,125968],{},"实现数据传输。",[19,125970,125971],{},"1.安装SSH客户端与服务端",[19,125973,125974],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[106,125976,125978],{"className":124172,"code":125977,"language":124174,"meta":124175,"style":112}," sudo apt install openssh-server\n",[114,125979,125980],{"__ignoreMap":112},[128,125981,125982],{"class":130,"line":131},[128,125983,125977],{},[19,125985,125986],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[106,125988,125990],{"className":124172,"code":125989,"language":124174,"meta":124175,"style":112},"sudo apt install openssh-client\n",[114,125991,125992],{"__ignoreMap":112},[128,125993,125994],{"class":130,"line":131},[128,125995,125989],{},[19,125997,125998],{},"2.远程主机启动SSH服务",[19,126000,126001],{},"远程主机启动 ssh 服务命令如下：",[106,126003,126005],{"className":124172,"code":126004,"language":124174,"meta":124175,"style":112},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[114,126006,126007],{"__ignoreMap":112},[128,126008,126009],{"class":130,"line":131},[128,126010,126004],{},[19,126012,126013],{},"启动后可使用如下命令查看服务是否正常运行：",[106,126015,126017],{"className":124172,"code":126016,"language":124174,"meta":124175,"style":112},"ps -e | grep ssh\n",[114,126018,126019],{"__ignoreMap":112},[128,126020,126021],{"class":130,"line":131},[128,126022,126016],{},[19,126024,126025],{},"如果启动成功，会包含 sshd 程序。",[19,126027,126028],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[106,126030,126032],{"className":124172,"code":126031,"language":124174,"meta":124175,"style":112},"sudo systemctl enable ssh\n",[114,126033,126034],{"__ignoreMap":112},[128,126035,126036],{"class":130,"line":131},[128,126037,126031],{},[19,126039,126040],{},"3.本地远程登录",[19,126042,126043],{},"登录远程主机可以调用如下命令:",[106,126045,126047],{"className":120652,"code":126046,"language":120654,"meta":112,"style":112},"ssh -X 用户名@ip地址\n",[114,126048,126049],{"__ignoreMap":112},[128,126050,126051,126053,126056],{"class":130,"line":131},[128,126052,125003],{"class":199},[128,126054,126055],{"class":166}," -X",[128,126057,126058],{"class":176}," 用户名@ip地址\n",[19,126060,126061],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,126063,126064],{},"如果退出，可以调用exit命令：",[106,126066,126068],{"className":124172,"code":126067,"language":124174,"meta":124175,"style":112},"exit\n",[114,126069,126070],{"__ignoreMap":112},[128,126071,126072],{"class":130,"line":131},[128,126073,126067],{},[19,126075,126076],{},[3903,126077,126078],{},"4.实现数据传输",[19,126080,126081],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,126083,126084],{},"上传文件指令格式如下：",[106,126086,126088],{"className":124172,"code":126087,"language":124174,"meta":124175,"style":112},"scp 本地文件路径 账号@ip:路径\n",[114,126089,126090],{"__ignoreMap":112},[128,126091,126092],{"class":130,"line":131},[128,126093,126087],{},[19,126095,126096],{},"上传文件夹指令格式如下：",[106,126098,126100],{"className":124172,"code":126099,"language":124174,"meta":124175,"style":112},"scp -r 本地文件夹路径 账号@ip:路径\n",[114,126101,126102],{"__ignoreMap":112},[128,126103,126104],{"class":130,"line":131},[128,126105,126099],{},[19,126107,126108],{},"下载文件指令格式如下：",[106,126110,126112],{"className":124172,"code":126111,"language":124174,"meta":124175,"style":112},"scp 账号@ip:路径 本地文件夹路径\n",[114,126113,126114],{"__ignoreMap":112},[128,126115,126116],{"class":130,"line":131},[128,126117,126111],{},[19,126119,126120],{},"下载文件夹指令格式如下：",[106,126122,126124],{"className":124172,"code":126123,"language":124174,"meta":124175,"style":112},"scp -r 账号@ip:路径 本地文件夹路径\n",[114,126125,126126],{"__ignoreMap":112},[128,126127,126128],{"class":130,"line":131},[128,126129,126123],{},[19,126131,126132],{},[3903,126133,126134],{},"优化",[19,126136,126137],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[26,126139,126140,126143],{},[29,126141,126142],{},"本地生成密钥对；",[29,126144,126145],{},"将公钥上传至远程主机。",[19,126147,126148],{},[3903,126149,126150],{},"1.生成密钥对",[19,126152,126153],{},"本地客户端生成公私钥：（一路回车默认即可）",[106,126155,126157],{"className":124172,"code":126156,"language":124174,"meta":124175,"style":112},"ssh-keygen\n",[114,126158,126159],{"__ignoreMap":112},[128,126160,126161],{"class":130,"line":131},[128,126162,126156],{},[19,126164,126165],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[26,126167,126168,126171],{},[29,126169,126170],{},"id_rsa （私钥）；",[29,126172,126173],{},"id_rsa.pub (公钥)。",[19,126175,126176],{},[3903,126177,126178],{},"2.公钥上传",[19,126180,126181],{},"上传指令如下：",[106,126183,126185],{"className":124172,"code":126184,"language":124174,"meta":124175,"style":112},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[114,126186,126187],{"__ignoreMap":112},[128,126188,126189],{"class":130,"line":131},[128,126190,126184],{},[19,126192,126193],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,126195,126196],{},"以后再远程登录就无需录入密码了。",[72,126198,126200],{"id":126199},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,126202,126203],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,126205,126206],{},[3903,126207,126208],{},"1.准备工作",[19,126210,126211],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,126213,126214],{},[3903,126215,126216],{},"2.为VScode安装远程开发插件",[19,126218,126219,126220,126223,126224,126227,126228,1842],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[114,126221,126222],{},"扩展：商店","的搜索栏输入",[114,126225,126226],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[114,126229,126230],{},"安装",[19,126232,126233],{},[5074,126234],{"alt":112,"src":126235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,126237,126238],{},[3903,126239,126240],{},"3.配置远程连接",[19,126242,126243,126244,126247,126248,126251],{},"步骤1：使用快捷键",[114,126245,126246],{},"ctrl + shift + p","打开命令输入窗口，并输入",[114,126249,126250],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,126253,126254],{},[5074,126255],{"alt":112,"src":126256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,126258,126259,126260,1842],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[114,126261,126262],{},"Add New SSH Host",[19,126264,126265],{},[5074,126266],{"alt":112,"src":126267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,126269,126270,126271,126274,126275,126278,126279,126282],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[114,126272,126273],{},"ssh +X ubuntu@192.168.43.164","，其中，",[114,126276,126277],{},"ubuntu","需要替换为你的登录用户名，",[114,126280,126281],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,126284,126285],{},[5074,126286],{"alt":112,"src":126287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,126289,126290],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,126292,126293],{},[5074,126294],{"alt":112,"src":126295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,126297,126298],{},[5074,126299],{"alt":112,"src":126300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,126302,126303],{},[3903,126304,126305],{},"4.使用",[19,126307,126308,126309,126247,126311,126313],{},"步骤1：继续使用快捷键",[114,126310,126246],{},[114,126312,126250],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,126315,126316],{},[5074,126317],{"alt":112,"src":126318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,126320,126321,126322,126325],{},"或者，也可以点击侧边栏的",[114,126323,126324],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,126327,126328],{},[5074,126329],{"alt":112,"src":126330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,126332,126333,126334,126337,126338,126341],{},"步骤2：选择菜单栏的",[114,126335,126336],{},"文件","下的",[114,126339,126340],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,126343,126344],{},[5074,126345],{"alt":112,"src":126346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,126348,126349],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,126351,126353],{"id":126352},"_73-远程桌面","7.3 远程桌面",[19,126355,126356],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,126358,126359],{},"我们选择使用VNC来看。",[26,126361,126362],{},[29,126363,126364],{},"安装VNC服务器：",[19,126366,126367],{},"这里以TigerVNC为例进行安装：",[106,126369,126371],{"className":120652,"code":126370,"language":120654,"meta":112,"style":112},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[114,126372,126373],{"__ignoreMap":112},[128,126374,126375,126377,126379,126381,126384],{"class":130,"line":131},[128,126376,28064],{"class":199},[128,126378,120673],{"class":176},[128,126380,27321],{"class":176},[128,126382,126383],{"class":176}," tigervnc-standalone-server",[128,126385,126386],{"class":176}," tigervnc-common\n",[26,126388,126389],{"start":142},[29,126390,126391],{},"设置VNC密码：",[19,126393,126394],{},"为VNC用户设置密码，运行以下命令：",[106,126396,126398],{"className":120652,"code":126397,"language":120654,"meta":112,"style":112},"vncpasswd\n",[114,126399,126400],{"__ignoreMap":112},[128,126401,126402],{"class":130,"line":131},[128,126403,126397],{"class":199},[26,126405,126406],{"start":156},[29,126407,126408],{},"配置VNC启动脚本:",[19,126410,126411],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[106,126413,126415],{"className":120652,"code":126414,"language":120654,"meta":112,"style":112},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[114,126416,126417,126426],{"__ignoreMap":112},[128,126418,126419,126421,126423],{"class":130,"line":131},[128,126420,104633],{"class":199},[128,126422,32700],{"class":166},[128,126424,126425],{"class":176}," ~\u002F.vnc\n",[128,126427,126428,126431],{"class":130,"line":142},[128,126429,126430],{"class":199},"nano",[128,126432,126433],{"class":176}," ~\u002F.vnc\u002Fxstartup\n",[19,126435,126436],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[106,126438,126440],{"className":120652,"code":126439,"language":120654,"meta":112,"style":112},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[114,126441,126442,126447,126455,126462],{"__ignoreMap":112},[128,126443,126444],{"class":130,"line":131},[128,126445,126446],{"class":3814},"#!\u002Fbin\u002Fsh\n",[128,126448,126449,126452],{"class":130,"line":142},[128,126450,126451],{"class":166},"unset",[128,126453,126454],{"class":176}," SESSION_MANAGER\n",[128,126456,126457,126459],{"class":130,"line":156},[128,126458,126451],{"class":166},[128,126460,126461],{"class":176}," DBUS_SESSION_BUS_ADDRESS\n",[128,126463,126464],{"class":130,"line":163},[128,126465,126466],{"class":199},"gnome-session\n",[19,126468,126469],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[26,126471,126472],{"start":163},[29,126473,126474],{},"给予执行权限：",[19,126476,126477],{},"为xstartup文件设置执行权限：",[106,126479,126481],{"className":120652,"code":126480,"language":120654,"meta":112,"style":112},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[114,126482,126483],{"__ignoreMap":112},[128,126484,126485,126487,126490],{"class":130,"line":131},[128,126486,28098],{"class":199},[128,126488,126489],{"class":176}," +x",[128,126491,126433],{"class":176},[26,126493,126494],{"start":183},[29,126495,126496],{},"启动VNC服务器：",[106,126498,126500],{"className":120652,"code":126499,"language":120654,"meta":112,"style":112},"vncserver -geometry 1920x1080 -localhost=0\n",[114,126501,126502],{"__ignoreMap":112},[128,126503,126504,126507,126510,126513],{"class":130,"line":131},[128,126505,126506],{"class":199},"vncserver",[128,126508,126509],{"class":166}," -geometry",[128,126511,126512],{"class":176}," 1920x1080",[128,126514,126515],{"class":166}," -localhost=0\n",[19,126517,126518],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,126520,126521],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[26,126523,126524],{"start":188},[29,126525,126526],{},"查看已开启的VNC服务器：",[106,126528,126530],{"className":120652,"code":126529,"language":120654,"meta":112,"style":112},"vncserver -list\n",[114,126531,126532],{"__ignoreMap":112},[128,126533,126534,126536],{"class":130,"line":131},[128,126535,126506],{"class":199},[128,126537,126538],{"class":166}," -list\n",[19,126540,126541],{},[5074,126542],{"alt":112,"src":126543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[26,126545,126546],{"start":193},[29,126547,126548],{},"连接到VNC服务器：",[19,126550,126551],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[26,126553,126554],{"start":206},[29,126555,126556],{},"停止VNC服务器：",[19,126558,126559],{},"如果需要停止VNC服务器，可以使用以下命令：",[106,126561,126563],{"className":120652,"code":126562,"language":120654,"meta":112,"style":112},"vncserver -kill :1\n",[114,126564,126565],{"__ignoreMap":112},[128,126566,126567,126569,126572],{"class":130,"line":131},[128,126568,126506],{"class":199},[128,126570,126571],{"class":166}," -kill",[128,126573,126574],{"class":176}," :1\n",[19,126576,126577],{},"将:1替换为你实际使用的显示编号。",[19,126579,126580],{},[5074,126581],{"alt":112,"src":126582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,126584,126585],{},[5074,126586],{"alt":112,"src":126587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,126589,126591],{"id":126590},"_74-usb端口设置","7.4 USB端口设置",[19,126593,126594],{},[3903,126595,126596],{},"首先先配置好权限",[106,126598,126600],{"className":120652,"code":126599,"language":120654,"meta":112,"style":112},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[114,126601,126602,126607,126620,126627,126632],{"__ignoreMap":112},[128,126603,126604],{"class":130,"line":131},[128,126605,126606],{"class":3814},"# 将用户权限提高\n",[128,126608,126609,126611,126613,126615,126618],{"class":130,"line":142},[128,126610,28064],{"class":199},[128,126612,30059],{"class":176},[128,126614,30062],{"class":166},[128,126616,126617],{"class":176}," dialout",[128,126619,30067],{"class":138},[128,126621,126622,126624],{"class":130,"line":156},[128,126623,30086],{"class":199},[128,126625,126626],{"class":176}," dialout\n",[128,126628,126629],{"class":130,"line":163},[128,126630,126631],{"class":3814},"# 查看下面命令是否输出dialout（若输出才正常）\n",[128,126633,126634],{"class":130,"line":183},[128,126635,126636],{"class":199},"groups\n",[19,126638,126639],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[72,126641,126643],{"id":126642},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,126645,126646,126649],{},[3903,126647,126648],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,126651,126652,126655],{},[3903,126653,126654],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,126657,126658],{},[3903,126659,126660],{},"流程如下：",[19,126662,126663],{},"（1）.查找设备idVendor和idProduct",[19,126665,126666,126667,126670],{},"接入两个USB设备，在终端调用指令",[114,126668,126669],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,126672,126673],{},[5074,126674],{"alt":112,"src":126675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,126677,126678,126679,126682],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[114,126680,126681],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,126684,126685],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,126687,126688],{},"（2）.编写映射规则",[19,126690,126691,126692,126695],{},"在",[114,126693,126694],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[106,126697,126699],{"className":120652,"code":126698,"language":120654,"meta":112,"style":112},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[114,126700,126701],{"__ignoreMap":112},[128,126702,126703,126705,126707],{"class":130,"line":131},[128,126704,28064],{"class":199},[128,126706,121939],{"class":176},[128,126708,126709],{"class":176}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,126711,126712],{},"输入如下内容：",[106,126714,126716],{"className":120652,"code":126715,"language":120654,"meta":112,"style":112},"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",[114,126717,126718,126748],{"__ignoreMap":112},[128,126719,126720,126723,126725,126728,126731,126734,126737,126739,126742,126745],{"class":130,"line":131},[128,126721,126722],{"class":138},"KERNEL",[128,126724,270],{"class":134},[128,126726,126727],{"class":176},"=\"ttyUSB*\",",[128,126729,126730],{"class":199}," ATTRS",[128,126732,126733],{"class":176},"{idVendor}==",[128,126735,126736],{"class":199},"\"10c4\"",[128,126738,4128],{"class":199},[128,126740,126741],{"class":176}," ATTRS{idProduct}==\"ea60\",",[128,126743,126744],{"class":176}," MODE:=\"0777\",",[128,126746,126747],{"class":176}," SYMLINK+=\"mylidar\"\n",[128,126749,126750,126752,126754,126756,126758,126760,126763,126765,126768,126770],{"class":130,"line":142},[128,126751,126722],{"class":138},[128,126753,270],{"class":134},[128,126755,126727],{"class":176},[128,126757,126730],{"class":199},[128,126759,126733],{"class":176},[128,126761,126762],{"class":199},"\"1a86\"",[128,126764,4128],{"class":199},[128,126766,126767],{"class":176}," ATTRS{idProduct}==\"7523\",",[128,126769,126744],{"class":176},[128,126771,126772],{"class":176}," SYMLINK+=\"mycar\"\n",[19,126774,126775],{},"代码解释：",[4752,126777,126778,126781,126784,126787],{},[29,126779,126780],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[29,126782,126783],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[29,126785,126786],{},"SYMLINK是符号连接，即绑定的别名；",[29,126788,126789],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,126791,126792,126793,126796,126799],{},"***小提示：***",[27040,126794,126795],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[114,126797,126798],{},"\u002Fetc\u002Fudev\u002Frule.d",[27040,126800,126801],{},"目录即可。",[19,126803,126804],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,126806,126807],{},"（3）.使规则生效",[19,126809,126810],{},"在终端下输入如下指令：",[106,126812,126814],{"className":120652,"code":126813,"language":120654,"meta":112,"style":112},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[114,126815,126816,126821,126833,126844,126848,126853,126866],{"__ignoreMap":112},[128,126817,126818],{"class":130,"line":131},[128,126819,126820],{"class":3814},"# Ubuntu用下方命令\n",[128,126822,126823,126825,126827,126830],{"class":130,"line":142},[128,126824,28064],{"class":199},[128,126826,123404],{"class":176},[128,126828,126829],{"class":176}," udev",[128,126831,126832],{"class":176}," reload\n",[128,126834,126835,126837,126839,126841],{"class":130,"line":156},[128,126836,28064],{"class":199},[128,126838,123404],{"class":176},[128,126840,126829],{"class":176},[128,126842,126843],{"class":176}," restart\n",[128,126845,126846],{"class":130,"line":163},[128,126847,160],{"emptyLinePlaceholder":159},[128,126849,126850],{"class":130,"line":183},[128,126851,126852],{"class":3814},"#Fedora用下方命令\n",[128,126854,126855,126857,126860,126863],{"class":130,"line":188},[128,126856,28064],{"class":199},[128,126858,126859],{"class":176}," udevadm",[128,126861,126862],{"class":176}," control",[128,126864,126865],{"class":166}," --reload\n",[128,126867,126868,126870,126872],{"class":130,"line":193},[128,126869,28064],{"class":199},[128,126871,126859],{"class":176},[128,126873,126874],{"class":176}," trigger\n",[19,126876,126877],{},"再重新插拔设备即可。",[19,126879,126880],{},"（4）.测试",[19,126882,126883],{},"终端下输入如下指令",[106,126885,126887],{"className":120652,"code":126886,"language":120654,"meta":112,"style":112},"ll \u002Fdev | grep ttyUSB\n",[114,126888,126889],{"__ignoreMap":112},[128,126890,126891,126894,126897,126899,126901],{"class":130,"line":131},[128,126892,126893],{"class":199},"ll",[128,126895,126896],{"class":176}," \u002Fdev",[128,126898,28596],{"class":134},[128,126900,33720],{"class":199},[128,126902,126903],{"class":176}," ttyUSB\n",[19,126905,126906],{},"运行结果如下：",[19,126908,126909],{},[5074,126910],{"alt":112,"src":126911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,126913,126914,126915,126918],{},"也可以多次插拔USB设备，会发现设备端口",[114,126916,126917],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,126920,126921],{},[3903,126922,121320],{},[19,126924,126925],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[72,126927,126929],{"id":126928},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,126931,126932,126934],{},[3903,126933,126648],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,126936,126937,126939],{},[3903,126938,126654],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,126941,126942],{},[3903,126943,126660],{},[19,126945,126946],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,126948,126949],{},"调用如下指令查看第一台雷达的USB信息：",[106,126951,126953],{"className":120652,"code":126952,"language":120654,"meta":112,"style":112},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[114,126954,126955,126975],{"__ignoreMap":112},[128,126956,126957,126960,126962,126965,126968,126970,126972],{"class":130,"line":131},[128,126958,126959],{"class":199},"udevadm",[128,126961,73196],{"class":176},[128,126963,126964],{"class":166}," --attribute-walk",[128,126966,126967],{"class":166}," --name=\u002Fdev\u002FttyUSB0",[128,126969,28596],{"class":134},[128,126971,33720],{"class":199},[128,126973,126974],{"class":176}," KERNELS\n",[128,126976,126977,126979,126981,126983,126986,126988,126990],{"class":130,"line":142},[128,126978,126959],{"class":199},[128,126980,73196],{"class":176},[128,126982,126964],{"class":166},[128,126984,126985],{"class":166}," --name=\u002Fdev\u002FttyACM0",[128,126987,28596],{"class":134},[128,126989,33720],{"class":199},[128,126991,126974],{"class":176},[19,126993,126994],{},[5074,126995],{"alt":112,"src":126996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,126998,126999],{},"调用如下指令查看第二台雷达的USB信息：",[106,127001,127003],{"className":120652,"code":127002,"language":120654,"meta":112,"style":112},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[114,127004,127005],{"__ignoreMap":112},[128,127006,127007,127009,127011,127013,127016,127018,127020],{"class":130,"line":131},[128,127008,126959],{"class":199},[128,127010,73196],{"class":176},[128,127012,126964],{"class":166},[128,127014,127015],{"class":166}," --name=\u002Fdev\u002FttyUSB1",[128,127017,28596],{"class":134},[128,127019,33720],{"class":199},[128,127021,126974],{"class":176},[19,127023,127024,127025,127028,127029,127032,127033,127036],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[114,127026,127027],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[114,127030,127031],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[3903,127034,127035],{},"唯一性标识","”。",[19,127038,126688],{},[19,127040,126691,127041,127043],{},[114,127042,126694],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[106,127045,127046],{"className":120652,"code":126698,"language":120654,"meta":112,"style":112},[114,127047,127048],{"__ignoreMap":112},[128,127049,127050,127052,127054],{"class":130,"line":131},[128,127051,28064],{"class":199},[128,127053,121939],{"class":176},[128,127055,126709],{"class":176},[106,127057,127059],{"className":120652,"code":127058,"language":120654,"meta":112,"style":112},"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",[114,127060,127061,127090],{"__ignoreMap":112},[128,127062,127063,127065,127067,127069,127072,127074,127077,127080,127082,127085,127087],{"class":130,"line":131},[128,127064,126722],{"class":138},[128,127066,270],{"class":134},[128,127068,126727],{"class":176},[128,127070,127071],{"class":138}," KERNELS",[128,127073,270],{"class":134},[128,127075,127076],{"class":176},"=\"1-1.3:1.0\",",[128,127078,127079],{"class":199}," MODE:",[128,127081,270],{"class":176},[128,127083,127084],{"class":199},"\"0777\"",[128,127086,4128],{"class":199},[128,127088,127089],{"class":176}," SYMLINK+=\"rplidar_front\"\n",[128,127091,127092,127094,127096,127098,127100,127102,127105,127107,127109,127111,127113],{"class":130,"line":142},[128,127093,126722],{"class":138},[128,127095,270],{"class":134},[128,127097,126727],{"class":176},[128,127099,127071],{"class":138},[128,127101,270],{"class":134},[128,127103,127104],{"class":176},"=\"1-1.4:1.0\",",[128,127106,127079],{"class":199},[128,127108,270],{"class":176},[128,127110,127084],{"class":199},[128,127112,4128],{"class":199},[128,127114,127115],{"class":176}," SYMLINK+=\"rplidar_back\"\n",[19,127117,126807],{},[19,127119,126810],{},[106,127121,127122],{"className":120652,"code":126813,"language":120654,"meta":112,"style":112},[114,127123,127124,127128,127138,127148,127152,127156,127166],{"__ignoreMap":112},[128,127125,127126],{"class":130,"line":131},[128,127127,126820],{"class":3814},[128,127129,127130,127132,127134,127136],{"class":130,"line":142},[128,127131,28064],{"class":199},[128,127133,123404],{"class":176},[128,127135,126829],{"class":176},[128,127137,126832],{"class":176},[128,127139,127140,127142,127144,127146],{"class":130,"line":156},[128,127141,28064],{"class":199},[128,127143,123404],{"class":176},[128,127145,126829],{"class":176},[128,127147,126843],{"class":176},[128,127149,127150],{"class":130,"line":163},[128,127151,160],{"emptyLinePlaceholder":159},[128,127153,127154],{"class":130,"line":183},[128,127155,126852],{"class":3814},[128,127157,127158,127160,127162,127164],{"class":130,"line":188},[128,127159,28064],{"class":199},[128,127161,126859],{"class":176},[128,127163,126862],{"class":176},[128,127165,126865],{"class":166},[128,127167,127168,127170,127172],{"class":130,"line":193},[128,127169,28064],{"class":199},[128,127171,126859],{"class":176},[128,127173,126874],{"class":176},[19,127175,126877],{},[19,127177,126880],{},[19,127179,126883,127180,127183],{},[114,127181,127182],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,127185,127186],{},[5074,127187],{"alt":112,"src":127188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,127190,127191],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,127193,127194,127196],{},[3903,127195,121320],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[72,127198,127200],{"id":127199},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,127202,127203],{},"（1）.查看所连接的主机USB接口的信息",[106,127205,127207],{"className":120652,"code":127206,"language":120654,"meta":112,"style":112},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[114,127208,127209,127239],{"__ignoreMap":112},[128,127210,127211,127213,127215,127218,127220,127222,127224,127226,127229,127232,127234,127237],{"class":130,"line":131},[128,127212,126959],{"class":199},[128,127214,73196],{"class":176},[128,127216,127217],{"class":166}," -a",[128,127219,32700],{"class":166},[128,127221,31906],{"class":138},[128,127223,126959],{"class":199},[128,127225,73196],{"class":176},[128,127227,127228],{"class":166}," -q",[128,127230,127231],{"class":176}," path",[128,127233,28602],{"class":166},[128,127235,127236],{"class":176}," \u002Fdev\u002FttyACM0",[128,127238,180],{"class":138},[128,127240,127241,127243,127245,127247,127249,127251,127253,127255,127257,127259,127261,127264],{"class":130,"line":142},[128,127242,126959],{"class":199},[128,127244,73196],{"class":176},[128,127246,127217],{"class":166},[128,127248,32700],{"class":166},[128,127250,31906],{"class":138},[128,127252,126959],{"class":199},[128,127254,73196],{"class":176},[128,127256,127228],{"class":166},[128,127258,127231],{"class":176},[128,127260,28602],{"class":166},[128,127262,127263],{"class":176}," \u002Fdev\u002FttyUSB0",[128,127265,180],{"class":138},[19,127267,127268],{},[5074,127269],{"alt":112,"src":127270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,127272,127273],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,127275,126688],{},[19,127277,126691,127278,127043],{},[114,127279,126694],{},[106,127281,127282],{"className":120652,"code":126698,"language":120654,"meta":112,"style":112},[114,127283,127284],{"__ignoreMap":112},[128,127285,127286,127288,127290],{"class":130,"line":131},[128,127287,28064],{"class":199},[128,127289,121939],{"class":176},[128,127291,126709],{"class":176},[106,127293,127295],{"className":120652,"code":127294,"language":120654,"meta":112,"style":112},"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",[114,127296,127297,127325,127351],{"__ignoreMap":112},[128,127298,127299,127301,127303,127306,127308,127310,127312,127314,127317,127320,127322],{"class":130,"line":131},[128,127300,126722],{"class":138},[128,127302,270],{"class":134},[128,127304,127305],{"class":176},"=\"ttyACM*\",",[128,127307,126730],{"class":199},[128,127309,126733],{"class":176},[128,127311,126762],{"class":199},[128,127313,4128],{"class":199},[128,127315,127316],{"class":176}," ATTRS{idProduct}==\"55d4\",",[128,127318,127319],{"class":176}," ATTRS{serial}==\"0001\",",[128,127321,126744],{"class":176},[128,127323,127324],{"class":176}," SYMLINK+=\"ttyACM_MCU\"\n",[128,127326,127327,127329,127331,127333,127335,127337,127339,127341,127343,127346,127348],{"class":130,"line":142},[128,127328,126722],{"class":138},[128,127330,270],{"class":134},[128,127332,127305],{"class":176},[128,127334,126730],{"class":199},[128,127336,126733],{"class":176},[128,127338,126762],{"class":199},[128,127340,4128],{"class":199},[128,127342,127316],{"class":176},[128,127344,127345],{"class":176}," ATTRS{serial}==\"0002\",",[128,127347,126744],{"class":176},[128,127349,127350],{"class":176}," SYMLINK+=\"ttyACM_Lidar\"\n",[128,127352,127353,127355,127357,127359,127361,127363,127365,127367,127369,127371],{"class":130,"line":156},[128,127354,126722],{"class":138},[128,127356,270],{"class":134},[128,127358,126727],{"class":176},[128,127360,126730],{"class":199},[128,127362,126733],{"class":176},[128,127364,126762],{"class":199},[128,127366,4128],{"class":199},[128,127368,126767],{"class":176},[128,127370,126744],{"class":176},[128,127372,127373],{"class":176}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,127375,126807],{},[19,127377,126810],{},[106,127379,127380],{"className":120652,"code":126813,"language":120654,"meta":112,"style":112},[114,127381,127382,127386,127396,127406,127410,127414,127424],{"__ignoreMap":112},[128,127383,127384],{"class":130,"line":131},[128,127385,126820],{"class":3814},[128,127387,127388,127390,127392,127394],{"class":130,"line":142},[128,127389,28064],{"class":199},[128,127391,123404],{"class":176},[128,127393,126829],{"class":176},[128,127395,126832],{"class":176},[128,127397,127398,127400,127402,127404],{"class":130,"line":156},[128,127399,28064],{"class":199},[128,127401,123404],{"class":176},[128,127403,126829],{"class":176},[128,127405,126843],{"class":176},[128,127407,127408],{"class":130,"line":163},[128,127409,160],{"emptyLinePlaceholder":159},[128,127411,127412],{"class":130,"line":183},[128,127413,126852],{"class":3814},[128,127415,127416,127418,127420,127422],{"class":130,"line":188},[128,127417,28064],{"class":199},[128,127419,126859],{"class":176},[128,127421,126862],{"class":176},[128,127423,126865],{"class":166},[128,127425,127426,127428,127430],{"class":130,"line":193},[128,127427,28064],{"class":199},[128,127429,126859],{"class":176},[128,127431,126874],{"class":176},[19,127433,127434,127435],{},"再重新插拔设备即可，或者 ",[3903,127436,127437],{},"直接重启系统。",[19,127439,126880],{},[19,127441,126883,127442,127183],{},[114,127443,127182],{},[19,127445,127446],{},[5074,127447],{"alt":112,"src":127448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,127450,127191],{},[19,127452,127453,127455],{},[3903,127454,121320],{}," 一些设备可能没有串口号等。",[72,127457,127459],{"id":127458},"_744-其他注意事项","7.4.4 其他注意事项",[19,127461,127462,127463,127465,127466,127469,127470,21897,127473,127476,127477,127479],{},"并非所有的USB设备端口号都是",[114,127464,126917],{},"的格式，比如Arduino的端口号可能是",[114,127467,127468],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[114,127471,127472],{},"videon",[114,127474,127475],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[114,127478,127472],{},"端口，绑定时需要关联的也是该接口。",[19,127481,127482,127483,127486,127487,127490,127491,127493,127494,127497,127498,127501,127502,127505,127506,127505,127509,127505,127512,1842],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[114,127484,127485],{},"KERNEL==\"ttyUSB*\"","修改为",[114,127488,127489],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[114,127492,127485],{},"修改为类似于",[114,127495,127496],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[114,127499,127500],{},"video[0,2,4,6]","表示可以绑定的端口为",[114,127503,127504],{},"video0","或",[114,127507,127508],{},"video2",[114,127510,127511],{},"video4",[114,127513,127514],{},"video6",[14,127516,127518],{"id":127517},"_75-挂载内网网页","7.5 挂载内网网页",[19,127520,127521],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,127523,127524],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,127526,127527],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,127529,127530,127531],{},"Termux 下载地址（F-Droid）：",[3989,127532,127533],{"href":127533,"rel":127534},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[27352],[19,127536,127537],{},"首先打开app后，先更新软件缓存：",[106,127539,127541],{"className":120652,"code":127540,"language":120654,"meta":112,"style":112},"pkg update\n",[114,127542,127543],{"__ignoreMap":112},[128,127544,127545,127548],{"class":130,"line":131},[128,127546,127547],{"class":199},"pkg",[128,127549,29727],{"class":176},[19,127551,127552],{},"然后换源",[106,127554,127556],{"className":120652,"code":127555,"language":120654,"meta":112,"style":112},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[114,127557,127558],{"__ignoreMap":112},[128,127559,127560,127562,127565],{"class":130,"line":131},[128,127561,126430],{"class":199},[128,127563,127564],{"class":138}," $PREFIX",[128,127566,127567],{"class":176},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,127569,127570],{},"将该文件内容替换为下面：",[106,127572,127574],{"className":120652,"code":127573,"language":120654,"meta":112,"style":112},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[114,127575,127576],{"__ignoreMap":112},[128,127577,127578,127581,127584,127587],{"class":130,"line":131},[128,127579,127580],{"class":199},"deb",[128,127582,127583],{"class":176}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[128,127585,127586],{"class":176}," stable",[128,127588,127589],{"class":176}," main\n",[4752,127591,127592,127619],{},[29,127593,127594,127595,127597,127598],{},"如果你使用的是",[114,127596,126430],{},"编辑器：",[4752,127599,127600,127607,127613],{},[29,127601,127602,127603,127606],{},"按 ",[114,127604,127605],{},"Ctrl+O"," 保存文件。",[29,127608,127602,127609,127612],{},[114,127610,127611],{},"Enter"," 确认文件名。",[29,127614,127602,127615,127618],{},[114,127616,127617],{},"Ctrl+X"," 退出编辑器。",[29,127620,127594,127621,127597,127624],{},[114,127622,127623],{},"vim",[4752,127625,127626,127632],{},[29,127627,127602,127628,127631],{},[114,127629,127630],{},"Esc"," 退出编辑模式。",[29,127633,127634,127635,127637],{},"输入 ",[114,127636,122577],{}," 保存并退出。",[19,127639,127640],{},"接下来重新更新软件源：",[106,127642,127644],{"className":120652,"code":127643,"language":120654,"meta":112,"style":112},"pkg update && pkg upgrade\n",[114,127645,127646],{"__ignoreMap":112},[128,127647,127648,127650,127652,127654,127656],{"class":130,"line":131},[128,127649,127547],{"class":199},[128,127651,120703],{"class":176},[128,127653,29675],{"class":138},[128,127655,127547],{"class":199},[128,127657,120689],{"class":176},[19,127659,127660],{},"安装python：",[106,127662,127664],{"className":120652,"code":127663,"language":120654,"meta":112,"style":112},"pkg install python\n",[114,127665,127666],{"__ignoreMap":112},[128,127667,127668,127670,127672],{"class":130,"line":131},[128,127669,127547],{"class":199},[128,127671,27321],{"class":176},[128,127673,127674],{"class":176}," python\n",[19,127676,127677,29958],{},[3903,127678,127679],{},"通过Termux访问设备存储",[19,127681,127682],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[106,127684,127686],{"className":120652,"code":127685,"language":120654,"meta":112,"style":112},"termux-setup-storage\n",[114,127687,127688],{"__ignoreMap":112},[128,127689,127690],{"class":130,"line":131},[128,127691,127685],{"class":199},[26,127693,127694],{},[29,127695,127696,29958,127699],{},[3903,127697,127698],{},"进入HTML文件所在的目录",[26,127700,127701],{},[29,127702,127703,127704,127706],{},"使用",[114,127705,104643],{},"命令进入HTML文件所在的目录：",[106,127708,127710],{"className":120652,"code":127709,"language":120654,"meta":112,"style":112},"cd ~\u002Fyour_html_folder\n",[114,127711,127712],{"__ignoreMap":112},[128,127713,127714,127716],{"class":130,"line":131},[128,127715,104643],{"class":166},[128,127717,127718],{"class":176}," ~\u002Fyour_html_folder\n",[26,127720,127721],{"start":142},[29,127722,127723,29958,127726,127731,127748],{},[3903,127724,127725],{},"启动Python HTTP服务器",[26,127727,127728],{},[29,127729,127730],{},"运行以下命令启动一个简单的HTTP服务器：",[106,127732,127734],{"className":120652,"code":127733,"language":120654,"meta":112,"style":112},"python -m http.server 8000\n",[114,127735,127736],{"__ignoreMap":112},[128,127737,127738,127740,127742,127745],{"class":130,"line":131},[128,127739,124],{"class":199},[128,127741,104250],{"class":166},[128,127743,127744],{"class":176}," http.server",[128,127746,127747],{"class":166}," 8000\n",[26,127749,127750],{"start":156},[29,127751,127752,127753,127755],{},"这会在端口",[114,127754,2687],{},"上启动一个Web服务器。",[4752,127757,127758],{},[29,127759,127760],{},"启动服务器后，Termux会显示日志信息，例如：",[106,127762,127764],{"className":124172,"code":127763,"language":124174,"meta":124175,"style":112},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[114,127765,127766],{"__ignoreMap":112},[128,127767,127768],{"class":130,"line":131},[128,127769,127763],{},[4752,127771,127772],{},[29,127773,127774],{},"这表示服务器已成功启动。",[19,127776,127777],{},[3903,127778,127779],{},"在浏览器中访问HTML文件",[26,127781,127782],{},[29,127783,127784,29958,127787,127792],{},[3903,127785,127786],{},"在同一设备上访问",[26,127788,127789],{},[29,127790,127791],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[106,127793,127796],{"className":127794,"code":127795,"language":75039,"meta":112,"style":112},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[114,127797,127798],{"__ignoreMap":112},[128,127799,127800,127803],{"class":130,"line":131},[128,127801,127802],{"class":138},"http:",[128,127804,127805],{"class":3814},"\u002F\u002Flocalhost:8000\n",[4752,127807,127808],{},[29,127809,127810,127811,127814],{},"如果HTML文件中有",[114,127812,127813],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,127816,127818],{"id":127817},"_76-linux重点知识","7.6 Linux重点知识",[72,127820,127822],{"id":127821},"_761-关于点的说明","7.6.1 关于点的说明",[19,127824,127825],{},[5074,127826],{"alt":112,"src":127827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,127829,127830],{},"一点本目录，两点上目录",[72,127832,127834],{"id":127833},"_762-目录","7.6.2 目录",[25485,127836,127838],{"id":127837},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,127840,127841],{},[3903,127842,127843],{},"\u002Fboot:",[19,127845,127846],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,127848,127849],{},[3903,127850,127851],{},"\u002Fetc:",[19,127853,127854],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,127856,127857],{},[3903,127858,127859],{},"\u002Flib：",[19,127861,127862],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,127864,127865],{},[3903,127866,127867],{},"\u002Fsys:",[19,127869,127870],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[25485,127872,127874],{"id":127873},"_7622-指令集合","7.6.2.2 指令集合",[19,127876,127877],{},[3903,127878,127879],{},"\u002Fbin:",[19,127881,127882],{},"为二进制文件的缩写，存放最经常使用的命令",[19,127884,127885],{},[3903,127886,127887],{},"\u002Fsbin:",[19,127889,127890],{},"只有系统管理员才能使用的程序和指令",[25485,127892,127894],{"id":127893},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,127896,127897],{},[3903,127898,127899],{},"\u002Fdev:",[19,127901,127902],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,127904,127905],{},[3903,127906,127907],{},"\u002Fmedia:",[19,127909,127910],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,127912,127913],{},[3903,127914,127915],{},"\u002Fmnt:",[19,127917,127918],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[25485,127920,127922],{"id":127921},"_7624-临时文件","7.6.2.4 临时文件",[19,127924,127925],{},[3903,127926,127927],{},"\u002Frun:",[19,127929,127930],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,127932,127933],{},[3903,127934,127935],{},"\u002Flost+found:",[19,127937,127938],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,127940,127941],{},[3903,127942,127943],{},"\u002Ftmp:",[19,127945,127946],{},"这个目录是用来存放一些临时文件的",[25485,127948,127950],{"id":127949},"_7625-账户","7.6.2.5 账户",[19,127952,127953],{},[3903,127954,127955],{},"\u002Froot：",[19,127957,127958],{},"系统管理员的用户主目录",[19,127960,127961,29958],{},[3903,127962,127963],{},"\u002Fhome",[19,127965,127966],{},"用户的主目录，以用户的账号命名的",[19,127968,127969,29958],{},[3903,127970,127971],{},"\u002Fusr",[19,127973,127974],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,127976,127977],{},[3903,127978,127979],{},"\u002Fusr\u002Fbin：",[19,127981,127982],{},"系统用户使用的应用程序与指令",[19,127984,127985],{},[3903,127986,127987],{},"\u002Fusr\u002Fsbin：",[19,127989,127990],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,127992,127993],{},[3903,127994,127995],{},"\u002Fusr\u002Fsrc：",[19,127997,127998],{},"内核源代码默认的放置目录",[25485,128000,128002],{"id":128001},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,128004,128005],{},[3903,128006,128007],{},"\u002Fvar：",[19,128009,128010],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,128012,128013],{},[3903,128014,128015],{},"\u002Fproc:",[19,128017,128018,128019,128022],{},"管理 ",[3903,128020,128021],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[25485,128024,128026],{"id":128025},"_7627-扩展用的","7.6.2.7 扩展用的",[19,128028,128029],{},[3903,128030,128031],{},"\u002Fopt:",[19,128033,128034],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,128036,128037],{},[3903,128038,128039],{},"\u002Fsrv:",[19,128041,128042],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[72,128044,128046],{"id":128045},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,128048,128049],{},[5074,128050],{"alt":112,"src":128051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,128053,128054],{},"windows-->linux:",[19,128056,128057],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,128059,128060],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,128062,128063],{},"linux传输文件到windows",[19,128065,128066],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[72,128068,128070],{"id":128069},"_764-易忘知识","7.6.4 易忘知识",[19,128072,128073],{},"操作系统内核查看",[106,128075,128076],{"className":120652,"code":124646,"language":120654,"meta":112,"style":112},[114,128077,128078],{"__ignoreMap":112},[128,128079,128080,128082],{"class":130,"line":131},[128,128081,73579],{"class":199},[128,128083,124655],{"class":166},[19,128085,128086],{},[5074,128087],{"alt":112,"src":128088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,128090,128091],{},[5074,128092],{"alt":112,"src":128093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[106,128095,128097],{"className":120652,"code":128096,"language":120654,"meta":112,"style":112},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[114,128098,128099,128111],{"__ignoreMap":112},[128,128100,128101,128103,128106,128109],{"class":130,"line":131},[128,128102,124863],{"class":199},[128,128104,128105],{"class":176}," mvtest",[128,128107,128108],{"class":176}," mvtest2",[128,128110,6247],{"class":138},[128,128112,128113],{"class":130,"line":142},[128,128114,128115],{"class":199},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,128117,128118],{},[5074,128119],{"alt":112,"src":128120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,128122,128123],{},[5074,128124],{"alt":112,"src":128125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,128127,128128,128129,128132],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[114,128130,128131],{},"du -a"," 可以快速查看磁盘使用细节。",[72,128134,128136],{"id":128135},"_765-vim","7.6.5 Vim",[19,128138,128139],{},[5074,128140],{"alt":112,"src":128141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,128143,128144],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,128146,128147],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,128149,128150],{},[3903,128151,128152],{},"1.命令模式：",[19,128154,128155],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,128157,128158],{},"x 删除当前光标所在处的字符",[19,128160,128161],{},"：切换到底线命令模式，以在最底一行输入命令",[19,128163,128164],{},"a 进行插入模式，在光标下一个位置输入文本",[19,128166,128167],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,128169,128170],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,128172,128173],{},"dd 剪切当前行",[19,128175,128176],{},"yy 复制当前行",[19,128178,128179],{},"p 粘贴剪贴板内容到光标下方",[19,128181,128182],{},"P 粘贴剪贴板内容到光标上方",[19,128184,128185],{},"u 撤销上一次操作",[19,128187,128188],{},"ctrl+r 重做上一次操作",[19,128190,128191,128193],{},[4544,128192],{}," 保存文件",[19,128195,128196,128198],{},[4394,128197],{}," 退出Vim编辑器",[19,128200,128201,128203],{},[4394,128202],{},"! 强制退出Vim编辑器，不保存修改",[19,128205,128206],{},[3903,128207,128208],{},"2.输入模式：",[19,128210,128211],{},[5074,128212],{"alt":112,"src":128213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,128215,128216],{},[3903,128217,128218],{},"3.底线命令模式：",[19,128220,128221],{},[5074,128222],{"alt":112,"src":128223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,128225,128226],{},"按下esc可以退出底线命令模式",[72,128228,128230],{"id":128229},"_766-apt","7.6.6 apt",[19,128232,128233],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[72,128235,128237],{"id":128236},"_767-home与root的区别","7.6.7 home与root的区别",[19,128239,128240],{},[5074,128241],{"alt":112,"src":128242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,128244,128245],{},[5074,128246],{"alt":112,"src":128247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,128249,128250],{},[5074,128251],{"alt":112,"src":128252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,128254,128255],{},[5074,128256],{"alt":112,"src":128257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[72,128259,128261],{"id":128260},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,128263,128264],{},[3989,128265,128266],{"href":128266,"rel":128267},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[27352],[26,128269,128270,128273],{},[29,128271,128272],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[29,128274,128275],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,128277,128278],{},[5074,128279],{"alt":112,"src":128280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,128282,128283],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,128285,128286],{},[5074,128287],{"alt":112,"src":128288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[106,128290,128292],{"className":124172,"code":128291,"language":124174,"meta":124175,"style":112},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[114,128293,128294,128299],{"__ignoreMap":112},[128,128295,128296],{"class":130,"line":131},[128,128297,128298],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[128,128300,128301],{"class":130,"line":142},[128,128302,128303],{},".\u002Fpycharm.sh\n",[19,128305,128306],{},"3️⃣创建.desktop文件",[19,128308,128309],{},[3903,128310,128311],{},"原理：",[4752,128313,128314,128324],{},[29,128315,128316,128317,128323],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[3903,128318,128319,128322],{},[114,128320,128321],{},".desktop"," 文件"," 来识别应用。",[29,128325,128326,128328,128329],{},[114,128327,128321],{}," 文件相当于一个“应用注册表”，告诉系统：",[4752,128330,128331,128334,128337,128340,128343],{},[29,128332,128333],{},"应用名字（Name）",[29,128335,128336],{},"图标（Icon）",[29,128338,128339],{},"执行命令（Exec）",[29,128341,128342],{},"分类（Categories）",[29,128344,128345],{},"是否需要终端（Terminal）",[106,128347,128349],{"className":124172,"code":128348,"language":124174,"meta":124175,"style":112},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[114,128350,128351,128356],{"__ignoreMap":112},[128,128352,128353],{"class":130,"line":131},[128,128354,128355],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[128,128357,128358],{"class":130,"line":142},[128,128359,128360],{},"nano pycharm.desktop\n",[19,128362,128363],{},"nano是一个命令行下的编辑器，也可以使用vim",[106,128365,128367],{"className":124172,"code":128366,"language":124174,"meta":124175,"style":112},"[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",[114,128368,128369,128374,128379,128384,128389,128394,128399,128404,128409,128414],{"__ignoreMap":112},[128,128370,128371],{"class":130,"line":131},[128,128372,128373],{},"[Desktop Entry]\n",[128,128375,128376],{"class":130,"line":142},[128,128377,128378],{},"Version=1.0\n",[128,128380,128381],{"class":130,"line":156},[128,128382,128383],{},"Type=Application\n",[128,128385,128386],{"class":130,"line":163},[128,128387,128388],{},"Name=PyCharm\n",[128,128390,128391],{"class":130,"line":183},[128,128392,128393],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[128,128395,128396],{"class":130,"line":188},[128,128397,128398],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[128,128400,128401],{"class":130,"line":193},[128,128402,128403],{},"Comment=JetBrains PyCharm IDE\n",[128,128405,128406],{"class":130,"line":206},[128,128407,128408],{},"Categories=Development;IDE;\n",[128,128410,128411],{"class":130,"line":221},[128,128412,128413],{},"Terminal=false\n",[128,128415,128416],{"class":130,"line":230},[128,128417,128418],{},"StartupWMClass=jetbrains-pycharm\n",[4752,128420,128421,128427,128433,128439],{},[29,128422,128423,128426],{},[114,128424,128425],{},"Exec"," → 点击图标时执行的命令",[29,128428,128429,128432],{},[114,128430,128431],{},"Icon"," → 显示在菜单和桌面上的图标",[29,128434,128435,128438],{},[114,128436,128437],{},"Terminal=false"," → 不打开终端",[29,128440,128441,128444],{},[114,128442,128443],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[128446,128447,128448],"blockquote",{},[19,128449,128450,128451,128453,128454],{},"可以理解成 ",[114,128452,128321],{}," 文件是 Linux 的 ",[3903,128455,128456],{},"快捷方式配置文件",[19,128458,128459],{},"4️⃣设置可执行权限",[106,128461,128463],{"className":124172,"code":128462,"language":124174,"meta":124175,"style":112},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[114,128464,128465],{"__ignoreMap":112},[128,128466,128467],{"class":130,"line":131},[128,128468,128462],{},[19,128470,128471],{},"5️⃣桌面图标启动的话如下：",[106,128473,128475],{"className":124172,"code":128474,"language":124174,"meta":124175,"style":112},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[114,128476,128477,128482],{"__ignoreMap":112},[128,128478,128479],{"class":130,"line":131},[128,128480,128481],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[128,128483,128484],{"class":130,"line":142},[128,128485,128486],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[26,128488,128489],{"start":156},[29,128490,128491],{},"下载Appimage文件实现软件的安装",[19,128493,128494],{},"1️⃣先下载appimage",[19,128496,128497],{},[3989,128498,128499],{"href":128499,"rel":128500},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[27352],[19,128502,128503],{},[5074,128504],{"alt":112,"src":128505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,128507,128508],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,128510,128511],{},[5074,128512],{"alt":112,"src":128513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,128515,128516],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,128518,128519],{},[5074,128520],{"alt":112,"src":128521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,128523,128524],{},[5074,128525],{"alt":112,"src":128526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,128528,128529,128530,128533],{},"3️⃣给他们放在",[114,128531,128532],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,128535,128536],{},"4️⃣给软件执行权限",[106,128538,128540],{"className":124172,"code":128539,"language":124174,"meta":124175,"style":112},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[114,128541,128542,128547],{"__ignoreMap":112},[128,128543,128544],{"class":130,"line":131},[128,128545,128546],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[128,128548,128549],{"class":130,"line":142},[128,128550,128551],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,128553,128554],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[106,128556,128558],{"className":120652,"code":128557,"language":120654,"meta":112,"style":112},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[114,128559,128560,128567,128574,128580],{"__ignoreMap":112},[128,128561,128562,128564],{"class":130,"line":131},[128,128563,104643],{"class":166},[128,128565,128566],{"class":176}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[128,128568,128569,128571],{"class":130,"line":142},[128,128570,104650],{"class":199},[128,128572,128573],{"class":176}," .\u002Fqqmusic.desktop\n",[128,128575,128576,128578],{"class":130,"line":156},[128,128577,127623],{"class":199},[128,128579,128573],{"class":176},[128,128581,128582,128584,128586,128588],{"class":130,"line":163},[128,128583,28064],{"class":199},[128,128585,28067],{"class":176},[128,128587,126489],{"class":176},[128,128589,128573],{"class":176},[19,128591,128592,128594],{},[114,128593,104650],{},"：一个 Linux 命令，主要功能是：",[4752,128596,128597,128600],{},[29,128598,128599],{},"如果文件不存在，就创建一个新的空文件",[29,128601,128602],{},"如果文件已存在，就更新该文件的最后修改时间",[106,128604,128606],{"className":124172,"code":128605,"language":124174,"meta":124175,"style":112},"[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",[114,128607,128608,128612,128617,128622,128627,128631,128636],{"__ignoreMap":112},[128,128609,128610],{"class":130,"line":131},[128,128611,128373],{},[128,128613,128614],{"class":130,"line":142},[128,128615,128616],{},"Name=QQ音乐\n",[128,128618,128619],{"class":130,"line":156},[128,128620,128621],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[128,128623,128624],{"class":130,"line":163},[128,128625,128626],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[128,128628,128629],{"class":130,"line":183},[128,128630,128383],{},[128,128632,128633],{"class":130,"line":188},[128,128634,128635],{},"Categories=Audio;Music;Player;\n",[128,128637,128638],{"class":130,"line":193},[128,128639,128640],{},"Comment=QQ Music Client for Linux\n",[19,128642,128643],{},"将文件复制进去",[19,128645,128646],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,128648,128649],{},[5074,128650],{"alt":112,"src":128651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,128653,128654],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,128656,128657],{},[5074,128658],{"alt":112,"src":128659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,128661,128662,128663,128666,128667,128670],{},"如果你用的不是KDE，那么也可以直接修改",[114,128664,128665],{},"qqmuic.desktop","：在exec的末尾加上",[114,128668,128669],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[106,128672,128674],{"className":124172,"code":128673,"language":124174,"meta":124175,"style":112},"[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",[114,128675,128676,128680,128684,128689,128693,128697,128701],{"__ignoreMap":112},[128,128677,128678],{"class":130,"line":131},[128,128679,128373],{},[128,128681,128682],{"class":130,"line":142},[128,128683,128616],{},[128,128685,128686],{"class":130,"line":156},[128,128687,128688],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[128,128690,128691],{"class":130,"line":163},[128,128692,128626],{},[128,128694,128695],{"class":130,"line":183},[128,128696,128383],{},[128,128698,128699],{"class":130,"line":188},[128,128700,128635],{},[128,128702,128703],{"class":130,"line":193},[128,128704,128640],{},[19,128706,128707],{},[5074,128708],{"alt":112,"src":128709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,128711,128712],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[106,128714,128716],{"className":124172,"code":128715,"language":124174,"meta":124175,"style":112},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[114,128717,128718],{"__ignoreMap":112},[128,128719,128720],{"class":130,"line":131},[128,128721,128715],{},[26,128723,128724],{"start":163},[29,128725,128726],{},"去Flathub上安装软件",[19,128728,128729],{},[3989,128730,128731],{"href":128731,"rel":128732},"https:\u002F\u002Fflathub.org\u002F",[27352],[19,128734,128735],{},"1️⃣去上面的官网搜索软件+下载软件",[19,128737,128738],{},[5074,128739],{"alt":112,"src":128740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[106,128742,128744],{"className":124172,"code":128743,"language":124174,"meta":124175,"style":112},"flatpak install flathub com.obsproject.Studio\n",[114,128745,128746],{"__ignoreMap":112},[128,128747,128748],{"class":130,"line":131},[128,128749,128743],{},[19,128751,128752],{},[5074,128753],{"alt":112,"src":128754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,128756,128757],{},"2️⃣运行软件",[19,128759,128760],{},"a.官方方式：",[19,128762,128763],{},[5074,128764],{"alt":112,"src":128765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[106,128767,128768],{"className":124172,"code":128743,"language":124174,"meta":124175,"style":112},[114,128769,128770],{"__ignoreMap":112},[128,128771,128772],{"class":130,"line":131},[128,128773,128743],{},[19,128775,128776],{},"b.当普通软件运行：",[19,128778,128779],{},[5074,128780],{"alt":112,"src":128781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,128783,128784],{},[5074,128785],{"alt":112,"src":128786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[3659,128788,128789],{},"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":112,"searchDepth":142,"depth":142,"links":128791},[128792,128793,128798,128799,128805,128806],{"id":125525,"depth":142,"text":125526},{"id":125867,"depth":142,"text":125868,"children":128794},[128795,128796,128797],{"id":125871,"depth":156,"text":125872},{"id":125938,"depth":156,"text":125939},{"id":126199,"depth":156,"text":126200},{"id":126352,"depth":142,"text":126353},{"id":126590,"depth":142,"text":126591,"children":128800},[128801,128802,128803,128804],{"id":126642,"depth":156,"text":126643},{"id":126928,"depth":156,"text":126929},{"id":127199,"depth":156,"text":127200},{"id":127458,"depth":156,"text":127459},{"id":127517,"depth":142,"text":127518},{"id":127817,"depth":142,"text":127818,"children":128807},[128808,128809,128810,128811,128812,128813,128814,128815],{"id":127821,"depth":156,"text":127822},{"id":127833,"depth":156,"text":127834},{"id":128045,"depth":156,"text":128046},{"id":128069,"depth":156,"text":128070},{"id":128135,"depth":156,"text":128136},{"id":128229,"depth":156,"text":128230},{"id":128236,"depth":156,"text":128237},{"id":128260,"depth":156,"text":128261},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":125517,"description":3686},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":128822,"title":128823,"body":128824,"description":3686,"extension":3687,"meta":128828,"navigation":159,"path":128829,"seo":128830,"stem":128831,"__hash__":128832},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":128825,"toc":128826},[],{"title":112,"searchDepth":142,"depth":142,"links":128827},[],{"category":33747},"\u002Fwiki\u002F2025-01-27-linux",{"title":128823,"description":3686},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":128834,"title":128835,"body":128836,"description":128840,"extension":3687,"meta":129228,"navigation":159,"path":129229,"seo":129230,"stem":129231,"__hash__":129232},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":128837,"toc":129226},[128838,128841,128845,128862,128865,128918,128922,128924,128964,128973,128977,128980,129218,129223],[19,128839,128840],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,128842,128844],{"id":128843},"_1ubuntu环境配置","1.Ubuntu环境配置",[26,128846,128847,128850,128853,128856,128859],{},[29,128848,128849],{},"ubuntu环境换源",[29,128851,128852],{},"安装cuda",[29,128854,128855],{},"安装miniconda",[29,128857,128858],{},"安装pytorch",[29,128860,128861],{},"安装genesis",[19,128863,128864],{},"参考链接：",[106,128866,128868],{"className":27309,"code":128867,"language":27311,"meta":112,"style":112},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[114,128869,128870],{"__ignoreMap":112},[128,128871,128872,128875,128878,128881,128883,128886,128889,128891,128894,128897,128899,128902,128905,128907,128910,128913,128915],{"class":130,"line":131},[128,128873,128874],{"class":199},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[128,128876,128877],{"class":176},"=blogdetail",[128,128879,128880],{"class":138},"&sharetype",[128,128882,270],{"class":134},[128,128884,128885],{"class":176},"blogdetail",[128,128887,128888],{"class":138},"&sharerId",[128,128890,270],{"class":134},[128,128892,128893],{"class":176},"144728092",[128,128895,128896],{"class":138},"&sharerefer",[128,128898,270],{"class":134},[128,128900,128901],{"class":176},"PC",[128,128903,128904],{"class":138},"&sharesource",[128,128906,270],{"class":134},[128,128908,128909],{"class":176},"qq_69379513",[128,128911,128912],{"class":138},"&sharefrom",[128,128914,270],{"class":134},[128,128916,128917],{"class":176},"from_link\n",[10,128919,128921],{"id":128920},"_2genesis-报错issue","2.Genesis 报错issue",[19,128923,128864],{},[106,128925,128926],{"className":27309,"code":128867,"language":27311,"meta":112,"style":112},[114,128927,128928],{"__ignoreMap":112},[128,128929,128930,128932,128934,128936,128938,128940,128942,128944,128946,128948,128950,128952,128954,128956,128958,128960,128962],{"class":130,"line":131},[128,128931,128874],{"class":199},[128,128933,128877],{"class":176},[128,128935,128880],{"class":138},[128,128937,270],{"class":134},[128,128939,128885],{"class":176},[128,128941,128888],{"class":138},[128,128943,270],{"class":134},[128,128945,128893],{"class":176},[128,128947,128896],{"class":138},[128,128949,270],{"class":134},[128,128951,128901],{"class":176},[128,128953,128904],{"class":138},[128,128955,270],{"class":134},[128,128957,128909],{"class":176},[128,128959,128912],{"class":138},[128,128961,270],{"class":134},[128,128963,128917],{"class":176},[106,128965,128967],{"className":27309,"code":128966,"language":27311,"meta":112,"style":112},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[114,128968,128969],{"__ignoreMap":112},[128,128970,128971],{"class":130,"line":131},[128,128972,128966],{"class":199},[10,128974,128976],{"id":128975},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,128978,128979],{},"hello_robot.py",[106,128981,128983],{"className":122,"code":128982,"language":124,"meta":112,"style":112},"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",[114,128984,128985,128991,129006,129010,129022,129034,129038,129051,129055,129074,129084,129094,129108,129112,129116,129121,129125,129135,129141,129155,129161,129170,129175,129179,129197,129202,129206,129213],{"__ignoreMap":112},[128,128986,128987,128989],{"class":130,"line":131},[128,128988,135],{"class":134},[128,128990,48691],{"class":138},[128,128992,128993,128996,128999,129001,129003],{"class":130,"line":142},[128,128994,128995],{"class":138},"os.environ[",[128,128997,128998],{"class":176},"'PYOPENGL_PLATFORM'",[128,129000,567],{"class":138},[128,129002,270],{"class":134},[128,129004,129005],{"class":176}," 'glx'\n",[128,129007,129008],{"class":130,"line":156},[128,129009,160],{"emptyLinePlaceholder":159},[128,129011,129012,129014,129017,129019],{"class":130,"line":163},[128,129013,135],{"class":134},[128,129015,129016],{"class":138}," genesis ",[128,129018,279],{"class":134},[128,129020,129021],{"class":138}," gs\n",[128,129023,129024,129026,129029,129031],{"class":130,"line":183},[128,129025,145],{"class":134},[128,129027,129028],{"class":138}," pynput ",[128,129030,135],{"class":134},[128,129032,129033],{"class":138}," keyboard\n",[128,129035,129036],{"class":130,"line":188},[128,129037,160],{"emptyLinePlaceholder":159},[128,129039,129040,129043,129046,129048],{"class":130,"line":193},[128,129041,129042],{"class":138},"gs.init(",[128,129044,129045],{"class":266},"backend",[128,129047,270],{"class":134},[128,129049,129050],{"class":138},"gs.gpu)\n",[128,129052,129053],{"class":130,"line":206},[128,129054,160],{"emptyLinePlaceholder":159},[128,129056,129057,129060,129062,129065,129068,129070,129072],{"class":130,"line":221},[128,129058,129059],{"class":138},"scene ",[128,129061,270],{"class":134},[128,129063,129064],{"class":138}," gs.Scene(",[128,129066,129067],{"class":266},"show_viewer",[128,129069,270],{"class":134},[128,129071,34945],{"class":166},[128,129073,180],{"class":138},[128,129075,129076,129079,129081],{"class":130,"line":230},[128,129077,129078],{"class":138},"plane ",[128,129080,270],{"class":134},[128,129082,129083],{"class":138}," scene.add_entity(gs.morphs.Plane())\n",[128,129085,129086,129089,129091],{"class":130,"line":235},[128,129087,129088],{"class":138},"franka ",[128,129090,270],{"class":134},[128,129092,129093],{"class":138}," scene.add_entity(\n",[128,129095,129096,129099,129101,129103,129106],{"class":130,"line":244},[128,129097,129098],{"class":138},"    gs.morphs.MJCF(",[128,129100,296],{"class":266},[128,129102,270],{"class":134},[128,129104,129105],{"class":176},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[128,129107,2760],{"class":138},[128,129109,129110],{"class":130,"line":287},[128,129111,180],{"class":138},[128,129113,129114],{"class":130,"line":301},[128,129115,160],{"emptyLinePlaceholder":159},[128,129117,129118],{"class":130,"line":310},[128,129119,129120],{"class":138},"scene.build()\n",[128,129122,129123],{"class":130,"line":323},[128,129124,160],{"emptyLinePlaceholder":159},[128,129126,129127,129129,129132],{"class":130,"line":330},[128,129128,196],{"class":134},[128,129130,129131],{"class":199}," on_press",[128,129133,129134],{"class":138},"(key):\n",[128,129136,129137,129139],{"class":130,"line":335},[128,129138,238],{"class":134},[128,129140,241],{"class":138},[128,129142,129143,129145,129148,129150,129153],{"class":130,"line":340},[128,129144,558],{"class":134},[128,129146,129147],{"class":138}," key.char ",[128,129149,570],{"class":134},[128,129151,129152],{"class":176}," 'q'",[128,129154,241],{"class":138},[128,129156,129157,129159],{"class":130,"line":351},[128,129158,290],{"class":134},[128,129160,2206],{"class":166},[128,129162,129163,129165,129168],{"class":130,"line":384},[128,129164,304],{"class":134},[128,129166,129167],{"class":166}," AttributeError",[128,129169,241],{"class":138},[128,129171,129172],{"class":130,"line":414},[128,129173,129174],{"class":134},"        pass\n",[128,129176,129177],{"class":130,"line":419},[128,129178,160],{"emptyLinePlaceholder":159},[128,129180,129181,129184,129186,129189,129192,129194],{"class":130,"line":424},[128,129182,129183],{"class":138},"listener ",[128,129185,270],{"class":134},[128,129187,129188],{"class":138}," keyboard.Listener(",[128,129190,129191],{"class":266},"on_press",[128,129193,270],{"class":134},[128,129195,129196],{"class":138},"on_press)\n",[128,129198,129199],{"class":130,"line":434},[128,129200,129201],{"class":138},"listener.start()\n",[128,129203,129204],{"class":130,"line":447},[128,129205,160],{"emptyLinePlaceholder":159},[128,129207,129208,129210],{"class":130,"line":459},[128,129209,3329],{"class":134},[128,129211,129212],{"class":138}," listener.running:\n",[128,129214,129215],{"class":130,"line":471},[128,129216,129217],{"class":138},"    scene.step()\n",[19,129219,129220],{},[5074,129221],{"alt":112,"src":129222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[3659,129224,129225],{},"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":112,"searchDepth":142,"depth":142,"links":129227},[],{"category":26865},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":128835,"description":128840},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":129234,"title":129235,"body":129236,"description":3686,"extension":3687,"meta":129251,"navigation":159,"path":129252,"seo":129253,"stem":129254,"__hash__":129255},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":129237,"toc":129248},[129238,129241,129245],[10,129239,129235],{"id":129240},"_1-基础知识",[14,129242,129244],{"id":129243},"_11-js的组成","1.1 js的组成",[19,129246,129247],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":112,"searchDepth":142,"depth":142,"links":129249},[129250],{"id":129243,"depth":142,"text":129244},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":129235,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":129257,"title":129258,"body":129259,"description":3686,"extension":3687,"meta":129398,"navigation":159,"path":129399,"seo":129400,"stem":129401,"__hash__":129402},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":129260,"toc":129386},[129261,129264,129268,129271,129275,129285,129289,129292,129295,129298,129302,129309,129315,129319,129325,129336,129340,129343,129347,129350,129354,129357,129361,129364,129368,129371,129374,129377,129380,129383],[10,129262,129258],{"id":129263},"_2-vscode必备内容",[14,129265,129267],{"id":129266},"_21-标签分类","2.1 标签分类",[19,129269,129270],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,129272,129274],{"id":129273},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,129276,129277,129278,129280,129281,129284],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[114,129279,3977],{}," 然后按 ",[114,129282,129283],{},"Tab","，快速自动生成基本结构。",[14,129286,129288],{"id":129287},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,129290,129291],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,129293,129294],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,129296,129297],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,129299,129301],{"id":129300},"_24-视图缩放","2.4 视图缩放",[19,129303,129304,129305,129308],{},"缩放视图 ",[114,129306,129307],{},"ctrl+"," 可实现代码增大。",[19,129310,129311,129314],{},[114,129312,129313],{},"ctrl-"," 可实现代码减小。",[14,129316,129318],{"id":129317},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,129320,129321,129322,1842],{},"VSCode 新建文件快捷键为 ",[114,129323,129324],{},"ctrl+N",[19,129326,129327,129328,129331,129332,129335],{},"保存快捷键为 ",[114,129329,129330],{},"ctrl+S","，将文本保存为 ",[114,129333,129334],{},".html"," 文件。",[14,129337,129339],{"id":129338},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,129341,129342],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,129344,129346],{"id":129345},"_27-vscode-icons","2.7 vscode-icons",[19,129348,129349],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,129351,129353],{"id":129352},"_28-easy-less","2.8 Easy LESS",[19,129355,129356],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,129358,129360],{"id":129359},"_29-会了吧插件","2.9 会了吧插件",[19,129362,129363],{},"会了吧插件可以展示代码中英语单词的意思。",[14,129365,129367],{"id":129366},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,129369,129370],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,129372,129373],{},"②选定多个相同的单词:ctrl+D",[19,129375,129376],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,129378,129379],{},"④全局替换某些单词:ctrl+h",[19,129381,129382],{},"⑤快速定位到某一行:ctrl+g",[19,129384,129385],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":112,"searchDepth":142,"depth":142,"links":129387},[129388,129389,129390,129391,129392,129393,129394,129395,129396,129397],{"id":129266,"depth":142,"text":129267},{"id":129273,"depth":142,"text":129274},{"id":129287,"depth":142,"text":129288},{"id":129300,"depth":142,"text":129301},{"id":129317,"depth":142,"text":129318},{"id":129338,"depth":142,"text":129339},{"id":129345,"depth":142,"text":129346},{"id":129352,"depth":142,"text":129353},{"id":129359,"depth":142,"text":129360},{"id":129366,"depth":142,"text":129367},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":129258,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":129404,"title":129405,"body":129406,"description":3686,"extension":3687,"meta":129565,"navigation":159,"path":129566,"seo":129567,"stem":129568,"__hash__":129569},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":129407,"toc":129557},[129408,129411,129415,129425,129431,129437,129441,129450,129454,129459,129462,129465,129469,129472,129482,129491,129500,129509,129519,129526,129531,129536,129549],[10,129409,129405],{"id":129410},"_3-html文本与容器标签",[14,129412,129414],{"id":129413},"_31-标题标签","3.1 标题标签",[19,129416,129417,129420,129421,129424],{},[114,129418,129419],{},"\u003Ch1>","我是一级标签",[114,129422,129423],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,129426,129427,129420,129429],{},[114,129428,129419],{},[114,129430,129423],{},[19,129432,126691,129433,129436],{},[114,129434,129435],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,129438,129440],{"id":129439},"_32-段落标签","3.2 段落标签",[19,129442,129443,129446,129447],{},[114,129444,129445],{},"\u003Cp>","....",[114,129448,129449],{},"\u003C\u002Fp>",[14,129451,129453],{"id":129452},"_33-换行标签","3.3 换行标签",[19,129455,129456],{},[114,129457,129458],{},"\u003Cbr \u002F>",[19,129460,129461],{},"具有强制换行的作用",[19,129463,129464],{},"单标签",[14,129466,129468],{"id":129467},"_34-文本格式化标签","3.4 文本格式化标签",[19,129470,129471],{},"提供粗体、斜体和下划线等效果",[19,129473,129474,129475,85912,129478,129481],{},"加粗：",[114,129476,129477],{},"\u003Cstrong>...\u003C\u002Fstrong>",[114,129479,129480],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,129483,129484,129485,85912,129488,129481],{},"斜体：",[114,129486,129487],{},"\u003Cem>...\u003C\u002Fem>",[114,129489,129490],{},"\u003Ci>...\u003C\u002Fi>",[19,129492,129493,129494,85912,129497,129481],{},"删除线：",[114,129495,129496],{},"\u003Cdel>...\u003C\u002Fdel>",[114,129498,129499],{},"\u003Cs>...\u003C\u002Fs>",[19,129501,129502,129503,85912,129506,129481],{},"下划线：",[114,129504,129505],{},"\u003Cins>...\u003C\u002Fins>",[114,129507,129508],{},"\u003Cu>...\u003C\u002Fu>",[14,129510,129512,129513,21897,129516,106056],{"id":129511},"_35-div和span标签","3.5 ",[114,129514,129515],{},"\u003Cdiv>",[114,129517,129518],{},"\u003Cspan>",[19,129520,129521,3330,129523,129525],{},[114,129522,129515],{},[114,129524,129518],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,129527,129528],{},[114,129529,129530],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,129532,129533],{},[114,129534,129535],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,129537,129538,129539,129541,129542,129544,129545,129548],{},"两者特点：①",[114,129540,129515],{}," 标签用来布局，但一行通常只放一个 ",[114,129543,129515],{},"。可以理解为一个大盒子，独占一行，在 ",[114,129546,129547],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,129550,80623,129551,129553,129554,129556],{},[114,129552,129518],{}," 标签也可用于布局，一行可以放多个 ",[114,129555,129518],{},"，可理解为小盒子。",{"title":112,"searchDepth":142,"depth":142,"links":129558},[129559,129560,129561,129562,129563],{"id":129413,"depth":142,"text":129414},{"id":129439,"depth":142,"text":129440},{"id":129452,"depth":142,"text":129453},{"id":129467,"depth":142,"text":129468},{"id":129511,"depth":142,"text":129564},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":129405,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":129571,"title":129572,"body":129573,"description":3686,"extension":3687,"meta":129770,"navigation":159,"path":129771,"seo":129772,"stem":129773,"__hash__":129774},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":129574,"toc":129762},[129575,129578,129582,129585,129591,129598,129604,129610,129613,129616,129619,129622,129625,129628,129631,129635,129638,129641,129644,129650,129656,129662,129669,129673,129679,129685,129688,129691,129697,129703,129709,129712,129715,129719,129722,129732,129738,129742,129751,129755,129758],[10,129576,129572],{"id":129577},"_4-html图像与链接",[14,129579,129581],{"id":129580},"_41-图像标签","4.1 图像标签",[19,129583,129584],{},"（1）标签",[19,129586,129587,129590],{},[114,129588,129589],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,129592,129593,129594,129597],{},"src是",[114,129595,129596],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,129599,129600,129601],{},"alt:文本，替换文本。图像不能显示的文字 ",[114,129602,129603],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,129605,129606,129607],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[114,129608,129609],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,129611,129612],{},"width:像素，设置图像的宽度",[19,129614,129615],{},"height:像素，设置图像的高度",[19,129617,129618],{},"border：像素，设置图像的边框粗细",[19,129620,129621],{},"（2）图像标签属性的注意点：",[19,129623,129624],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,129626,129627],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,129629,129630],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,129632,129634],{"id":129633},"_42-路径注意要点","4.2 路径注意要点：",[19,129636,129637],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,129639,129640],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,129642,129643],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,129645,129646,129647],{},"①同一级路径：图像文件位于HTML文件同一级，如",[114,129648,129649],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,129651,129652,129653],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[114,129654,129655],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,129657,129658,129659],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[114,129660,129661],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,129663,129664,129665,1376],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[3989,129666,129667],{"href":129667,"rel":129668},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[27352],[14,129670,129672],{"id":129671},"_43-超链接标签","4.3 超链接标签",[19,129674,129675,129678],{},[114,129676,129677],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,129680,129681,129682],{},"①语法格式：",[114,129683,129684],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,129686,129687],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,129689,129690],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,129692,129693,129694],{},"③链接分类：外部链接：",[114,129695,129696],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,129698,129699,129700],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[114,129701,129702],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,129704,129705,129706],{},"空链接：如果当时没有确定链接目标时，",[114,129707,129708],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,129710,129711],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,129713,129714],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,129716,129718],{"id":129717},"_44-锚点链接","4.4 锚点链接",[19,129720,129721],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,129723,129724,129725,129728,129729],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[114,129726,129727],{},"\u003Ca href=\"#two\">","第二级",[114,129730,129731],{},"\u003C\u002Fa>",[19,129733,129734,129735],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[114,129736,129737],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,129739,129741],{"id":129740},"_45-注释标签","4.5 注释标签",[19,129743,129744,129747,129748],{},[114,129745,129746],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[114,129749,129750],{},"ctrl+\u002F",[14,129752,129754],{"id":129753},"_46-特殊字符","4.6 特殊字符",[19,129756,129757],{},"可以实现添加多个空格",[5074,129759],{"style":129760,"src":129761},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":112,"searchDepth":142,"depth":142,"links":129763},[129764,129765,129766,129767,129768,129769],{"id":129580,"depth":142,"text":129581},{"id":129633,"depth":142,"text":129634},{"id":129671,"depth":142,"text":129672},{"id":129717,"depth":142,"text":129718},{"id":129740,"depth":142,"text":129741},{"id":129753,"depth":142,"text":129754},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":129572,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":129776,"title":129777,"body":129778,"description":3686,"extension":3687,"meta":130071,"navigation":159,"path":130072,"seo":130073,"stem":130074,"__hash__":130075},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":129779,"toc":130062},[129780,129783,129787,129790,129793,129796,129799,129802,129805,129808,129811,129814,129834,129840,129844,129847,129850,129853,129856,129859,129862,129866,129869,129872,129875,129878,129891,129896,129899,129902,129917,129920,129923,129926,129929,129932,129936,129939,129946,129949,129952,129955,129958,129961,129967,129970,129973,129979,129982,129985,129988,129994,129997,130000,130014,130021,130024,130027,130034,130043,130046,130049,130052,130056,130059],[10,129781,129777],{"id":129782},"_5-html表格列表与表单",[14,129784,129786],{"id":129785},"_51-表格标签","5.1 表格标签",[19,129788,129789],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,129791,129792],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,129794,129795],{},"②表格基本语法：",[5074,129797],{"style":129760,"src":129798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,129800,129801],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[5074,129803],{"style":129760,"src":129804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,129806,129807],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[5074,129809],{"style":129760,"src":129810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,129812,129813],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,129815,129816,129819,129820,129822,129823,129826,129827,129829,129830,129833],{},[114,129817,129818],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[114,129821,129818],{},"内部必须拥有",[114,129824,129825],{},"\u003Ctr>","标签，一般位于第一行，",[114,129828,129818],{},"比",[114,129831,129832],{},"\u003Cth>","范围广",[19,129835,129836,129839],{},[114,129837,129838],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,129841,129843],{"id":129842},"_52-合并单元格","5.2 合并单元格",[19,129845,129846],{},"（1）合并单元格方式：",[19,129848,129849],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,129851,129852],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,129854,129855],{},"（2）目标单元格：",[19,129857,129858],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,129860,129861],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,129863,129865],{"id":129864},"_53-列表标签","5.3 列表标签",[19,129867,129868],{},"（1）分类：无序列表、有序列表、自定义列表",[19,129870,129871],{},"①无序列表：",[5074,129873],{"style":129760,"src":129874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,129876,129877],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,129879,129880,129883,129884,129887,129888,129890],{},[114,129881,129882],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[114,129885,129886],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[114,129889,129882],{},"中输入其他标签或文字是不对的",[19,129892,129893,129895],{},[114,129894,129886],{},"之间相当于一个容器，可以容纳所有元素",[19,129897,129898],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,129900,129901],{},"在css中去除前边的小圆点采用如下代码:",[106,129903,129907],{"className":129904,"code":129905,"language":129906,"meta":112,"style":112},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[114,129908,129909],{"__ignoreMap":112},[128,129910,129911,129914],{"class":130,"line":131},[128,129912,129913],{"class":54685},"list-style",[128,129915,129916],{"class":138},": none;\n",[19,129918,129919],{},"②有序列表：",[5074,129921],{"style":129760,"src":129922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,129924,129925],{},"③自定义列表：",[5074,129927],{"style":129760,"src":129928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[5074,129930],{"style":129760,"src":129931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,129933,129935],{"id":129934},"_54-表单标签","5.4 表单标签",[19,129937,129938],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,129940,129941,129942,129945],{},"（1）表单域：包含单元素的区域，",[114,129943,129944],{},"\u003Cform>","标签可以实现信息的收集和传递。",[5074,129947],{"style":129760,"src":129948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,129950,129951],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,129953,129954],{},"表单元素提交必须有name属性",[19,129956,129957],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,129959,129960],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,129962,80600,129963,129966],{},[114,129964,129965],{},"\u003Cinput>","输入表单元素",[5074,129968],{"style":129760,"src":129969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[5074,129971],{"style":129760,"src":129972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,129974,129975,129976],{},"单选按钮：",[114,129977,129978],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[5074,129980],{"style":129760,"src":129981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,129983,129984],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[5074,129986],{"style":129760,"src":129987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,129989,129990,129993],{},[3903,129991,129992],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,129995,129996],{},"②select下拉表单元素：可以节约页面控件",[5074,129998],{"style":129760,"src":129999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,130001,130002,17319,130004,130007,130008,130010,130011,130013],{},[3903,130003,3788],{},[114,130005,130006],{},"\u003Cselect>","中至少包含一对",[114,130009,106077],{},"；在",[114,130012,106077],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,130015,130016,130017,130020],{},"③",[114,130018,130019],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[5074,130022],{"style":129760,"src":130023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,130025,130026],{},"3行20列",[14,130028,130030,130031,106056],{"id":130029},"_55-lable标签","5.5 ",[114,130032,130033],{},"\u003Clable>",[19,130035,130036,130037,130039,130040,130042],{},"它不是表单标签，但常常与表单标签搭配使用，",[114,130038,130033],{},"标签用于绑定一个表单标签，当点击",[114,130041,130033],{},"标签内的文本",[19,130044,130045],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[5074,130047],{"style":129760,"src":130048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[5074,130050],{"style":129760,"src":130051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,130053,130055],{"id":130054},"_56-实例","5.6 实例",[5074,130057],{"style":129760,"src":130058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[3659,130060,130061],{},"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":112,"searchDepth":142,"depth":142,"links":130063},[130064,130065,130066,130067,130068,130070],{"id":129785,"depth":142,"text":129786},{"id":129842,"depth":142,"text":129843},{"id":129864,"depth":142,"text":129865},{"id":129934,"depth":142,"text":129935},{"id":130029,"depth":142,"text":130069},"5.5 \u003Clable>标签",{"id":130054,"depth":142,"text":130055},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":129777,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":130077,"title":130078,"body":130079,"description":3686,"extension":3687,"meta":130628,"navigation":159,"path":130629,"seo":130630,"stem":130631,"__hash__":130632},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":130080,"toc":130603},[130081,130084,130088,130091,130094,130098,130101,130104,130107,130110,130113,130116,130119,130123,130126,130130,130133,130136,130139,130143,130146,130149,130152,130158,130161,130164,130167,130170,130173,130176,130179,130212,130216,130219,130222,130225,130229,130232,130235,130238,130241,130244,130248,130251,130254,130257,130261,130264,130268,130271,130275,130278,130283,130287,130290,130294,130297,130300,130303,130306,130333,130336,130340,130343,130346,130351,130354,130357,130361,130364,130369,130372,130375,130378,130382,130385,130388,130391,130395,130398,130401,130404,130408,130412,130415,130455,130458,130462,130469,130472,130476,130479,130525,130529,130532,130535,130538,130566,130570,130573,130600],[10,130082,130078],{"id":130083},"_6-css语法与文本样式",[14,130085,130087],{"id":130086},"_61-css语法规范","6.1 css语法规范",[19,130089,130090],{},"由两部分组成，选择器及一条或多条声明",[5074,130092],{"style":129760,"src":130093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,130095,130096],{},[3903,130097,3788],{},[19,130099,130100],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,130102,130103],{},"②属性与属性值以“键值对”的形式出现",[19,130105,130106],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,130108,130109],{},"④属性和属性值之间用英文“;”分开",[5074,130111],{"style":129760,"src":130112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[5074,130114],{"style":129760,"src":130115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[5074,130117],{"style":129760,"src":130118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,130120,130122],{"id":130121},"_62-css选择器","6.2 css选择器",[19,130124,130125],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[72,130127,130129],{"id":130128},"_621-标签选择器","6.2.1 标签选择器",[19,130131,130132],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,130134,130135],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[5074,130137],{"style":129760,"src":130138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[72,130140,130142],{"id":130141},"_622-类选择器","6.2.2 类选择器",[19,130144,130145],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,130147,130148],{},"②样例",[5074,130150],{"style":129760,"src":130151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,130153,130154,130155,130157],{},"③ ",[3903,130156,129992],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,130159,130160],{},"可以理解为给这个标签起了个名字，来表示；",[19,130162,130163],{},"长名称或词组可以使用横线来为选择器命名；",[19,130165,130166],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,130168,130169],{},"命名要有意义；",[5074,130171],{"style":129760,"src":130172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,130174,130175],{},"类选择器也可以指定特殊的元素p.center{}",[19,130177,130178],{},"p.center和.center都对",[106,130180,130182],{"className":129904,"code":130181,"language":129906,"meta":112,"style":112},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[114,130183,130184,130189,130198,130208],{"__ignoreMap":112},[128,130185,130186],{"class":130,"line":131},[128,130187,130188],{"class":3814},"\u002F* 类选择器指定特殊元素 *\u002F\n",[128,130190,130191,130193,130196],{"class":130,"line":142},[128,130192,19],{"class":54685},[128,130194,130195],{"class":199},".center",[128,130197,1959],{"class":138},[128,130199,130200,130202,130204,130206],{"class":130,"line":156},[128,130201,73901],{"class":166},[128,130203,1967],{"class":138},[128,130205,54975],{"class":166},[128,130207,4905],{"class":138},[128,130209,130210],{"class":130,"line":163},[128,130211,2694],{"class":138},[72,130213,130215],{"id":130214},"_623-多类名使用","6.2.3 多类名使用",[19,130217,130218],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[5074,130220],{"style":129760,"src":130221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,130223,130224],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[72,130226,130228],{"id":130227},"_624-id选择器","6.2.4 id选择器",[19,130230,130231],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,130233,130234],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[5074,130236],{"style":129760,"src":130237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,130239,130240],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,130242,130243],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[72,130245,130247],{"id":130246},"_625-通配符选择器","6.2.5 通配符选择器",[19,130249,130250],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,130252,130253],{},"* {",[19,130255,130256],{},"color=\"red\"}",[72,130258,130260],{"id":130259},"_626-总结","6.2.6 总结",[5074,130262],{"style":129760,"src":130263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,130265,130267],{"id":130266},"_63-css字体属性","6.3 css字体属性",[19,130269,130270],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[72,130272,130274],{"id":130273},"_631-字体系列","6.3.1 字体系列",[19,130276,130277],{},"font-family: '宋体';",[19,130279,130280,130282],{},[3903,130281,3788],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[72,130284,130286],{"id":130285},"_632-字体大小","6.3.2 字体大小",[19,130288,130289],{},"font-size: 20px",[19,130291,130292,29958],{},[3903,130293,129992],{},[19,130295,130296],{},"①px（像素）大小是网页的最常用单位",[19,130298,130299],{},"②谷歌浏览器默认为16px",[19,130301,130302],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,130304,130305],{},"④可以给body指定整个页面的大小：会自动引用",[106,130307,130309],{"className":129904,"code":130308,"language":129906,"meta":112,"style":112},"body {\n  font-size: 16px;\n}\n",[114,130310,130311,130317,130329],{"__ignoreMap":112},[128,130312,130313,130315],{"class":130,"line":131},[128,130314,55183],{"class":54685},[128,130316,1959],{"class":138},[128,130318,130319,130321,130323,130325,130327],{"class":130,"line":142},[128,130320,74001],{"class":166},[128,130322,1967],{"class":138},[128,130324,4350],{"class":166},[128,130326,54875],{"class":134},[128,130328,4905],{"class":138},[128,130330,130331],{"class":130,"line":156},[128,130332,2694],{"class":138},[19,130334,130335],{},"⑤标题标签比较特殊，需要单独指定大小",[72,130337,130339],{"id":130338},"_633-字体粗细","6.3.3 字体粗细",[19,130341,130342],{},"font-weight: bold;",[19,130344,130345],{},"font-weight: 100；",[19,130347,130348,130350],{},[3903,130349,3788],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,130352,130353],{},"font-weight= 400;",[19,130355,130356],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[72,130358,130360],{"id":130359},"_634-文字样式","6.3.4 文字样式",[19,130362,130363],{},"font-style: normal；",[19,130365,130366,29958],{},[3903,130367,130368],{},"属性值",[19,130370,130371],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,130373,130374],{},"②italic：浏览器会显示斜体的字体样式",[5074,130376],{"style":129760,"src":130377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[72,130379,130381],{"id":130380},"_635-字体符合属性","6.3.5 字体符合属性",[5074,130383],{"style":129760,"src":130384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[5074,130386],{"style":129760,"src":130387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,130389,130390],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,130392,130393,29958],{},[3903,130394,129992],{},[19,130396,130397],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,130399,130400],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,130402,130403],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,130405,130407],{"id":130406},"_64-css-test文本属性","6.4 css test文本属性",[72,130409,130411],{"id":130410},"_641-文本颜色","6.4.1 文本颜色",[19,130413,130414],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[106,130416,130418],{"className":129904,"code":130417,"language":129906,"meta":112,"style":112},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[114,130419,130420,130425,130431,130441,130446,130451],{"__ignoreMap":112},[128,130421,130422],{"class":130,"line":131},[128,130423,130424],{"class":3814},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[128,130426,130427,130429],{"class":130,"line":142},[128,130428,19],{"class":54685},[128,130430,1959],{"class":138},[128,130432,130433,130435,130437,130439],{"class":130,"line":156},[128,130434,74280],{"class":166},[128,130436,1967],{"class":138},[128,130438,60801],{"class":166},[128,130440,4905],{"class":138},[128,130442,130443],{"class":130,"line":163},[128,130444,130445],{"class":3814},"  \u002F* color: #ff0000; *\u002F\n",[128,130447,130448],{"class":130,"line":183},[128,130449,130450],{"class":3814},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[128,130452,130453],{"class":130,"line":188},[128,130454,2694],{"class":138},[5074,130456],{"style":129760,"src":130457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[72,130459,130461],{"id":130460},"_642-对齐文本","6.4.2 对齐文本",[19,130463,130464,130465,130468],{},"text-align属于用于设置元素内文本内容的 ",[3903,130466,130467],{},"水平对齐"," 方式",[19,130470,130471],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[72,130473,130475],{"id":130474},"_643-装饰文本","6.4.3 装饰文本",[19,130477,130478],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[106,130480,130482],{"className":129904,"code":130481,"language":129906,"meta":112,"style":112},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[114,130483,130484,130490,130500,130504,130510,130521],{"__ignoreMap":112},[128,130485,130486,130488],{"class":130,"line":131},[128,130487,3989],{"class":54685},[128,130489,1959],{"class":138},[128,130491,130492,130494,130496,130498],{"class":130,"line":142},[128,130493,73877],{"class":166},[128,130495,1967],{"class":138},[128,130497,58118],{"class":166},[128,130499,4905],{"class":138},[128,130501,130502],{"class":130,"line":156},[128,130503,2694],{"class":138},[128,130505,130506,130508],{"class":130,"line":163},[128,130507,19],{"class":54685},[128,130509,1959],{"class":138},[128,130511,130512,130514,130516,130519],{"class":130,"line":183},[128,130513,73877],{"class":166},[128,130515,1967],{"class":138},[128,130517,130518],{"class":166},"underline",[128,130520,4905],{"class":138},[128,130522,130523],{"class":130,"line":188},[128,130524,2694],{"class":138},[72,130526,130528],{"id":130527},"_644-文本缩进","6.4.4 文本缩进",[19,130530,130531],{},"实现文本的第一行首行缩进自己指定的距离",[19,130533,130534],{},"20px往右边走；-20px往左边走",[19,130536,130537],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[106,130539,130541],{"className":129904,"code":130540,"language":129906,"meta":112,"style":112},"p {\n  text-indent: 2em;\n}\n",[114,130542,130543,130549,130562],{"__ignoreMap":112},[128,130544,130545,130547],{"class":130,"line":131},[128,130546,19],{"class":54685},[128,130548,1959],{"class":138},[128,130550,130551,130554,130556,130558,130560],{"class":130,"line":142},[128,130552,130553],{"class":166},"  text-indent",[128,130555,1967],{"class":138},[128,130557,409],{"class":166},[128,130559,27040],{"class":134},[128,130561,4905],{"class":138},[128,130563,130564],{"class":130,"line":156},[128,130565,2694],{"class":138},[72,130567,130569],{"id":130568},"_645-行间距","6.4.5 行间距",[19,130571,130572],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[106,130574,130576],{"className":129904,"code":130575,"language":129906,"meta":112,"style":112},"p {\n  line-height: 1.6;\n}\n",[114,130577,130578,130584,130596],{"__ignoreMap":112},[128,130579,130580,130582],{"class":130,"line":131},[128,130581,19],{"class":54685},[128,130583,1959],{"class":138},[128,130585,130586,130589,130591,130594],{"class":130,"line":142},[128,130587,130588],{"class":166},"  line-height",[128,130590,1967],{"class":138},[128,130592,130593],{"class":166},"1.6",[128,130595,4905],{"class":138},[128,130597,130598],{"class":130,"line":156},[128,130599,2694],{"class":138},[3659,130601,130602],{},"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":112,"searchDepth":142,"depth":142,"links":130604},[130605,130606,130614,130621],{"id":130086,"depth":142,"text":130087},{"id":130121,"depth":142,"text":130122,"children":130607},[130608,130609,130610,130611,130612,130613],{"id":130128,"depth":156,"text":130129},{"id":130141,"depth":156,"text":130142},{"id":130214,"depth":156,"text":130215},{"id":130227,"depth":156,"text":130228},{"id":130246,"depth":156,"text":130247},{"id":130259,"depth":156,"text":130260},{"id":130266,"depth":142,"text":130267,"children":130615},[130616,130617,130618,130619,130620],{"id":130273,"depth":156,"text":130274},{"id":130285,"depth":156,"text":130286},{"id":130338,"depth":156,"text":130339},{"id":130359,"depth":156,"text":130360},{"id":130380,"depth":156,"text":130381},{"id":130406,"depth":142,"text":130407,"children":130622},[130623,130624,130625,130626,130627],{"id":130410,"depth":156,"text":130411},{"id":130460,"depth":156,"text":130461},{"id":130474,"depth":156,"text":130475},{"id":130527,"depth":156,"text":130528},{"id":130568,"depth":156,"text":130569},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":130078,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":130634,"title":130635,"body":130636,"description":3686,"extension":3687,"meta":131285,"navigation":159,"path":131286,"seo":131287,"stem":131288,"__hash__":131289},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":130637,"toc":131266},[130638,130641,130645,130649,130709,130713,130723,130726,130729,130733,130758,130762,130765,130768,130771,130774,130777,130781,130784,130787,130829,130832,130858,130864,130867,130871,130875,130881,130884,130887,130890,130893,130896,130899,130944,130948,130951,130954,130958,130962,130991,130994,130999,131002,131005,131008,131011,131015,131019,131022,131024,131027,131031,131034,131038,131041,131044,131047,131051,131055,131061,131071,131074,131077,131080,131083,131086,131209,131217,131225,131263],[10,130639,130635],{"id":130640},"_7-css引入方式与选择器进阶",[14,130642,130644],{"id":130643},"_71-css引入方式","7.1 css引入方式",[72,130646,130648],{"id":130647},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[106,130650,130654],{"className":130651,"code":130652,"language":130653,"meta":112,"style":112},"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",[114,130655,130656,130664,130671,130683,130696,130701],{"__ignoreMap":112},[128,130657,130658,130660,130662],{"class":130,"line":131},[128,130659,4657],{"class":138},[128,130661,3659],{"class":54685},[128,130663,54692],{"class":138},[128,130665,130666,130669],{"class":130,"line":142},[128,130667,130668],{"class":54685},"  h1",[128,130670,1959],{"class":138},[128,130672,130673,130676,130678,130681],{"class":130,"line":156},[128,130674,130675],{"class":166},"    color",[128,130677,1967],{"class":138},[128,130679,130680],{"class":166},"blue",[128,130682,4905],{"class":138},[128,130684,130685,130688,130690,130692,130694],{"class":130,"line":163},[128,130686,130687],{"class":166},"    font-size",[128,130689,1967],{"class":138},[128,130691,4549],{"class":166},[128,130693,54875],{"class":134},[128,130695,4905],{"class":138},[128,130697,130698],{"class":130,"line":183},[128,130699,130700],{"class":138},"  }\n",[128,130702,130703,130705,130707],{"class":130,"line":188},[128,130704,55168],{"class":138},[128,130706,3659],{"class":54685},[128,130708,54692],{"class":138},[19,130710,130711,29958],{},[3903,130712,129992],{},[19,130714,80600,130715,130718,130719,130722],{},[114,130716,130717],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[114,130720,130721],{},"\u003Chead>","标签中",[19,130724,130725],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,130727,130728],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[72,130730,130732],{"id":130731},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[106,130734,130736],{"className":130651,"code":130735,"language":130653,"meta":112,"style":112},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[114,130737,130738],{"__ignoreMap":112},[128,130739,130740,130742,130744,130746,130748,130751,130754,130756],{"class":130,"line":131},[128,130741,4657],{"class":138},[128,130743,19],{"class":54685},[128,130745,66005],{"class":199},[128,130747,270],{"class":138},[128,130749,130750],{"class":176},"\"color: red; font-size: 16px;\"",[128,130752,130753],{"class":138},">这是一个段落\u003C\u002F",[128,130755,19],{"class":54685},[128,130757,54692],{"class":138},[19,130759,130760,29958],{},[3903,130761,129992],{},[19,130763,130764],{},"①style其实就是标签的属性",[19,130766,130767],{},"②在双引号中间，写法要符合css规范",[19,130769,130770],{},"③可以控制当前的标签设置样式",[19,130772,130773],{},"④书写繁琐，简单时才用",[19,130775,130776],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[72,130778,130780],{"id":130779},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,130782,130783],{},"使用最多，单独建一个css文件，然后html引用",[19,130785,130786],{},"①css文件部分： style.css",[106,130788,130790],{"className":129904,"code":130789,"language":129906,"meta":112,"style":112},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[114,130791,130792,130797,130803,130813,130825],{"__ignoreMap":112},[128,130793,130794],{"class":130,"line":131},[128,130795,130796],{"class":3814},"\u002F* style.css *\u002F\n",[128,130798,130799,130801],{"class":130,"line":142},[128,130800,10],{"class":54685},[128,130802,1959],{"class":138},[128,130804,130805,130807,130809,130811],{"class":130,"line":156},[128,130806,74280],{"class":166},[128,130808,1967],{"class":138},[128,130810,130680],{"class":166},[128,130812,4905],{"class":138},[128,130814,130815,130817,130819,130821,130823],{"class":130,"line":163},[128,130816,74001],{"class":166},[128,130818,1967],{"class":138},[128,130820,4549],{"class":166},[128,130822,54875],{"class":134},[128,130824,4905],{"class":138},[128,130826,130827],{"class":130,"line":183},[128,130828,2694],{"class":138},[19,130830,130831],{},"②html部分",[106,130833,130835],{"className":130651,"code":130834,"language":130653,"meta":112,"style":112},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[114,130836,130837],{"__ignoreMap":112},[128,130838,130839,130841,130843,130845,130847,130849,130851,130853,130856],{"class":130,"line":131},[128,130840,4657],{"class":138},[128,130842,72383],{"class":54685},[128,130844,72386],{"class":199},[128,130846,270],{"class":138},[128,130848,72391],{"class":176},[128,130850,64436],{"class":199},[128,130852,270],{"class":138},[128,130854,130855],{"class":176},"\"style.css\"",[128,130857,54692],{"class":138},[19,130859,130860,130863],{},[114,130861,130862],{},"\u003Chr>","水平线标签（但是不常用！）",[19,130865,130866],{},"ctrl+0回到页面原来大小",[14,130868,130870],{"id":130869},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[72,130872,130874],{"id":130873},"_721-快速生成html","7.2.1 快速生成html",[19,130876,130877,130878],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[114,130879,130880],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,130882,130883],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,130885,130886],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,130888,130889],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,130891,130892],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,130894,130895],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,130897,130898],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[106,130900,130902],{"className":130651,"code":130901,"language":130653,"meta":112,"style":112},"\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",[114,130903,130904,130909,130914,130919,130924,130929,130934,130939],{"__ignoreMap":112},[128,130905,130906],{"class":130,"line":131},[128,130907,130908],{"class":3814},"\u003C!-- Emmet 语法示例 -->\n",[128,130910,130911],{"class":130,"line":142},[128,130912,130913],{"class":3814},"\u003C!-- div*3        → 生成3个div -->\n",[128,130915,130916],{"class":130,"line":156},[128,130917,130918],{"class":3814},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[128,130920,130921],{"class":130,"line":163},[128,130922,130923],{"class":3814},"\u003C!-- div+p        → 兄弟div和p -->\n",[128,130925,130926],{"class":130,"line":183},[128,130927,130928],{"class":3814},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[128,130930,130931],{"class":130,"line":188},[128,130932,130933],{"class":3814},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[128,130935,130936],{"class":130,"line":193},[128,130937,130938],{"class":3814},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[128,130940,130941],{"class":130,"line":206},[128,130942,130943],{"class":3814},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[72,130945,130947],{"id":130946},"_722-快速生成css","7.2.2 快速生成css",[19,130949,130950],{},"简写开头",[19,130952,130953],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,130955,130957],{"id":130956},"_73-css复合选择器","7.3 css复合选择器",[72,130959,130961],{"id":130960},"_731-后代选择器","7.3.1 后代选择器",[106,130963,130965],{"className":129904,"code":130964,"language":129906,"meta":112,"style":112},".parent .child {\n  color: blue;\n}\n",[114,130966,130967,130977,130987],{"__ignoreMap":112},[128,130968,130969,130972,130975],{"class":130,"line":131},[128,130970,130971],{"class":199},".parent",[128,130973,130974],{"class":199}," .child",[128,130976,1959],{"class":138},[128,130978,130979,130981,130983,130985],{"class":130,"line":142},[128,130980,74280],{"class":166},[128,130982,1967],{"class":138},[128,130984,130680],{"class":166},[128,130986,4905],{"class":138},[128,130988,130989],{"class":130,"line":156},[128,130990,2694],{"class":138},[19,130992,130993],{},"元素1 元素2 {样式声明}",[19,130995,130996],{},[3903,130997,130998],{},"注意点:",[19,131000,131001],{},"①元素1和元素2中间用空格隔开",[19,131003,131004],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,131006,131007],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,131009,131010],{},"④元素1和元素2可以是任意基础选择器",[72,131012,131014],{"id":131013},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,131016,131017],{},[3903,131018,130998],{},[19,131020,131021],{},"①元素1和元素2中间用大于号隔开",[19,131023,131004],{},[19,131025,131026],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[72,131028,131030],{"id":131029},"_733-并集选择器","7.3.3 并集选择器",[19,131032,131033],{},"元素1，元素2 {样式声明}",[19,131035,131036],{},[3903,131037,130998],{},[19,131039,131040],{},"①元素1和元素2中间用逗号隔开",[19,131042,131043],{},"②逗号可以理解为和的意思",[19,131045,131046],{},"③并集选择器通常用于集体声明",[72,131048,131050],{"id":131049},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,131052,131053],{},[3903,131054,130998],{},[19,131056,131057,131058,131060],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[72383,131059],{},"－:visited－:hover－:active。",[19,131062,131063,131064,131067,131068,29226],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[131065,131066],"hover",{}," 、 ",[131069,131070],"first-child",{},[19,131072,131073],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,131075,131076],{},"link对没访问的进行设置",[19,131078,131079],{},"vistied对已访问的进行改变",[19,131081,131082],{},"hover鼠标经过就会变",[19,131084,131085],{},"active常按(点)就会变",[106,131087,131089],{"className":129904,"code":131088,"language":129906,"meta":112,"style":112},"\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",[114,131090,131091,131096,131105,131115,131125,131129,131138,131149,131153,131161,131171,131181,131185,131194,131205],{"__ignoreMap":112},[128,131092,131093],{"class":130,"line":131},[128,131094,131095],{"class":3814},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[128,131097,131098,131100,131103],{"class":130,"line":142},[128,131099,3989],{"class":54685},[128,131101,131102],{"class":199},":link",[128,131104,1959],{"class":138},[128,131106,131107,131109,131111,131113],{"class":130,"line":156},[128,131108,74280],{"class":166},[128,131110,1967],{"class":138},[128,131112,65748],{"class":166},[128,131114,4905],{"class":138},[128,131116,131117,131119,131121,131123],{"class":130,"line":163},[128,131118,73877],{"class":166},[128,131120,1967],{"class":138},[128,131122,58118],{"class":166},[128,131124,4905],{"class":138},[128,131126,131127],{"class":130,"line":183},[128,131128,2694],{"class":138},[128,131130,131131,131133,131136],{"class":130,"line":188},[128,131132,3989],{"class":54685},[128,131134,131135],{"class":199},":visited",[128,131137,1959],{"class":138},[128,131139,131140,131142,131144,131147],{"class":130,"line":193},[128,131141,74280],{"class":166},[128,131143,1967],{"class":138},[128,131145,131146],{"class":166},"purple",[128,131148,4905],{"class":138},[128,131150,131151],{"class":130,"line":206},[128,131152,2694],{"class":138},[128,131154,131155,131157,131159],{"class":130,"line":221},[128,131156,3989],{"class":54685},[128,131158,64319],{"class":199},[128,131160,1959],{"class":138},[128,131162,131163,131165,131167,131169],{"class":130,"line":230},[128,131164,74280],{"class":166},[128,131166,1967],{"class":138},[128,131168,58270],{"class":166},[128,131170,4905],{"class":138},[128,131172,131173,131175,131177,131179],{"class":130,"line":235},[128,131174,73877],{"class":166},[128,131176,1967],{"class":138},[128,131178,130518],{"class":166},[128,131180,4905],{"class":138},[128,131182,131183],{"class":130,"line":244},[128,131184,2694],{"class":138},[128,131186,131187,131189,131192],{"class":130,"line":287},[128,131188,3989],{"class":54685},[128,131190,131191],{"class":199},":active",[128,131193,1959],{"class":138},[128,131195,131196,131198,131200,131203],{"class":130,"line":301},[128,131197,74280],{"class":166},[128,131199,1967],{"class":138},[128,131201,131202],{"class":166},"green",[128,131204,4905],{"class":138},[128,131206,131207],{"class":130,"line":310},[128,131208,2694],{"class":138},[72,131210,131212,131213,131216],{"id":131211},"_735-伪类选择器","7.3.5 ",[131214,131215],"focus",{},"伪类选择器",[19,131218,131219,131221,131222,131224],{},[131214,131220],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[114,131223,129965],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[106,131226,131228],{"className":129904,"code":131227,"language":129906,"meta":112,"style":112},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[114,131229,131230,131238,131249,131259],{"__ignoreMap":112},[128,131231,131232,131234,131236],{"class":130,"line":131},[128,131233,643],{"class":54685},[128,131235,65279],{"class":199},[128,131237,1959],{"class":138},[128,131239,131240,131243,131245,131247],{"class":130,"line":142},[128,131241,131242],{"class":166},"  border-color",[128,131244,1967],{"class":138},[128,131246,58270],{"class":166},[128,131248,4905],{"class":138},[128,131250,131251,131253,131255,131257],{"class":130,"line":156},[128,131252,74173],{"class":166},[128,131254,1967],{"class":138},[128,131256,58118],{"class":166},[128,131258,4905],{"class":138},[128,131260,131261],{"class":130,"line":163},[128,131262,2694],{"class":138},[3659,131264,131265],{},"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":112,"searchDepth":142,"depth":142,"links":131267},[131268,131273,131277],{"id":130643,"depth":142,"text":130644,"children":131269},[131270,131271,131272],{"id":130647,"depth":156,"text":130648},{"id":130731,"depth":156,"text":130732},{"id":130779,"depth":156,"text":130780},{"id":130869,"depth":142,"text":130870,"children":131274},[131275,131276],{"id":130873,"depth":156,"text":130874},{"id":130946,"depth":156,"text":130947},{"id":130956,"depth":142,"text":130957,"children":131278},[131279,131280,131281,131282,131283],{"id":130960,"depth":156,"text":130961},{"id":131013,"depth":156,"text":131014},{"id":131029,"depth":156,"text":131030},{"id":131049,"depth":156,"text":131050},{"id":131211,"depth":156,"text":131284},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":130635,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":131291,"title":131292,"body":131293,"description":3686,"extension":3687,"meta":133216,"navigation":159,"path":133217,"seo":133218,"stem":133219,"__hash__":133220},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":131294,"toc":133190},[131295,131298,131302,131311,131315,131341,131346,131349,131352,131355,131358,131362,131365,131375,131383,131387,131422,131427,131430,131433,131436,131439,131443,131446,131455,131459,131472,131477,131480,131483,131486,131490,131493,131497,131500,131555,131558,131589,131592,131646,131650,131653,131819,131942,131945,131948,131951,131954,131958,131961,131965,131968,131971,131975,131978,132009,132036,132064,132067,132071,132097,132140,132144,132238,132241,132268,132271,132274,132277,132280,132283,132286,132289,132292,132295,132299,132356,132383,132387,132435,132439,132480,132482,132485,132488,132491,132494,132498,132590,132593,132596,132599,132603,132726,132927,132931,132935,132938,132941,132944,132948,132951,132954,132979,132982,132985,132988,132991,132994,132998,133006,133068,133071,133129,133132,133135,133138,133141,133144,133147,133150,133187],[10,131296,131292],{"id":131297},"_8-css显示模式与背景特性",[14,131299,131301],{"id":131300},"_81-css元素显示模式","8.1 css元素显示模式",[19,131303,131304,131305,131307,131308,131310],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[114,131306,129515],{},"自己占一行，比如一行可以放多个",[114,131309,129518],{},"，HTML 元素一般分为块元素和行内元素两种类型",[72,131312,131314],{"id":131313},"_811-块元素","8.1.1 块元素",[19,131316,131317,131318,131320,131321,3550,131324,3550,131326,3550,131328,3550,131331,3550,131334,131337,131338,131340],{},"常见的块元素有",[114,131319,129419],{},"~",[114,131322,131323],{},"\u003Ch6>",[114,131325,129445],{},[114,131327,129515],{},[114,131329,131330],{},"\u003Cul>",[114,131332,131333],{},"\u003Col>",[114,131335,131336],{},"\u003Cli>","等，其中 ",[114,131339,129515],{}," 标签是最典型的块元素",[19,131342,131343],{},[3903,131344,131345],{},"块级元素的特点：",[19,131347,131348],{},"① 比较霸道，自己独占一行。",[19,131350,131351],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,131353,131354],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,131356,131357],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,131359,131360],{},[3903,131361,3788],{},[19,131363,131364],{},"①文字类的元素内不能使用块级元素",[19,131366,80623,131367,131369,131370,131372,131373],{},[114,131368,129445],{}," 标签主要用于存放文字，因此 ",[114,131371,129445],{}," 里面不能放块级元素，特别是不能放",[114,131374,129515],{},[19,131376,131377,131378,131320,131380,131382],{},"⑥同理， ",[114,131379,129419],{},[114,131381,131323],{},"等都是文字类块级标签，里面也不能放其他块级元素",[72,131384,131386],{"id":131385},"_812-行内元素","8.1.2 行内元素",[19,131388,131389,131390,3550,131392,3550,131395,3550,131398,3550,131401,3550,131404,3550,131407,3550,131410,3550,131413,3550,131416,131418,131419,131421],{},"常见的行内元素有 ",[114,131391,129677],{},[114,131393,131394],{},"\u003Cstrong>",[114,131396,131397],{},"\u003Cb>",[114,131399,131400],{},"\u003Cem>",[114,131402,131403],{},"\u003Ci>",[114,131405,131406],{},"\u003Cdel>",[114,131408,131409],{},"\u003Cs>",[114,131411,131412],{},"\u003Cins>",[114,131414,131415],{},"\u003Cu>",[114,131417,129518],{}," 等，其中 ",[114,131420,129518],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,131423,131424],{},[3903,131425,131426],{},"特点：",[19,131428,131429],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,131431,131432],{},"② 高、宽直接设置是无效的。",[19,131434,131435],{},"③ 默认宽度就是它本身内容的宽度。",[19,131437,131438],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,131440,131441],{},[3903,131442,3788],{},[19,131444,131445],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,131447,131448,131449,131451,131452,131454],{},"②特殊情况链接 ",[114,131450,129677],{}," 里面可以放块级元素，但是给 ",[114,131453,129677],{}," 转换一下块级模式最安全",[72,131456,131458],{"id":131457},"_813-行内块元素","8.1.3 行内块元素",[19,131460,131461,131462,3550,131465,3550,131468,131471],{},"在行内元素中有几个特殊的标签 —— ",[114,131463,131464],{},"\u003Cimg \u002F>",[114,131466,131467],{},"\u003Cinput \u002F>",[114,131469,131470],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,131473,131474],{},[3903,131475,131476],{},"行内块元素的特点：",[19,131478,131479],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,131481,131482],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,131484,131485],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[72,131487,131489],{"id":131488},"_814-总结","8.1.4 总结",[5074,131491],{"style":129760,"src":131492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[72,131494,131496],{"id":131495},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,131498,131499],{},"①转换为块元素：display:block;",[106,131501,131503],{"className":129904,"code":131502,"language":129906,"meta":112,"style":112},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[114,131504,131505,131510,131516,131527,131539,131551],{"__ignoreMap":112},[128,131506,131507],{"class":130,"line":131},[128,131508,131509],{"class":3814},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[128,131511,131512,131514],{"class":130,"line":142},[128,131513,3989],{"class":54685},[128,131515,1959],{"class":138},[128,131517,131518,131521,131523,131525],{"class":130,"line":156},[128,131519,131520],{"class":166},"  display",[128,131522,1967],{"class":138},[128,131524,64248],{"class":166},[128,131526,4905],{"class":138},[128,131528,131529,131531,131533,131535,131537],{"class":130,"line":163},[128,131530,73943],{"class":166},[128,131532,1967],{"class":138},[128,131534,4061],{"class":166},[128,131536,54875],{"class":134},[128,131538,4905],{"class":138},[128,131540,131541,131543,131545,131547,131549],{"class":130,"line":183},[128,131542,74163],{"class":166},[128,131544,1967],{"class":138},[128,131546,4151],{"class":166},[128,131548,54875],{"class":134},[128,131550,4905],{"class":138},[128,131552,131553],{"class":130,"line":188},[128,131554,2694],{"class":138},[19,131556,131557],{},"②转换为行内元素：display:inline;",[106,131559,131561],{"className":129904,"code":131560,"language":129906,"meta":112,"style":112},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[114,131562,131563,131568,131574,131585],{"__ignoreMap":112},[128,131564,131565],{"class":130,"line":131},[128,131566,131567],{"class":3814},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[128,131569,131570,131572],{"class":130,"line":142},[128,131571,54994],{"class":54685},[128,131573,1959],{"class":138},[128,131575,131576,131578,131580,131583],{"class":130,"line":156},[128,131577,131520],{"class":166},[128,131579,1967],{"class":138},[128,131581,131582],{"class":166},"inline",[128,131584,4905],{"class":138},[128,131586,131587],{"class":130,"line":163},[128,131588,2694],{"class":138},[19,131590,131591],{},"③转换为行内块：display:inline-block;",[106,131593,131595],{"className":129904,"code":131594,"language":129906,"meta":112,"style":112},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[114,131596,131597,131602,131608,131618,131630,131642],{"__ignoreMap":112},[128,131598,131599],{"class":130,"line":131},[128,131600,131601],{"class":3814},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[128,131603,131604,131606],{"class":130,"line":142},[128,131605,128],{"class":54685},[128,131607,1959],{"class":138},[128,131609,131610,131612,131614,131616],{"class":130,"line":156},[128,131611,131520],{"class":166},[128,131613,1967],{"class":138},[128,131615,75758],{"class":166},[128,131617,4905],{"class":138},[128,131619,131620,131622,131624,131626,131628],{"class":130,"line":163},[128,131621,73943],{"class":166},[128,131623,1967],{"class":138},[128,131625,4361],{"class":166},[128,131627,54875],{"class":134},[128,131629,4905],{"class":138},[128,131631,131632,131634,131636,131638,131640],{"class":130,"line":183},[128,131633,74163],{"class":166},[128,131635,1967],{"class":138},[128,131637,4696],{"class":166},[128,131639,54875],{"class":134},[128,131641,4905],{"class":138},[128,131643,131644],{"class":130,"line":188},[128,131645,2694],{"class":138},[72,131647,131649],{"id":131648},"_816-小米侧边栏","8.1.6 小米侧边栏",[5074,131651],{"style":129760,"src":131652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[106,131654,131656],{"className":130651,"code":131655,"language":130653,"meta":112,"style":112},"\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",[114,131657,131658,131663,131678,131697,131716,131735,131754,131773,131792,131811],{"__ignoreMap":112},[128,131659,131660],{"class":130,"line":131},[128,131661,131662],{"class":3814},"\u003C!-- 小米侧边栏案例 -->\n",[128,131664,131665,131667,131669,131671,131673,131676],{"class":130,"line":142},[128,131666,4657],{"class":138},[128,131668,54994],{"class":54685},[128,131670,56868],{"class":199},[128,131672,270],{"class":138},[128,131674,131675],{"class":176},"\"sidebar\"",[128,131677,54692],{"class":138},[128,131679,131680,131682,131684,131686,131688,131690,131693,131695],{"class":130,"line":156},[128,131681,55526],{"class":138},[128,131683,3989],{"class":54685},[128,131685,64436],{"class":199},[128,131687,270],{"class":138},[128,131689,64441],{"class":176},[128,131691,131692],{"class":138},">手机 电话卡\u003C\u002F",[128,131694,3989],{"class":54685},[128,131696,54692],{"class":138},[128,131698,131699,131701,131703,131705,131707,131709,131712,131714],{"class":130,"line":163},[128,131700,55526],{"class":138},[128,131702,3989],{"class":54685},[128,131704,64436],{"class":199},[128,131706,270],{"class":138},[128,131708,64441],{"class":176},[128,131710,131711],{"class":138},">电视 盒子\u003C\u002F",[128,131713,3989],{"class":54685},[128,131715,54692],{"class":138},[128,131717,131718,131720,131722,131724,131726,131728,131731,131733],{"class":130,"line":183},[128,131719,55526],{"class":138},[128,131721,3989],{"class":54685},[128,131723,64436],{"class":199},[128,131725,270],{"class":138},[128,131727,64441],{"class":176},[128,131729,131730],{"class":138},">笔记本 平板\u003C\u002F",[128,131732,3989],{"class":54685},[128,131734,54692],{"class":138},[128,131736,131737,131739,131741,131743,131745,131747,131750,131752],{"class":130,"line":188},[128,131738,55526],{"class":138},[128,131740,3989],{"class":54685},[128,131742,64436],{"class":199},[128,131744,270],{"class":138},[128,131746,64441],{"class":176},[128,131748,131749],{"class":138},">出行 穿戴\u003C\u002F",[128,131751,3989],{"class":54685},[128,131753,54692],{"class":138},[128,131755,131756,131758,131760,131762,131764,131766,131769,131771],{"class":130,"line":193},[128,131757,55526],{"class":138},[128,131759,3989],{"class":54685},[128,131761,64436],{"class":199},[128,131763,270],{"class":138},[128,131765,64441],{"class":176},[128,131767,131768],{"class":138},">智能 路由器\u003C\u002F",[128,131770,3989],{"class":54685},[128,131772,54692],{"class":138},[128,131774,131775,131777,131779,131781,131783,131785,131788,131790],{"class":130,"line":206},[128,131776,55526],{"class":138},[128,131778,3989],{"class":54685},[128,131780,64436],{"class":199},[128,131782,270],{"class":138},[128,131784,64441],{"class":176},[128,131786,131787],{"class":138},">健康 儿童\u003C\u002F",[128,131789,3989],{"class":54685},[128,131791,54692],{"class":138},[128,131793,131794,131796,131798,131800,131802,131804,131807,131809],{"class":130,"line":221},[128,131795,55526],{"class":138},[128,131797,3989],{"class":54685},[128,131799,64436],{"class":199},[128,131801,270],{"class":138},[128,131803,64441],{"class":176},[128,131805,131806],{"class":138},">耳机 音响\u003C\u002F",[128,131808,3989],{"class":54685},[128,131810,54692],{"class":138},[128,131812,131813,131815,131817],{"class":130,"line":230},[128,131814,55168],{"class":138},[128,131816,54994],{"class":54685},[128,131818,54692],{"class":138},[106,131820,131822],{"className":129904,"code":131821,"language":129906,"meta":112,"style":112},".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",[114,131823,131824,131833,131843,131856,131868,131880,131892,131902,131913,131917,131927,131938],{"__ignoreMap":112},[128,131825,131826,131829,131831],{"class":130,"line":131},[128,131827,131828],{"class":199},".sidebar",[128,131830,5010],{"class":54685},[128,131832,1959],{"class":138},[128,131834,131835,131837,131839,131841],{"class":130,"line":142},[128,131836,131520],{"class":166},[128,131838,1967],{"class":138},[128,131840,64248],{"class":166},[128,131842,4905],{"class":138},[128,131844,131845,131847,131849,131852,131854],{"class":130,"line":156},[128,131846,73943],{"class":166},[128,131848,1967],{"class":138},[128,131850,131851],{"class":166},"234",[128,131853,54875],{"class":134},[128,131855,4905],{"class":138},[128,131857,131858,131860,131862,131864,131866],{"class":130,"line":163},[128,131859,74163],{"class":166},[128,131861,1967],{"class":138},[128,131863,4202],{"class":166},[128,131865,54875],{"class":134},[128,131867,4905],{"class":138},[128,131869,131870,131872,131874,131876,131878],{"class":130,"line":183},[128,131871,130588],{"class":166},[128,131873,1967],{"class":138},[128,131875,4202],{"class":166},[128,131877,54875],{"class":134},[128,131879,4905],{"class":138},[128,131881,131882,131884,131886,131888,131890],{"class":130,"line":188},[128,131883,74198],{"class":166},[128,131885,1967],{"class":138},[128,131887,4696],{"class":166},[128,131889,54875],{"class":134},[128,131891,4905],{"class":138},[128,131893,131894,131896,131898,131900],{"class":130,"line":193},[128,131895,74280],{"class":166},[128,131897,1967],{"class":138},[128,131899,64221],{"class":166},[128,131901,4905],{"class":138},[128,131903,131904,131906,131908,131911],{"class":130,"line":206},[128,131905,74253],{"class":166},[128,131907,1967],{"class":138},[128,131909,131910],{"class":166},"#55585a",[128,131912,4905],{"class":138},[128,131914,131915],{"class":130,"line":221},[128,131916,2694],{"class":138},[128,131918,131919,131921,131923,131925],{"class":130,"line":230},[128,131920,131828],{"class":199},[128,131922,5010],{"class":54685},[128,131924,64319],{"class":199},[128,131926,1959],{"class":138},[128,131928,131929,131931,131933,131936],{"class":130,"line":235},[128,131930,74253],{"class":166},[128,131932,1967],{"class":138},[128,131934,131935],{"class":166},"#ff6700",[128,131937,4905],{"class":138},[128,131939,131940],{"class":130,"line":244},[128,131941,2694],{"class":138},[5074,131943],{"style":129760,"src":131944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,131946,131947],{},"行高=盒子高度：实现文字的垂直居中",[19,131949,131950],{},"原理讲解：",[5074,131952],{"style":129760,"src":131953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,131955,131957],{"id":131956},"_82-css背景","8.2 css背景",[19,131959,131960],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[72,131962,131964],{"id":131963},"_821-背景颜色","8.2.1 背景颜色",[19,131966,131967],{},"background-color:颜色值;",[19,131969,131970],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[72,131972,131974],{"id":131973},"_822-背景图片","8.2.2 背景图片",[19,131976,131977],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[106,131979,131981],{"className":129904,"code":131980,"language":129906,"meta":112,"style":112},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[114,131982,131983,131989,132005],{"__ignoreMap":112},[128,131984,131985,131987],{"class":130,"line":131},[128,131986,54994],{"class":54685},[128,131988,1959],{"class":138},[128,131990,131991,131994,131996,131998,132000,132003],{"class":130,"line":142},[128,131992,131993],{"class":166},"  background-image",[128,131995,1967],{"class":138},[128,131997,65105],{"class":166},[128,131999,253],{"class":138},[128,132001,132002],{"class":266},"images\u002Fbg.png",[128,132004,6292],{"class":138},[128,132006,132007],{"class":130,"line":156},[128,132008,2694],{"class":138},[3891,132010,132011,132020],{},[3894,132012,132013],{},[3897,132014,132015,132018],{},[3900,132016,132017],{"align":27223},"参数值",[3900,132019,106059],{"align":27223},[3938,132021,132022,132029],{},[3897,132023,132024,132026],{},[3943,132025,58118],{"align":27223},[3943,132027,132028],{"align":27223},"无背景图（默认的）",[3897,132030,132031,132033],{},[3943,132032,65105],{"align":27223},[3943,132034,132035],{"align":27223},"使用绝对或相对地址指定背景图像",[106,132037,132038],{"className":129904,"code":131980,"language":129906,"meta":112,"style":112},[114,132039,132040,132046,132060],{"__ignoreMap":112},[128,132041,132042,132044],{"class":130,"line":131},[128,132043,54994],{"class":54685},[128,132045,1959],{"class":138},[128,132047,132048,132050,132052,132054,132056,132058],{"class":130,"line":142},[128,132049,131993],{"class":166},[128,132051,1967],{"class":138},[128,132053,65105],{"class":166},[128,132055,253],{"class":138},[128,132057,132002],{"class":266},[128,132059,6292],{"class":138},[128,132061,132062],{"class":130,"line":156},[128,132063,2694],{"class":138},[19,132065,132066],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[72,132068,132070],{"id":132069},"_823-背景平铺","8.2.3 背景平铺",[106,132072,132074],{"className":129904,"code":132073,"language":129906,"meta":112,"style":112},"div {\n  background-repeat: no-repeat;\n}\n",[114,132075,132076,132082,132093],{"__ignoreMap":112},[128,132077,132078,132080],{"class":130,"line":131},[128,132079,54994],{"class":54685},[128,132081,1959],{"class":138},[128,132083,132084,132087,132089,132091],{"class":130,"line":142},[128,132085,132086],{"class":166},"  background-repeat",[128,132088,1967],{"class":138},[128,132090,65115],{"class":166},[128,132092,4905],{"class":138},[128,132094,132095],{"class":130,"line":156},[128,132096,2694],{"class":138},[3891,132098,132099,132107],{},[3894,132100,132101],{},[3897,132102,132103,132105],{},[3900,132104,132017],{"align":27223},[3900,132106,106059],{"align":27223},[3938,132108,132109,132117,132124,132132],{},[3897,132110,132111,132114],{},[3943,132112,132113],{"align":27223},"repeat",[3943,132115,132116],{"align":27223},"背景图像在纵向和横向上平铺（默认的）",[3897,132118,132119,132121],{},[3943,132120,65115],{"align":27223},[3943,132122,132123],{"align":27223},"背景图像不平铺",[3897,132125,132126,132129],{},[3943,132127,132128],{"align":27223},"repeat-x",[3943,132130,132131],{"align":27223},"背景图像在横向上平铺",[3897,132133,132134,132137],{},[3943,132135,132136],{"align":27223},"repeat-y",[3943,132138,132139],{"align":27223},"背景图像在纵向平铺",[72,132141,132143],{"id":132142},"_824-背景图片位置","8.2.4 背景图片位置",[106,132145,132147],{"className":129904,"code":132146,"language":129906,"meta":112,"style":112},"\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",[114,132148,132149,132154,132160,132174,132178,132183,132189,132205,132209,132214,132220,132234],{"__ignoreMap":112},[128,132150,132151],{"class":130,"line":131},[128,132152,132153],{"class":3814},"\u002F* 方位名词 *\u002F\n",[128,132155,132156,132158],{"class":130,"line":142},[128,132157,54994],{"class":54685},[128,132159,1959],{"class":138},[128,132161,132162,132165,132167,132169,132172],{"class":130,"line":156},[128,132163,132164],{"class":166},"  background-position",[128,132166,1967],{"class":138},[128,132168,54975],{"class":166},[128,132170,132171],{"class":166}," top",[128,132173,4905],{"class":138},[128,132175,132176],{"class":130,"line":163},[128,132177,2694],{"class":138},[128,132179,132180],{"class":130,"line":183},[128,132181,132182],{"class":3814},"\u002F* 精确单位 *\u002F\n",[128,132184,132185,132187],{"class":130,"line":188},[128,132186,54994],{"class":54685},[128,132188,1959],{"class":138},[128,132190,132191,132193,132195,132197,132199,132201,132203],{"class":130,"line":193},[128,132192,132164],{"class":166},[128,132194,1967],{"class":138},[128,132196,4449],{"class":166},[128,132198,54875],{"class":134},[128,132200,60884],{"class":166},[128,132202,54875],{"class":134},[128,132204,4905],{"class":138},[128,132206,132207],{"class":130,"line":206},[128,132208,2694],{"class":138},[128,132210,132211],{"class":130,"line":221},[128,132212,132213],{"class":3814},"\u002F* 混合单位 *\u002F\n",[128,132215,132216,132218],{"class":130,"line":230},[128,132217,54994],{"class":54685},[128,132219,1959],{"class":138},[128,132221,132222,132224,132226,132228,132230,132232],{"class":130,"line":235},[128,132223,132164],{"class":166},[128,132225,1967],{"class":138},[128,132227,4449],{"class":166},[128,132229,54875],{"class":134},[128,132231,20631],{"class":166},[128,132233,4905],{"class":138},[128,132235,132236],{"class":130,"line":244},[128,132237,2694],{"class":138},[19,132239,132240],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[3891,132242,132243,132251],{},[3894,132244,132245],{},[3897,132246,132247,132249],{},[3900,132248,132017],{"align":27223},[3900,132250,29355],{"align":27223},[3938,132252,132253,132260],{},[3897,132254,132255,132257],{},[3943,132256,55350],{"align":27223},[3943,132258,132259],{"align":27223},"百分数|由浮点数和单位标识符组成的长度值",[3897,132261,132262,132265],{},[3943,132263,132264],{"align":27223},"position",[3943,132266,132267],{"align":27223},"top|center|bottom|left|center|right 方位名词",[19,132269,132270],{},"其他说明：",[19,132272,132273],{},"①参数是方位名词",[19,132275,132276],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,132278,132279],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,132281,132282],{},"②参数是精确单位",[19,132284,132285],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,132287,132288],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,132290,132291],{},"③参数是混合单位",[19,132293,132294],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[72,132296,132298],{"id":132297},"_825-背景图片固定","8.2.5 背景图片固定",[106,132300,132302],{"className":129904,"code":132301,"language":129906,"meta":112,"style":112},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[114,132303,132304,132309,132315,132327,132331,132336,132342,132352],{"__ignoreMap":112},[128,132305,132306],{"class":130,"line":131},[128,132307,132308],{"class":3814},"\u002F* 背景滚动（默认） *\u002F\n",[128,132310,132311,132313],{"class":130,"line":142},[128,132312,54994],{"class":54685},[128,132314,1959],{"class":138},[128,132316,132317,132320,132322,132325],{"class":130,"line":156},[128,132318,132319],{"class":166},"  background-attachment",[128,132321,1967],{"class":138},[128,132323,132324],{"class":166},"scroll",[128,132326,4905],{"class":138},[128,132328,132329],{"class":130,"line":163},[128,132330,2694],{"class":138},[128,132332,132333],{"class":130,"line":183},[128,132334,132335],{"class":3814},"\u002F* 背景固定 *\u002F\n",[128,132337,132338,132340],{"class":130,"line":188},[128,132339,54994],{"class":54685},[128,132341,1959],{"class":138},[128,132343,132344,132346,132348,132350],{"class":130,"line":193},[128,132345,132319],{"class":166},[128,132347,1967],{"class":138},[128,132349,89605],{"class":166},[128,132351,4905],{"class":138},[128,132353,132354],{"class":130,"line":206},[128,132355,2694],{"class":138},[3891,132357,132358,132367],{},[3894,132359,132360],{},[3897,132361,132362,132365],{},[3900,132363,132364],{"align":27223},"参数",[3900,132366,106059],{"align":27223},[3938,132368,132369,132376],{},[3897,132370,132371,132373],{},[3943,132372,132324],{"align":27223},[3943,132374,132375],{"align":27223},"背景图像是随对象内容滚动",[3897,132377,132378,132380],{},[3943,132379,89605],{"align":27223},[3943,132381,132382],{"align":27223},"背景图像固定",[72,132384,132386],{"id":132385},"_826-背景样式合写","8.2.6 背景样式合写",[106,132388,132390],{"className":129904,"code":132389,"language":129906,"meta":112,"style":112},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[114,132391,132392,132397,132403,132431],{"__ignoreMap":112},[128,132393,132394],{"class":130,"line":131},[128,132395,132396],{"class":3814},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[128,132398,132399,132401],{"class":130,"line":142},[128,132400,54994],{"class":54685},[128,132402,1959],{"class":138},[128,132404,132405,132407,132409,132411,132414,132416,132418,132420,132422,132425,132427,132429],{"class":130,"line":156},[128,132406,73986],{"class":166},[128,132408,1967],{"class":138},[128,132410,64221],{"class":166},[128,132412,132413],{"class":166}," url",[128,132415,253],{"class":138},[128,132417,132002],{"class":266},[128,132419,276],{"class":138},[128,132421,65115],{"class":166},[128,132423,132424],{"class":166}," fixed",[128,132426,20631],{"class":166},[128,132428,132171],{"class":166},[128,132430,4905],{"class":138},[128,132432,132433],{"class":130,"line":163},[128,132434,2694],{"class":138},[72,132436,132438],{"id":132437},"_827-背景色半透明","8.2.7 背景色半透明",[106,132440,132442],{"className":129904,"code":132441,"language":129906,"meta":112,"style":112},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[114,132443,132444,132450,132476],{"__ignoreMap":112},[128,132445,132446,132448],{"class":130,"line":131},[128,132447,54994],{"class":54685},[128,132449,1959],{"class":138},[128,132451,132452,132454,132456,132458,132460,132462,132464,132466,132468,132470,132472,132474],{"class":130,"line":142},[128,132453,73986],{"class":166},[128,132455,1967],{"class":138},[128,132457,58491],{"class":166},[128,132459,253],{"class":138},[128,132461,2452],{"class":166},[128,132463,258],{"class":138},[128,132465,2452],{"class":166},[128,132467,258],{"class":138},[128,132469,2452],{"class":166},[128,132471,258],{"class":138},[128,132473,103890],{"class":166},[128,132475,6292],{"class":138},[128,132477,132478],{"class":130,"line":156},[128,132479,2694],{"class":138},[19,132481,102765],{},[19,132483,132484],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,132486,132487],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,132489,132490],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,132492,132493],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[72,132495,132497],{"id":132496},"_828-总结","8.2.8 总结",[3891,132499,132500,132511],{},[3894,132501,132502],{},[3897,132503,132504,132507,132509],{},[3900,132505,132506],{"align":27223},"属性",[3900,132508,106059],{"align":27223},[3900,132510,3906],{"align":27223},[3938,132512,132513,132524,132535,132546,132557,132568,132579],{},[3897,132514,132515,132518,132521],{},[3943,132516,132517],{"align":27223},"background-color",[3943,132519,132520],{"align":27223},"背景颜色",[3943,132522,132523],{"align":27223},"预定义的颜色值\u002F十六进制\u002FRGB代码",[3897,132525,132526,132529,132532],{},[3943,132527,132528],{"align":27223},"background-image",[3943,132530,132531],{"align":27223},"背景图片",[3943,132533,132534],{"align":27223},"url(图片路径)",[3897,132536,132537,132540,132543],{},[3943,132538,132539],{"align":27223},"background-repeat",[3943,132541,132542],{"align":27223},"是否平铺",[3943,132544,132545],{"align":27223},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[3897,132547,132548,132551,132554],{},[3943,132549,132550],{"align":27223},"background-position",[3943,132552,132553],{"align":27223},"背景位置",[3943,132555,132556],{"align":27223},"length\u002Fposition 分别是x和y坐标",[3897,132558,132559,132562,132565],{},[3943,132560,132561],{"align":27223},"background-attachment",[3943,132563,132564],{"align":27223},"背景附着",[3943,132566,132567],{"align":27223},"scroll(背景滚动) \u002Ffixed (背景固定)",[3897,132569,132570,132573,132576],{},[3943,132571,132572],{"align":27223},"背景简写",[3943,132574,132575],{"align":27223},"书写更简单",[3943,132577,132578],{"align":27223},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[3897,132580,132581,132584,132587],{},[3943,132582,132583],{"align":27223},"背景半透明",[3943,132585,132586],{"align":27223},"背景颜色半透明",[3943,132588,132589],{"align":27223},"background: rgba(0,0,0.3); 后面必须是4个值",[19,132591,132592],{},"颜色渐变：",[5074,132594],{"style":129760,"src":132595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[5074,132597],{"style":129760,"src":132598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[72,132600,132602],{"id":132601},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[106,132604,132606],{"className":130651,"code":132605,"language":130653,"meta":112,"style":112},"\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",[114,132607,132608,132623,132642,132661,132680,132699,132718],{"__ignoreMap":112},[128,132609,132610,132612,132614,132616,132618,132621],{"class":130,"line":131},[128,132611,4657],{"class":138},[128,132613,54994],{"class":54685},[128,132615,56868],{"class":199},[128,132617,270],{"class":138},[128,132619,132620],{"class":176},"\"nav\"",[128,132622,54692],{"class":138},[128,132624,132625,132627,132629,132631,132633,132635,132638,132640],{"class":130,"line":142},[128,132626,55526],{"class":138},[128,132628,3989],{"class":54685},[128,132630,64436],{"class":199},[128,132632,270],{"class":138},[128,132634,64441],{"class":176},[128,132636,132637],{"class":138},">五彩导航1\u003C\u002F",[128,132639,3989],{"class":54685},[128,132641,54692],{"class":138},[128,132643,132644,132646,132648,132650,132652,132654,132657,132659],{"class":130,"line":156},[128,132645,55526],{"class":138},[128,132647,3989],{"class":54685},[128,132649,64436],{"class":199},[128,132651,270],{"class":138},[128,132653,64441],{"class":176},[128,132655,132656],{"class":138},">五彩导航2\u003C\u002F",[128,132658,3989],{"class":54685},[128,132660,54692],{"class":138},[128,132662,132663,132665,132667,132669,132671,132673,132676,132678],{"class":130,"line":163},[128,132664,55526],{"class":138},[128,132666,3989],{"class":54685},[128,132668,64436],{"class":199},[128,132670,270],{"class":138},[128,132672,64441],{"class":176},[128,132674,132675],{"class":138},">五彩导航3\u003C\u002F",[128,132677,3989],{"class":54685},[128,132679,54692],{"class":138},[128,132681,132682,132684,132686,132688,132690,132692,132695,132697],{"class":130,"line":183},[128,132683,55526],{"class":138},[128,132685,3989],{"class":54685},[128,132687,64436],{"class":199},[128,132689,270],{"class":138},[128,132691,64441],{"class":176},[128,132693,132694],{"class":138},">五彩导航4\u003C\u002F",[128,132696,3989],{"class":54685},[128,132698,54692],{"class":138},[128,132700,132701,132703,132705,132707,132709,132711,132714,132716],{"class":130,"line":188},[128,132702,55526],{"class":138},[128,132704,3989],{"class":54685},[128,132706,64436],{"class":199},[128,132708,270],{"class":138},[128,132710,64441],{"class":176},[128,132712,132713],{"class":138},">五彩导航5\u003C\u002F",[128,132715,3989],{"class":54685},[128,132717,54692],{"class":138},[128,132719,132720,132722,132724],{"class":130,"line":193},[128,132721,55168],{"class":138},[128,132723,54994],{"class":54685},[128,132725,54692],{"class":138},[106,132727,132729],{"className":129904,"code":132728,"language":129906,"meta":112,"style":112},".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",[114,132730,132731,132740,132750,132762,132774,132784,132796,132806,132810,132835,132858,132881,132904],{"__ignoreMap":112},[128,132732,132733,132736,132738],{"class":130,"line":131},[128,132734,132735],{"class":199},".nav",[128,132737,5010],{"class":54685},[128,132739,1959],{"class":138},[128,132741,132742,132744,132746,132748],{"class":130,"line":142},[128,132743,131520],{"class":166},[128,132745,1967],{"class":138},[128,132747,75758],{"class":166},[128,132749,4905],{"class":138},[128,132751,132752,132754,132756,132758,132760],{"class":130,"line":156},[128,132753,73943],{"class":166},[128,132755,1967],{"class":138},[128,132757,3115],{"class":166},[128,132759,54875],{"class":134},[128,132761,4905],{"class":138},[128,132763,132764,132766,132768,132770,132772],{"class":130,"line":163},[128,132765,74163],{"class":166},[128,132767,1967],{"class":138},[128,132769,4604],{"class":166},[128,132771,54875],{"class":134},[128,132773,4905],{"class":138},[128,132775,132776,132778,132780,132782],{"class":130,"line":183},[128,132777,73901],{"class":166},[128,132779,1967],{"class":138},[128,132781,54975],{"class":166},[128,132783,4905],{"class":138},[128,132785,132786,132788,132790,132792,132794],{"class":130,"line":188},[128,132787,130588],{"class":166},[128,132789,1967],{"class":138},[128,132791,4604],{"class":166},[128,132793,54875],{"class":134},[128,132795,4905],{"class":138},[128,132797,132798,132800,132802,132804],{"class":130,"line":193},[128,132799,74280],{"class":166},[128,132801,1967],{"class":138},[128,132803,64221],{"class":166},[128,132805,4905],{"class":138},[128,132807,132808],{"class":130,"line":206},[128,132809,2694],{"class":138},[128,132811,132812,132814,132816,132819,132821,132823,132826,132828,132830,132832],{"class":130,"line":221},[128,132813,132735],{"class":199},[128,132815,5010],{"class":54685},[128,132817,132818],{"class":199},":nth-child",[128,132820,253],{"class":138},[128,132822,2592],{"class":166},[128,132824,132825],{"class":138},") { ",[128,132827,132517],{"class":166},[128,132829,1967],{"class":138},[128,132831,131935],{"class":166},[128,132833,132834],{"class":138},"; }\n",[128,132836,132837,132839,132841,132843,132845,132847,132849,132851,132853,132856],{"class":130,"line":230},[128,132838,132735],{"class":199},[128,132840,5010],{"class":54685},[128,132842,132818],{"class":199},[128,132844,253],{"class":138},[128,132846,409],{"class":166},[128,132848,132825],{"class":138},[128,132850,132517],{"class":166},[128,132852,1967],{"class":138},[128,132854,132855],{"class":166},"#ff0000",[128,132857,132834],{"class":138},[128,132859,132860,132862,132864,132866,132868,132870,132872,132874,132876,132879],{"class":130,"line":235},[128,132861,132735],{"class":199},[128,132863,5010],{"class":54685},[128,132865,132818],{"class":199},[128,132867,253],{"class":138},[128,132869,3827],{"class":166},[128,132871,132825],{"class":138},[128,132873,132517],{"class":166},[128,132875,1967],{"class":138},[128,132877,132878],{"class":166},"#00a4ff",[128,132880,132834],{"class":138},[128,132882,132883,132885,132887,132889,132891,132893,132895,132897,132899,132902],{"class":130,"line":244},[128,132884,132735],{"class":199},[128,132886,5010],{"class":54685},[128,132888,132818],{"class":199},[128,132890,253],{"class":138},[128,132892,4043],{"class":166},[128,132894,132825],{"class":138},[128,132896,132517],{"class":166},[128,132898,1967],{"class":138},[128,132900,132901],{"class":166},"#ff00ff",[128,132903,132834],{"class":138},[128,132905,132906,132908,132910,132912,132914,132916,132918,132920,132922,132925],{"class":130,"line":287},[128,132907,132735],{"class":199},[128,132909,5010],{"class":54685},[128,132911,132818],{"class":199},[128,132913,253],{"class":138},[128,132915,4069],{"class":166},[128,132917,132825],{"class":138},[128,132919,132517],{"class":166},[128,132921,1967],{"class":138},[128,132923,132924],{"class":166},"#00ff00",[128,132926,132834],{"class":138},[14,132928,132930],{"id":132929},"_83-css三大特性","8.3 css三大特性",[72,132932,132934],{"id":132933},"_831-层叠性","8.3.1 层叠性",[19,132936,132937],{},"为了解决样式冲突问题",[19,132939,132940],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,132942,132943],{},"   ②样式不冲突，不会层叠",[72,132945,132947],{"id":132946},"_832-继承性","8.3.2 继承性",[19,132949,132950],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,132952,132953],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[106,132955,132957],{"className":129904,"code":132956,"language":129906,"meta":112,"style":112},"p {\n  color: #333;\n}\n",[114,132958,132959,132965,132975],{"__ignoreMap":112},[128,132960,132961,132963],{"class":130,"line":131},[128,132962,19],{"class":54685},[128,132964,1959],{"class":138},[128,132966,132967,132969,132971,132973],{"class":130,"line":142},[128,132968,74280],{"class":166},[128,132970,1967],{"class":138},[128,132972,65748],{"class":166},[128,132974,4905],{"class":138},[128,132976,132977],{"class":130,"line":156},[128,132978,2694],{"class":138},[5074,132980],{"style":129760,"src":132981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,132983,132984],{},"解释：①行高可以跟单位也可以不跟单位",[19,132986,132987],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,132989,132990],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,132992,132993],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[72,132995,132997],{"id":132996},"_833-优先级","8.3.3 优先级",[26,132999,133000,133003],{},[29,133001,133002],{},"选择器相同，则执行层叠性",[29,133004,133005],{},"选择器不同，则根据选择器权重执行",[3891,133007,133008,133018],{},[3894,133009,133010],{},[3897,133011,133012,133015],{},[3900,133013,133014],{"align":27223},"选择器",[3900,133016,133017],{"align":27223},"选择器权重",[3938,133019,133020,133028,133036,133044,133052,133060],{},[3897,133021,133022,133025],{},[3943,133023,133024],{"align":27223},"继承 或者*",[3943,133026,133027],{"align":27223},"0，0，0，0",[3897,133029,133030,133033],{},[3943,133031,133032],{"align":27223},"标签选择器",[3943,133034,133035],{"align":27223},"0，0，0，1",[3897,133037,133038,133041],{},[3943,133039,133040],{"align":27223},"类选择器，伪类选择器",[3943,133042,133043],{"align":27223},"0，0，1，0",[3897,133045,133046,133049],{},[3943,133047,133048],{"align":27223},"ID选择器",[3943,133050,133051],{"align":27223},"0，1，0，0",[3897,133053,133054,133057],{},[3943,133055,133056],{"align":27223},"行内样式",[3943,133058,133059],{"align":27223},"1，0，0，0",[3897,133061,133062,133065],{},[3943,133063,133064],{"align":27223},"！important",[3943,133066,133067],{"align":27223},"无穷大",[19,133069,133070],{},"! important用法：",[106,133072,133074],{"className":129904,"code":133073,"language":129906,"meta":112,"style":112},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[114,133075,133076,133081,133087,133100,133104,133109,133115,133125],{"__ignoreMap":112},[128,133077,133078],{"class":130,"line":131},[128,133079,133080],{"class":3814},"\u002F* !important 拥有最高优先级 *\u002F\n",[128,133082,133083,133085],{"class":130,"line":142},[128,133084,54994],{"class":54685},[128,133086,1959],{"class":138},[128,133088,133089,133091,133093,133095,133098],{"class":130,"line":156},[128,133090,74280],{"class":166},[128,133092,1967],{"class":138},[128,133094,55028],{"class":166},[128,133096,133097],{"class":134}," !important",[128,133099,4905],{"class":138},[128,133101,133102],{"class":130,"line":163},[128,133103,2694],{"class":138},[128,133105,133106],{"class":130,"line":183},[128,133107,133108],{"class":3814},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[128,133110,133111,133113],{"class":130,"line":188},[128,133112,54994],{"class":54685},[128,133114,1959],{"class":138},[128,133116,133117,133119,133121,133123],{"class":130,"line":193},[128,133118,74280],{"class":166},[128,133120,1967],{"class":138},[128,133122,60801],{"class":166},[128,133124,4905],{"class":138},[128,133126,133127],{"class":130,"line":206},[128,133128,2694],{"class":138},[19,133130,133131],{},"优先级注意点：",[19,133133,133134],{},"①权重是有4组数字组成,但是不会有进位",[19,133136,133137],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,133139,133140],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,133142,133143],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,133145,133146],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,133148,133149],{},"⑥复合选择器",[3891,133151,133152,133162],{},[3894,133153,133154],{},[3897,133155,133156,133159],{},[3900,133157,133158],{"align":27223},"div ul li",[3900,133160,133161],{"align":27223},"0,0,0,3",[3938,133163,133164,133172,133180],{},[3897,133165,133166,133169],{},[3943,133167,133168],{"align":27223},".nav ul li",[3943,133170,133171],{"align":27223},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[3897,133173,133174,133177],{},[3943,133175,133176],{"align":27223},"a:hover",[3943,133178,133179],{"align":27223},"0,0,1,1",[3897,133181,133182,133185],{},[3943,133183,133184],{"align":27223},".nav a",[3943,133186,133179],{"align":27223},[3659,133188,133189],{},"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":112,"searchDepth":142,"depth":142,"links":133191},[133192,133200,133211],{"id":131300,"depth":142,"text":131301,"children":133193},[133194,133195,133196,133197,133198,133199],{"id":131313,"depth":156,"text":131314},{"id":131385,"depth":156,"text":131386},{"id":131457,"depth":156,"text":131458},{"id":131488,"depth":156,"text":131489},{"id":131495,"depth":156,"text":131496},{"id":131648,"depth":156,"text":131649},{"id":131956,"depth":142,"text":131957,"children":133201},[133202,133203,133204,133205,133206,133207,133208,133209,133210],{"id":131963,"depth":156,"text":131964},{"id":131973,"depth":156,"text":131974},{"id":132069,"depth":156,"text":132070},{"id":132142,"depth":156,"text":132143},{"id":132297,"depth":156,"text":132298},{"id":132385,"depth":156,"text":132386},{"id":132437,"depth":156,"text":132438},{"id":132496,"depth":156,"text":132497},{"id":132601,"depth":156,"text":132602},{"id":132929,"depth":142,"text":132930,"children":133212},[133213,133214,133215],{"id":132933,"depth":156,"text":132934},{"id":132946,"depth":156,"text":132947},{"id":132996,"depth":156,"text":132997},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":131292,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":133222,"title":133223,"body":133224,"description":3686,"extension":3687,"meta":134814,"navigation":159,"path":134815,"seo":134816,"stem":134817,"__hash__":134818},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":133225,"toc":134793},[133226,133229,133233,133236,133239,133242,133245,133248,133251,133254,133258,133266,133303,133339,133342,133356,133361,133395,133398,133491,133496,133499,133529,133532,133537,133545,133549,133556,133602,133646,133651,133654,133657,133660,133663,133666,133669,133671,133674,133678,133683,133727,133732,133735,133738,133775,133780,133783,133786,133789,133792,133824,133827,133830,133833,133865,133868,133871,133874,133878,133881,133913,133916,133920,133940,133943,133951,133954,133958,133963,133966,133998,134003,134006,134044,134048,134053,134056,134059,134090,134093,134110,134115,134167,134227,134232,134286,134324,134328,134332,134335,134339,134347,134350,134352,134363,134368,134416,134450,134453,134456,134459,134462,134506,134509,134512,134515,134518,134521,134524,134568,134571,134574,134577,134580,134583,134586,134592,134595,134639,134642,134645,134648,134651,134654,134698,134701,134703,134706,134710,134714,134752,134756,134759,134762,134766,134774,134778,134781,134784,134787,134790],[10,133227,133223],{"id":133228},"_9-css盒模型浮动与切图",[14,133230,133232],{"id":133231},"_91-盒子模型","9.1 盒子模型",[19,133234,133235],{},"利用盒子来设计网页",[19,133237,133238],{},"盒子包含：边框、外边距、内边距、实际内容",[19,133240,133241],{},"网页布局设置：",[19,133243,133244],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,133246,133247],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,133249,133250],{},"③往盒子里装内容",[5074,133252],{"style":129760,"src":133253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[72,133255,133257],{"id":133256},"_911-边框border","9.1.1 边框（border）",[26,133259,133260,133263],{},[29,133261,133262],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[29,133264,133265],{},"语法",[106,133267,133269],{"className":129904,"code":133268,"language":129906,"meta":112,"style":112},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[114,133270,133271,133276,133282,133299],{"__ignoreMap":112},[128,133272,133273],{"class":130,"line":131},[128,133274,133275],{"class":3814},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[128,133277,133278,133280],{"class":130,"line":142},[128,133279,54994],{"class":54685},[128,133281,1959],{"class":138},[128,133283,133284,133286,133288,133290,133292,133294,133297],{"class":130,"line":156},[128,133285,74271],{"class":166},[128,133287,1967],{"class":138},[128,133289,2592],{"class":166},[128,133291,54875],{"class":134},[128,133293,54904],{"class":166},[128,133295,133296],{"class":166}," #ccc",[128,133298,4905],{"class":138},[128,133300,133301],{"class":130,"line":163},[128,133302,2694],{"class":138},[3891,133304,133305,133313],{},[3894,133306,133307],{},[3897,133308,133309,133311],{},[3900,133310,132506],{"align":27223},[3900,133312,106059],{"align":27223},[3938,133314,133315,133323,133331],{},[3897,133316,133317,133320],{},[3943,133318,133319],{"align":27223},"border-width",[3943,133321,133322],{"align":27223},"定义边框粗细，单位是px",[3897,133324,133325,133328],{},[3943,133326,133327],{"align":27223},"border-style",[3943,133329,133330],{"align":27223},"边框的样式",[3897,133332,133333,133336],{},[3943,133334,133335],{"align":27223},"border-color",[3943,133337,133338],{"align":27223},"边框的颜色",[19,133340,133341],{},"边框样式 border-style 可以设置如下值：",[4752,133343,133344,133347,133350,133353],{},[29,133345,133346],{},"none：没有边框即忽略所有边框的宽度（默认值）",[29,133348,133349],{},"solid：边框为单实线(最为常用的)",[29,133351,133352],{},"dashed：边框为虚线",[29,133354,133355],{},"dotted：边框为点线",[26,133357,133358],{"start":156},[29,133359,133360],{},"边框的合写分写",[106,133362,133363],{"className":129904,"code":133268,"language":129906,"meta":112,"style":112},[114,133364,133365,133369,133375,133391],{"__ignoreMap":112},[128,133366,133367],{"class":130,"line":131},[128,133368,133275],{"class":3814},[128,133370,133371,133373],{"class":130,"line":142},[128,133372,54994],{"class":54685},[128,133374,1959],{"class":138},[128,133376,133377,133379,133381,133383,133385,133387,133389],{"class":130,"line":156},[128,133378,74271],{"class":166},[128,133380,1967],{"class":138},[128,133382,2592],{"class":166},[128,133384,54875],{"class":134},[128,133386,54904],{"class":166},[128,133388,133296],{"class":166},[128,133390,4905],{"class":138},[128,133392,133393],{"class":130,"line":163},[128,133394,2694],{"class":138},[19,133396,133397],{},"边框分开写法：",[106,133399,133401],{"className":129904,"code":133400,"language":129906,"meta":112,"style":112},"\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",[114,133402,133403,133408,133414,133432,133450,133469,133487],{"__ignoreMap":112},[128,133404,133405],{"class":130,"line":131},[128,133406,133407],{"class":3814},"\u002F* 边框分开写法 *\u002F\n",[128,133409,133410,133412],{"class":130,"line":142},[128,133411,54994],{"class":54685},[128,133413,1959],{"class":138},[128,133415,133416,133419,133421,133423,133425,133427,133430],{"class":130,"line":156},[128,133417,133418],{"class":166},"  border-top",[128,133420,1967],{"class":138},[128,133422,2592],{"class":166},[128,133424,54875],{"class":134},[128,133426,54904],{"class":166},[128,133428,133429],{"class":166}," #000",[128,133431,4905],{"class":138},[128,133433,133434,133437,133439,133441,133443,133445,133448],{"class":130,"line":163},[128,133435,133436],{"class":166},"  border-right",[128,133438,1967],{"class":138},[128,133440,409],{"class":166},[128,133442,54875],{"class":134},[128,133444,65620],{"class":166},[128,133446,133447],{"class":166}," #333",[128,133449,4905],{"class":138},[128,133451,133452,133455,133457,133459,133461,133464,133467],{"class":130,"line":183},[128,133453,133454],{"class":166},"  border-bottom",[128,133456,1967],{"class":138},[128,133458,3827],{"class":166},[128,133460,54875],{"class":134},[128,133462,133463],{"class":166}," dotted",[128,133465,133466],{"class":166}," #666",[128,133468,4905],{"class":138},[128,133470,133471,133474,133476,133478,133480,133482,133485],{"class":130,"line":188},[128,133472,133473],{"class":166},"  border-left",[128,133475,1967],{"class":138},[128,133477,2592],{"class":166},[128,133479,54875],{"class":134},[128,133481,54904],{"class":166},[128,133483,133484],{"class":166}," #999",[128,133486,4905],{"class":138},[128,133488,133489],{"class":130,"line":193},[128,133490,2694],{"class":138},[26,133492,133493],{"start":163},[29,133494,133495],{},"表格的细线边框",[19,133497,133498],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[106,133500,133502],{"className":129904,"code":133501,"language":129906,"meta":112,"style":112},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[114,133503,133504,133509,133515,133525],{"__ignoreMap":112},[128,133505,133506],{"class":130,"line":131},[128,133507,133508],{"class":3814},"\u002F* 表格细线边框合并 *\u002F\n",[128,133510,133511,133513],{"class":130,"line":142},[128,133512,3891],{"class":54685},[128,133514,1959],{"class":138},[128,133516,133517,133519,133521,133523],{"class":130,"line":156},[128,133518,73953],{"class":166},[128,133520,1967],{"class":138},[128,133522,68413],{"class":166},[128,133524,4905],{"class":138},[128,133526,133527],{"class":130,"line":163},[128,133528,2694],{"class":138},[19,133530,133531],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[26,133533,133534],{"start":183},[29,133535,133536],{},"解决边框额外增加盒子的实际大小的方法：",[4752,133538,133539,133542],{},[29,133540,133541],{},"测量盒子大小的时候,不量边框",[29,133543,133544],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[72,133546,133548],{"id":133547},"_912-内边距","9.1.2 内边距",[26,133550,133551,133554],{},[29,133552,133553],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[29,133555,133265],{},[3891,133557,133558,133568],{},[3894,133559,133560],{},[3897,133561,133562,133565],{},[3900,133563,133564],{"align":27223},"值的个数",[3900,133566,133567],{"align":27223},"表达意思",[3938,133569,133570,133578,133586,133594],{},[3897,133571,133572,133575],{},[3943,133573,133574],{"align":27223},"padding: 5px;",[3943,133576,133577],{"align":27223},"1个值，代表上下左右都有5个元素",[3897,133579,133580,133583],{},[3943,133581,133582],{"align":27223},"padding: 5px 10px;",[3943,133584,133585],{"align":27223},"2个值，代表上下内边距为5像素，左右内边距为10像素",[3897,133587,133588,133591],{},[3943,133589,133590],{"align":27223},"padding: 5px 10px 20px;",[3943,133592,133593],{"align":27223},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[3897,133595,133596,133599],{},[3943,133597,133598],{"align":27223},"padding: 5px 10px 20px 30px;",[3943,133600,133601],{"align":27223},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[3891,133603,133604,133612],{},[3894,133605,133606],{},[3897,133607,133608,133610],{},[3900,133609,132506],{"align":27223},[3900,133611,106059],{"align":27223},[3938,133613,133614,133622,133630,133638],{},[3897,133615,133616,133619],{},[3943,133617,133618],{"align":27223},"padding-left",[3943,133620,133621],{"align":27223},"左内边距",[3897,133623,133624,133627],{},[3943,133625,133626],{"align":27223},"padding-right",[3943,133628,133629],{"align":27223},"右内边距",[3897,133631,133632,133635],{},[3943,133633,133634],{"align":27223},"padding-top",[3943,133636,133637],{"align":27223},"上内边距",[3897,133639,133640,133643],{},[3943,133641,133642],{"align":27223},"padding-bottom",[3943,133644,133645],{"align":27223},"下内边距",[26,133647,133648],{"start":156},[29,133649,133650],{},"内边距会影响盒子的实际大小",[19,133652,133653],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,133655,133656],{},"①内容和边框有了距离，添加了内边距",[19,133658,133659],{},"②padding影响了盒子实际大小",[19,133661,133662],{},"内边距对盒子大小的影响：",[19,133664,133665],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,133667,133668],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,133670,98590],{},[19,133672,133673],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[72,133675,133677],{"id":133676},"_913-外边距","9.1.3 外边距",[26,133679,133680],{},[29,133681,133682],{},"控制盒子与盒子之间的距离",[3891,133684,133685,133693],{},[3894,133686,133687],{},[3897,133688,133689,133691],{},[3900,133690,132506],{"align":27223},[3900,133692,106059],{"align":27223},[3938,133694,133695,133703,133711,133719],{},[3897,133696,133697,133700],{},[3943,133698,133699],{"align":27223},"margin-left",[3943,133701,133702],{"align":27223},"左外边距",[3897,133704,133705,133708],{},[3943,133706,133707],{"align":27223},"margin-right",[3943,133709,133710],{"align":27223},"右外边距",[3897,133712,133713,133716],{},[3943,133714,133715],{"align":27223},"margin-top",[3943,133717,133718],{"align":27223},"上外边距",[3897,133720,133721,133724],{},[3943,133722,133723],{"align":27223},"margin-bottom",[3943,133725,133726],{"align":27223},"下外边距",[26,133728,133729],{"start":142},[29,133730,133731],{},"外边距可以让块级盒子水平居中的两个条件：",[19,133733,133734],{},"①盒子必须指定了宽度（width）",[19,133736,133737],{},"②盒子左右的外边距都设置为 auto",[106,133739,133741],{"className":129904,"code":133740,"language":129906,"meta":112,"style":112},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[114,133742,133743,133748,133755,133771],{"__ignoreMap":112},[128,133744,133745],{"class":130,"line":131},[128,133746,133747],{"class":3814},"\u002F* margin 复合写法（同上） *\u002F\n",[128,133749,133750,133753],{"class":130,"line":142},[128,133751,133752],{"class":199},".box",[128,133754,1959],{"class":138},[128,133756,133757,133759,133761,133763,133765,133768],{"class":130,"line":156},[128,133758,73845],{"class":166},[128,133760,1967],{"class":138},[128,133762,2452],{"class":166},[128,133764,54939],{"class":166},[128,133766,133767],{"class":138},";  ",[128,133769,133770],{"class":3814},"\u002F* 块级盒子水平居中 *\u002F\n",[128,133772,133773],{"class":130,"line":163},[128,133774,2694],{"class":138},[26,133776,133777],{"start":156},[29,133778,133779],{},"外边距塌陷问题",[19,133781,133782],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[5074,133784],{"style":129760,"src":133785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,133787,133788],{},"解决方案：",[19,133790,133791],{},"①可以为父亲元素定义上边距",[106,133793,133794],{"className":129904,"code":133740,"language":129906,"meta":112,"style":112},[114,133795,133796,133800,133806,133820],{"__ignoreMap":112},[128,133797,133798],{"class":130,"line":131},[128,133799,133747],{"class":3814},[128,133801,133802,133804],{"class":130,"line":142},[128,133803,133752],{"class":199},[128,133805,1959],{"class":138},[128,133807,133808,133810,133812,133814,133816,133818],{"class":130,"line":156},[128,133809,73845],{"class":166},[128,133811,1967],{"class":138},[128,133813,2452],{"class":166},[128,133815,54939],{"class":166},[128,133817,133767],{"class":138},[128,133819,133770],{"class":3814},[128,133821,133822],{"class":130,"line":163},[128,133823,2694],{"class":138},[19,133825,133826],{},"②可以为父亲元素定义上内边距",[19,133828,133829],{},"③可以为父亲元素添加overflow:hidden",[5074,133831],{"style":129760,"src":133832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[106,133834,133835],{"className":129904,"code":133740,"language":129906,"meta":112,"style":112},[114,133836,133837,133841,133847,133861],{"__ignoreMap":112},[128,133838,133839],{"class":130,"line":131},[128,133840,133747],{"class":3814},[128,133842,133843,133845],{"class":130,"line":142},[128,133844,133752],{"class":199},[128,133846,1959],{"class":138},[128,133848,133849,133851,133853,133855,133857,133859],{"class":130,"line":156},[128,133850,73845],{"class":166},[128,133852,1967],{"class":138},[128,133854,2452],{"class":166},[128,133856,54939],{"class":166},[128,133858,133767],{"class":138},[128,133860,133770],{"class":3814},[128,133862,133863],{"class":130,"line":163},[128,133864,2694],{"class":138},[5074,133866],{"style":129760,"src":133867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,133869,133870],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,133872,133873],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[72,133875,133877],{"id":133876},"_914-清除内外边距","9.1.4 清除内外边距",[19,133879,133880],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[106,133882,133883],{"className":129904,"code":133740,"language":129906,"meta":112,"style":112},[114,133884,133885,133889,133895,133909],{"__ignoreMap":112},[128,133886,133887],{"class":130,"line":131},[128,133888,133747],{"class":3814},[128,133890,133891,133893],{"class":130,"line":142},[128,133892,133752],{"class":199},[128,133894,1959],{"class":138},[128,133896,133897,133899,133901,133903,133905,133907],{"class":130,"line":156},[128,133898,73845],{"class":166},[128,133900,1967],{"class":138},[128,133902,2452],{"class":166},[128,133904,54939],{"class":166},[128,133906,133767],{"class":138},[128,133908,133770],{"class":3814},[128,133910,133911],{"class":130,"line":163},[128,133912,2694],{"class":138},[19,133914,133915],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[72,133917,133919],{"id":133918},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[4752,133921,133922,133925,133928,133931,133934,133937],{},[29,133923,133924],{},"文件→打开 ：可以打开我们要测量的图片",[29,133926,133927],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[29,133929,133930],{},"右击标尺，把里面的单位改为像素",[29,133932,133933],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[29,133935,133936],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[29,133938,133939],{},"用选区拖动 可以测量大小",[5074,133941],{"style":129760,"src":133942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[4752,133944,133945,133948],{},[29,133946,133947],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[29,133949,133950],{},"吸管取色工具",[5074,133952],{"style":129760,"src":133953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[72,133955,133957],{"id":133956},"_916-案例","9.1.6 案例",[26,133959,133960],{},[29,133961,133962],{},"小米商品",[5074,133964],{"style":129760,"src":133965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[106,133967,133968],{"className":129904,"code":133740,"language":129906,"meta":112,"style":112},[114,133969,133970,133974,133980,133994],{"__ignoreMap":112},[128,133971,133972],{"class":130,"line":131},[128,133973,133747],{"class":3814},[128,133975,133976,133978],{"class":130,"line":142},[128,133977,133752],{"class":199},[128,133979,1959],{"class":138},[128,133981,133982,133984,133986,133988,133990,133992],{"class":130,"line":156},[128,133983,73845],{"class":166},[128,133985,1967],{"class":138},[128,133987,2452],{"class":166},[128,133989,54939],{"class":166},[128,133991,133767],{"class":138},[128,133993,133770],{"class":3814},[128,133995,133996],{"class":130,"line":163},[128,133997,2694],{"class":138},[26,133999,134000],{"start":142},[29,134001,134002],{},"快报模块",[5074,134004],{"style":129760,"src":134005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[106,134007,134009],{"className":130651,"code":134008,"language":130653,"meta":112,"style":112},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[114,134010,134011,134016,134031,134036],{"__ignoreMap":112},[128,134012,134013],{"class":130,"line":131},[128,134014,134015],{"class":3814},"\u003C!-- HTML 代码示例 -->\n",[128,134017,134018,134020,134022,134024,134026,134029],{"class":130,"line":142},[128,134019,4657],{"class":138},[128,134021,54994],{"class":54685},[128,134023,56868],{"class":199},[128,134025,270],{"class":138},[128,134027,134028],{"class":176},"\"example\"",[128,134030,54692],{"class":138},[128,134032,134033],{"class":130,"line":156},[128,134034,134035],{"class":138},"  示例内容\n",[128,134037,134038,134040,134042],{"class":130,"line":163},[128,134039,55168],{"class":138},[128,134041,54994],{"class":54685},[128,134043,54692],{"class":138},[72,134045,134047],{"id":134046},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[26,134049,134050],{},[29,134051,134052],{},"圆角边框",[19,134054,134055],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[5074,134057],{"style":129760,"src":134058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[106,134060,134062],{"className":129904,"code":134061,"language":129906,"meta":112,"style":112},"div {\n  border: 1px solid #ccc;\n}\n",[114,134063,134064,134070,134086],{"__ignoreMap":112},[128,134065,134066,134068],{"class":130,"line":131},[128,134067,54994],{"class":54685},[128,134069,1959],{"class":138},[128,134071,134072,134074,134076,134078,134080,134082,134084],{"class":130,"line":142},[128,134073,74271],{"class":166},[128,134075,1967],{"class":138},[128,134077,2592],{"class":166},[128,134079,54875],{"class":134},[128,134081,54904],{"class":166},[128,134083,133296],{"class":166},[128,134085,4905],{"class":138},[128,134087,134088],{"class":130,"line":156},[128,134089,2694],{"class":138},[19,134091,134092],{},"解释:",[4752,134094,134095,134098,134101,134104,134107],{},[29,134096,134097],{},"参数值可以为数值或百分比的形式",[29,134099,134100],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[29,134102,134103],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[29,134105,134106],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[29,134108,134109],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[26,134111,134112],{"start":142},[29,134113,134114],{},"盒子阴影",[106,134116,134118],{"className":129904,"code":134117,"language":129906,"meta":112,"style":112},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[114,134119,134120,134126,134163],{"__ignoreMap":112},[128,134121,134122,134124],{"class":130,"line":131},[128,134123,54994],{"class":54685},[128,134125,1959],{"class":138},[128,134127,134128,134131,134133,134135,134137,134139,134141,134143,134145,134147,134149,134151,134153,134155,134157,134159,134161],{"class":130,"line":142},[128,134129,134130],{"class":166},"  box-shadow",[128,134132,1967],{"class":138},[128,134134,2452],{"class":166},[128,134136,18277],{"class":166},[128,134138,54875],{"class":134},[128,134140,5625],{"class":166},[128,134142,54875],{"class":134},[128,134144,82141],{"class":166},[128,134146,253],{"class":138},[128,134148,2452],{"class":166},[128,134150,258],{"class":138},[128,134152,2452],{"class":166},[128,134154,258],{"class":138},[128,134156,2452],{"class":166},[128,134158,258],{"class":138},[128,134160,89582],{"class":166},[128,134162,6292],{"class":138},[128,134164,134165],{"class":130,"line":156},[128,134166,2694],{"class":138},[3891,134168,134169,134177],{},[3894,134170,134171],{},[3897,134172,134173,134175],{},[3900,134174,3906],{"align":27223},[3900,134176,30974],{"align":27223},[3938,134178,134179,134187,134195,134203,134211,134219],{},[3897,134180,134181,134184],{},[3943,134182,134183],{"align":27223},"h-shadow",[3943,134185,134186],{"align":27223},"必需,水平阴影的位置,允许负值",[3897,134188,134189,134192],{},[3943,134190,134191],{"align":27223},"v-shadow",[3943,134193,134194],{"align":27223},"必需,垂直阴影的位置,允许负值",[3897,134196,134197,134200],{},[3943,134198,134199],{"align":27223},"blur",[3943,134201,134202],{"align":27223},"可选,模糊距离,就是影子的虚实",[3897,134204,134205,134208],{},[3943,134206,134207],{"align":27223},"spread",[3943,134209,134210],{"align":27223},"可选,阴影尺寸",[3897,134212,134213,134216],{},[3943,134214,134215],{"align":27223},"color",[3943,134217,134218],{"align":27223},"可选,阴影的颜色",[3897,134220,134221,134224],{},[3943,134222,134223],{"align":27223},"inset",[3943,134225,134226],{"align":27223},"可选,将外部阴影(outset)改为内部阴影",[26,134228,134229],{"start":156},[29,134230,134231],{},"文字阴影",[106,134233,134235],{"className":129904,"code":134234,"language":129906,"meta":112,"style":112},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[114,134236,134237,134243,134282],{"__ignoreMap":112},[128,134238,134239,134241],{"class":130,"line":131},[128,134240,19],{"class":54685},[128,134242,1959],{"class":138},[128,134244,134245,134248,134250,134252,134254,134256,134258,134260,134262,134264,134266,134268,134270,134272,134274,134276,134278,134280],{"class":130,"line":142},[128,134246,134247],{"class":166},"  text-shadow",[128,134249,1967],{"class":138},[128,134251,2592],{"class":166},[128,134253,54875],{"class":134},[128,134255,28605],{"class":166},[128,134257,54875],{"class":134},[128,134259,18277],{"class":166},[128,134261,54875],{"class":134},[128,134263,82141],{"class":166},[128,134265,253],{"class":138},[128,134267,2452],{"class":166},[128,134269,258],{"class":138},[128,134271,2452],{"class":166},[128,134273,258],{"class":138},[128,134275,2452],{"class":166},[128,134277,258],{"class":138},[128,134279,103890],{"class":166},[128,134281,6292],{"class":138},[128,134283,134284],{"class":130,"line":156},[128,134285,2694],{"class":138},[3891,134287,134288,134296],{},[3894,134289,134290],{},[3897,134291,134292,134294],{},[3900,134293,3906],{"align":27223},[3900,134295,30974],{"align":27223},[3938,134297,134298,134304,134311,134318],{},[3897,134299,134300,134302],{},[3943,134301,134183],{"align":27223},[3943,134303,134186],{"align":27223},[3897,134305,134306,134308],{},[3943,134307,134191],{"align":27223},[3943,134309,134310],{"align":27223},"必需,垂直阴影位置,允许负值",[3897,134312,134313,134315],{},[3943,134314,134199],{"align":27223},[3943,134316,134317],{"align":27223},"可选,模糊的距离",[3897,134319,134320,134322],{},[3943,134321,134215],{"align":27223},[3943,134323,134218],{"align":27223},[14,134325,134327],{"id":134326},"_92-浮动","9.2 浮动",[72,134329,134331],{"id":134330},"_921-浮动介绍","9.2.1 浮动介绍",[19,134333,134334],{},"在16.2中详细介绍",[72,134336,134338],{"id":134337},"_922-清除浮动","9.2.2 清除浮动",[26,134340,134341,134344],{},[29,134342,134343],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[29,134345,134346],{},"清除浮动的本质",[19,134348,134349],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,134351,12571],{},[4752,134353,134354,134357,134360],{},[29,134355,134356],{},"如果父盒子本身有高度，则不需要清除浮动",[29,134358,134359],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[29,134361,134362],{},"父级有了高度，就不会影响下面的标准流了",[26,134364,134365],{"start":156},[29,134366,134367],{},"清除浮动样式",[106,134369,134371],{"className":129904,"code":134370,"language":129906,"meta":112,"style":112},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[114,134372,134373,134380,134391,134395,134402,134412],{"__ignoreMap":112},[128,134374,134375,134378],{"class":130,"line":131},[128,134376,134377],{"class":199},".left",[128,134379,1959],{"class":138},[128,134381,134382,134385,134387,134389],{"class":130,"line":142},[128,134383,134384],{"class":166},"  float",[128,134386,1967],{"class":138},[128,134388,27223],{"class":166},[128,134390,4905],{"class":138},[128,134392,134393],{"class":130,"line":156},[128,134394,2694],{"class":138},[128,134396,134397,134400],{"class":130,"line":163},[128,134398,134399],{"class":199},".right",[128,134401,1959],{"class":138},[128,134403,134404,134406,134408,134410],{"class":130,"line":183},[128,134405,134384],{"class":166},[128,134407,1967],{"class":138},[128,134409,75897],{"class":166},[128,134411,4905],{"class":138},[128,134413,134414],{"class":130,"line":188},[128,134415,2694],{"class":138},[3891,134417,134418,134426],{},[3894,134419,134420],{},[3897,134421,134422,134424],{},[3900,134423,130368],{"align":27223},[3900,134425,30974],{"align":27223},[3938,134427,134428,134435,134442],{},[3897,134429,134430,134432],{},[3943,134431,27223],{"align":27223},[3943,134433,134434],{"align":27223},"不允许左侧有浮动元素（清除左侧浮动的影响）",[3897,134436,134437,134439],{},[3943,134438,75897],{"align":27223},[3943,134440,134441],{"align":27223},"不允许右侧有浮动元素（清除右侧浮动的影响）",[3897,134443,134444,134447],{},[3943,134445,134446],{"align":27223},"both",[3943,134448,134449],{"align":27223},"同时清除左右侧浮动的影响",[19,134451,134452],{},"法一",[19,134454,134455],{},"额外标签法也称为隔墙法",[19,134457,134458],{},"使用方式：",[19,134460,134461],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[106,134463,134464],{"className":129904,"code":134370,"language":129906,"meta":112,"style":112},[114,134465,134466,134472,134482,134486,134492,134502],{"__ignoreMap":112},[128,134467,134468,134470],{"class":130,"line":131},[128,134469,134377],{"class":199},[128,134471,1959],{"class":138},[128,134473,134474,134476,134478,134480],{"class":130,"line":142},[128,134475,134384],{"class":166},[128,134477,1967],{"class":138},[128,134479,27223],{"class":166},[128,134481,4905],{"class":138},[128,134483,134484],{"class":130,"line":156},[128,134485,2694],{"class":138},[128,134487,134488,134490],{"class":130,"line":163},[128,134489,134399],{"class":199},[128,134491,1959],{"class":138},[128,134493,134494,134496,134498,134500],{"class":130,"line":183},[128,134495,134384],{"class":166},[128,134497,1967],{"class":138},[128,134499,75897],{"class":166},[128,134501,4905],{"class":138},[128,134503,134504],{"class":130,"line":188},[128,134505,2694],{"class":138},[19,134507,134508],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,134510,134511],{},"优点： 通俗易懂，书写方便",[19,134513,134514],{},"缺点： 添加许多无意义的标签，结构化较差",[19,134516,134517],{},"注意： 要求这个新的空标签必须是块级元素。",[19,134519,134520],{},"法二",[19,134522,134523],{},"父级添加overflow属性",[106,134525,134526],{"className":129904,"code":134370,"language":129906,"meta":112,"style":112},[114,134527,134528,134534,134544,134548,134554,134564],{"__ignoreMap":112},[128,134529,134530,134532],{"class":130,"line":131},[128,134531,134377],{"class":199},[128,134533,1959],{"class":138},[128,134535,134536,134538,134540,134542],{"class":130,"line":142},[128,134537,134384],{"class":166},[128,134539,1967],{"class":138},[128,134541,27223],{"class":166},[128,134543,4905],{"class":138},[128,134545,134546],{"class":130,"line":156},[128,134547,2694],{"class":138},[128,134549,134550,134552],{"class":130,"line":163},[128,134551,134399],{"class":199},[128,134553,1959],{"class":138},[128,134555,134556,134558,134560,134562],{"class":130,"line":183},[128,134557,134384],{"class":166},[128,134559,1967],{"class":138},[128,134561,75897],{"class":166},[128,134563,4905],{"class":138},[128,134565,134566],{"class":130,"line":188},[128,134567,2694],{"class":138},[19,134569,134570],{},"overflow: hidden;",[19,134572,134573],{},"优点：代码简洁",[19,134575,134576],{},"缺点：无法显示溢出的部分",[19,134578,134579],{},"注意：是给父元素添加代码",[19,134581,134582],{},"法三",[19,134584,134585],{},"父级添加after伪元素",[19,134587,134588,134591],{},[134589,134590],"after",{}," 方式是额外标签法的升级版",[19,134593,134594],{},"使用的时候复制就可以",[106,134596,134597],{"className":129904,"code":134370,"language":129906,"meta":112,"style":112},[114,134598,134599,134605,134615,134619,134625,134635],{"__ignoreMap":112},[128,134600,134601,134603],{"class":130,"line":131},[128,134602,134377],{"class":199},[128,134604,1959],{"class":138},[128,134606,134607,134609,134611,134613],{"class":130,"line":142},[128,134608,134384],{"class":166},[128,134610,1967],{"class":138},[128,134612,27223],{"class":166},[128,134614,4905],{"class":138},[128,134616,134617],{"class":130,"line":156},[128,134618,2694],{"class":138},[128,134620,134621,134623],{"class":130,"line":163},[128,134622,134399],{"class":199},[128,134624,1959],{"class":138},[128,134626,134627,134629,134631,134633],{"class":130,"line":183},[128,134628,134384],{"class":166},[128,134630,1967],{"class":138},[128,134632,75897],{"class":166},[128,134634,4905],{"class":138},[128,134636,134637],{"class":130,"line":188},[128,134638,2694],{"class":138},[19,134640,134641],{},"优点：没有增加标签，结构更简单",[19,134643,134644],{},"缺点：照顾低版本浏览器",[19,134646,134647],{},"代表网站： 百度、淘宝网、网易等",[19,134649,134650],{},"法四",[19,134652,134653],{},"父级添加双伪元素",[106,134655,134656],{"className":129904,"code":134370,"language":129906,"meta":112,"style":112},[114,134657,134658,134664,134674,134678,134684,134694],{"__ignoreMap":112},[128,134659,134660,134662],{"class":130,"line":131},[128,134661,134377],{"class":199},[128,134663,1959],{"class":138},[128,134665,134666,134668,134670,134672],{"class":130,"line":142},[128,134667,134384],{"class":166},[128,134669,1967],{"class":138},[128,134671,27223],{"class":166},[128,134673,4905],{"class":138},[128,134675,134676],{"class":130,"line":156},[128,134677,2694],{"class":138},[128,134679,134680,134682],{"class":130,"line":163},[128,134681,134399],{"class":199},[128,134683,1959],{"class":138},[128,134685,134686,134688,134690,134692],{"class":130,"line":183},[128,134687,134384],{"class":166},[128,134689,1967],{"class":138},[128,134691,75897],{"class":166},[128,134693,4905],{"class":138},[128,134695,134696],{"class":130,"line":188},[128,134697,2694],{"class":138},[19,134699,134700],{},"优点：代码更简洁",[19,134702,134644],{},[19,134704,134705],{},"代表网站：小米、腾讯等",[14,134707,134709],{"id":134708},"_93-ps切图","9.3 PS切图",[72,134711,134713],{"id":134712},"_931-常见图片格式","9.3.1 常见图片格式",[3891,134715,134716,134726],{},[3894,134717,134718],{},[3897,134719,134720,134723],{},[3900,134721,134722],{"align":27223},"jpg图像格式",[3900,134724,134725],{"align":27223},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[3938,134727,134728,134736,134744],{},[3897,134729,134730,134733],{},[3943,134731,134732],{"align":27223},"gif图像格式",[3943,134734,134735],{"align":27223},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[3897,134737,134738,134741],{},[3943,134739,134740],{"align":27223},"png图像格式",[3943,134742,134743],{"align":27223},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[3897,134745,134746,134749],{},[3943,134747,134748],{"align":27223},"PSD图像格式",[3943,134750,134751],{"align":27223},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[72,134753,134755],{"id":134754},"_932-图层切图","9.3.2 图层切图",[19,134757,134758],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,134760,134761],{},"按住shift选中两个图层->图层菜单->合并图层",[72,134763,134765],{"id":134764},"_933-切片切图","9.3.3 切片切图",[4752,134767,134768,134771],{},[29,134769,134770],{},"利用切片工具手动划出",[29,134772,134773],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[72,134775,134777],{"id":134776},"_934-切图步骤","9.3.4 切图步骤",[19,134779,134780],{},"用切片工具选中：",[5074,134782],{"style":129760,"src":134783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,134785,134786],{},"文件 -> 导出",[5074,134788],{"style":129760,"src":134789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[3659,134791,134792],{},"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":112,"searchDepth":142,"depth":142,"links":134794},[134795,134804,134808],{"id":133231,"depth":142,"text":133232,"children":134796},[134797,134798,134799,134800,134801,134802,134803],{"id":133256,"depth":156,"text":133257},{"id":133547,"depth":156,"text":133548},{"id":133676,"depth":156,"text":133677},{"id":133876,"depth":156,"text":133877},{"id":133918,"depth":156,"text":133919},{"id":133956,"depth":156,"text":133957},{"id":134046,"depth":156,"text":134047},{"id":134326,"depth":142,"text":134327,"children":134805},[134806,134807],{"id":134330,"depth":156,"text":134331},{"id":134337,"depth":156,"text":134338},{"id":134708,"depth":142,"text":134709,"children":134809},[134810,134811,134812,134813],{"id":134712,"depth":156,"text":134713},{"id":134754,"depth":156,"text":134755},{"id":134764,"depth":156,"text":134765},{"id":134776,"depth":156,"text":134777},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":133223,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":134820,"title":134821,"body":134822,"description":3686,"extension":3687,"meta":135463,"navigation":159,"path":135464,"seo":135465,"stem":135466,"__hash__":135467},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":134823,"toc":135451},[134824,134827,134831,134857,134891,134895,134899,134902,134944,134951,134961,134969,134971,134974,134977,134980,134987,135001,135005,135008,135037,135041,135044,135058,135062,135065,135093,135097,135100,135126,135130,135135,135168,135173,135201,135205,135222,135268,135273,135317,135334,135441,135449],[10,134825,134821],{"id":134826},"_10-css规范与学成在线案例",[14,134828,134830],{"id":134829},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[26,134832,134833,134839,134845,134851],{},[29,134834,134835,134838],{},[3903,134836,134837],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[29,134840,134841,134844],{},[3903,134842,134843],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[29,134846,134847,134850],{},[3903,134848,134849],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[29,134852,134853,134856],{},[3903,134854,134855],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[106,134858,134859],{"className":129904,"code":133268,"language":129906,"meta":112,"style":112},[114,134860,134861,134865,134871,134887],{"__ignoreMap":112},[128,134862,134863],{"class":130,"line":131},[128,134864,133275],{"class":3814},[128,134866,134867,134869],{"class":130,"line":142},[128,134868,54994],{"class":54685},[128,134870,1959],{"class":138},[128,134872,134873,134875,134877,134879,134881,134883,134885],{"class":130,"line":156},[128,134874,74271],{"class":166},[128,134876,1967],{"class":138},[128,134878,2592],{"class":166},[128,134880,54875],{"class":134},[128,134882,54904],{"class":166},[128,134884,133296],{"class":166},[128,134886,4905],{"class":138},[128,134888,134889],{"class":130,"line":163},[128,134890,2694],{"class":138},[14,134892,134894],{"id":134893},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[72,134896,134898],{"id":134897},"_1021-header头部制作","10.2.1 header头部制作",[5074,134900],{"style":129760,"src":134901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[4752,134903,134904,134911,134918,134924,134931,134938],{},[29,134905,134906,134907,134910],{},"1号是版心盒子 ",[3903,134908,134909],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[29,134912,134913,134914,134917],{},"版心盒子 里面包含 2号盒子 ",[3903,134915,134916],{},"logo"," 图标",[29,134919,134920,134921,134923],{},"版心盒子 里面包含 3号盒子 ",[3903,134922,57095],{}," 导航栏",[29,134925,134926,134927,134930],{},"版心盒子 里面包含 4号盒子 ",[3903,134928,134929],{},"search"," 搜索框",[29,134932,134933,134934,134937],{},"版心盒子 里面包含 5号盒子 ",[3903,134935,134936],{},"user"," 个人信息",[29,134939,134940,134941],{},"注意，要求里面的 ",[3903,134942,134943],{},"4个子盒子 必须都浮动",[26,134945,134946],{},[29,134947,134948],{},[3903,134949,134950],{},"导航栏注意点:",[19,134952,134953,134954,134957,134958],{},"实际开发中， ",[3903,134955,134956],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[3903,134959,134960],{},"用 li 包含链接(li+a)的做法",[4752,134962,134963,134966],{},[29,134964,134965],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[29,134967,134968],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,134970,12571],{},[19,134972,134973],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,134975,134976],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,134978,134979],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[26,134981,134982],{"start":142},[29,134983,134984],{},[3903,134985,134986],{},"4号盒子search的细节：",[4752,134988,134989,134992,134995],{},[29,134990,134991],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[29,134993,134994],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[29,134996,134997,135000],{},[114,134998,134999],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[72,135002,135004],{"id":135003},"_1022-banner制作","10.2.2 banner制作",[5074,135006],{"style":129760,"src":135007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[4752,135009,135010,135017,135023,135030],{},[29,135011,135012,135013,135016],{},"1号盒子是通栏的大盒子 ",[3903,135014,135015],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[29,135018,135019,135020,135022],{},"2号盒子是版心 ",[3903,135021,4544],{}," ， 要水平居中对齐",[29,135024,135025,135026,135029],{},"3号盒子版心内，左对齐 ",[3903,135027,135028],{},"subnav"," 侧导航栏",[29,135031,135032,135033,135036],{},"4号盒子版心内，右对齐 ",[3903,135034,135035],{},"course"," 课程",[72,135038,135040],{"id":135039},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[5074,135042],{"style":129760,"src":135043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[4752,135045,135046,135049,135052,135055],{},[29,135047,135048],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[29,135050,135051],{},"1号盒子是标题 H3 左侧浮动",[29,135053,135054],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[29,135056,135057],{},"3号盒子 右浮动 mod 修改",[72,135059,135061],{"id":135060},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[5074,135063],{"style":129760,"src":135064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[4752,135066,135067,135073,135080,135087,135090],{},[29,135068,135069,135070,135072],{},"1号盒子为最大的盒子 ",[3903,135071,57096],{}," 版心水平居中对齐",[29,135074,135075,135076,135079],{},"2号盒子为上面部分 ",[3903,135077,135078],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[29,135081,135082,135083,135086],{},"3号盒子为底下部分 ",[3903,135084,135085],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[29,135088,135089],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[29,135091,135092],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[72,135094,135096],{"id":135095},"_1025-底部模块制作","10.2.5 底部模块制作",[5074,135098],{"style":129760,"src":135099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[4752,135101,135102,135109,135112,135119],{},[29,135103,135104,135105,135108],{},"1号盒子通栏大盒子 底部 ",[3903,135106,135107],{},"footer"," 给高度 底色是白色",[29,135110,135111],{},"2号盒子版心水平居中",[29,135113,135114,135115,135118],{},"3号盒子版权 ",[3903,135116,135117],{},"copyright"," 左对齐",[29,135120,135121,135122,135125],{},"4号盒子 链接组 ",[3903,135123,135124],{},"links"," 右对齐",[72,135127,135129],{"id":135128},"_1026-代码模块","10.2.6 代码模块",[26,135131,135132],{},[29,135133,135134],{},"html部分",[106,135136,135138],{"className":130651,"code":135137,"language":130653,"meta":112,"style":112},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[114,135139,135140],{"__ignoreMap":112},[128,135141,135142,135144,135146,135148,135150,135153,135156,135158,135161,135164,135166],{"class":130,"line":131},[128,135143,4657],{"class":138},[128,135145,3989],{"class":54685},[128,135147,64436],{"class":199},[128,135149,270],{"class":138},[128,135151,135152],{"class":176},"\"https:\u002F\u002Fexample.com\"",[128,135154,135155],{"class":199}," target",[128,135157,270],{"class":138},[128,135159,135160],{"class":176},"\"_blank\"",[128,135162,135163],{"class":138},">链接文字\u003C\u002F",[128,135165,3989],{"class":54685},[128,135167,54692],{"class":138},[26,135169,135170],{"start":142},[29,135171,135172],{},"css部分",[106,135174,135175],{"className":130651,"code":135137,"language":130653,"meta":112,"style":112},[114,135176,135177],{"__ignoreMap":112},[128,135178,135179,135181,135183,135185,135187,135189,135191,135193,135195,135197,135199],{"class":130,"line":131},[128,135180,4657],{"class":138},[128,135182,3989],{"class":54685},[128,135184,64436],{"class":199},[128,135186,270],{"class":138},[128,135188,135152],{"class":176},[128,135190,135155],{"class":199},[128,135192,270],{"class":138},[128,135194,135160],{"class":176},[128,135196,135163],{"class":138},[128,135198,3989],{"class":54685},[128,135200,54692],{"class":138},[72,135202,135204],{"id":135203},"_1027-收获","10.2.7 收获",[26,135206,135207,135210,135213,135216,135219],{},[29,135208,135209],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[29,135211,135212],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[29,135214,135215],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[29,135217,135218],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[29,135220,135221],{},"遗忘代码",[106,135223,135225],{"className":129904,"code":135224,"language":129906,"meta":112,"style":112},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[114,135226,135227,135249,135254,135264],{"__ignoreMap":112},[128,135228,135229,135231,135233,135235,135237,135239,135241,135243,135245,135247],{"class":130,"line":131},[128,135230,54994],{"class":54685},[128,135232,258],{"class":138},[128,135234,19],{"class":54685},[128,135236,258],{"class":138},[128,135238,10],{"class":54685},[128,135240,258],{"class":138},[128,135242,4752],{"class":54685},[128,135244,258],{"class":138},[128,135246,29],{"class":54685},[128,135248,1959],{"class":138},[128,135250,135251],{"class":130,"line":142},[128,135252,135253],{"class":3814},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[128,135255,135256,135258,135260,135262],{"class":130,"line":156},[128,135257,131520],{"class":166},[128,135259,1967],{"class":138},[128,135261,64248],{"class":166},[128,135263,4905],{"class":138},[128,135265,135266],{"class":130,"line":163},[128,135267,2694],{"class":138},[26,135269,135270],{"start":188},[29,135271,135272],{},"html引css的程序",[106,135274,135275],{"className":129904,"code":135224,"language":129906,"meta":112,"style":112},[114,135276,135277,135299,135303,135313],{"__ignoreMap":112},[128,135278,135279,135281,135283,135285,135287,135289,135291,135293,135295,135297],{"class":130,"line":131},[128,135280,54994],{"class":54685},[128,135282,258],{"class":138},[128,135284,19],{"class":54685},[128,135286,258],{"class":138},[128,135288,10],{"class":54685},[128,135290,258],{"class":138},[128,135292,4752],{"class":54685},[128,135294,258],{"class":138},[128,135296,29],{"class":54685},[128,135298,1959],{"class":138},[128,135300,135301],{"class":130,"line":142},[128,135302,135253],{"class":3814},[128,135304,135305,135307,135309,135311],{"class":130,"line":156},[128,135306,131520],{"class":166},[128,135308,1967],{"class":138},[128,135310,64248],{"class":166},[128,135312,4905],{"class":138},[128,135314,135315],{"class":130,"line":163},[128,135316,2694],{"class":138},[26,135318,135319,135322,135325,135328,135331],{"start":193},[29,135320,135321],{},"浮动的盒子不会有外边距合并问题",[29,135323,135324],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[29,135326,135327],{},"ctrl+g快速定位行；shift+alt多个光标",[29,135329,135330],{},"学习上方各个模块的选择器起名方法，以后就这样用",[29,135332,135333],{},"在写选择器时尽量写全一些，例如",[106,135335,135337],{"className":129904,"code":135336,"language":129906,"meta":112,"style":112},"\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",[114,135338,135339,135344,135360,135365,135380,135385,135400,135405,135420,135425],{"__ignoreMap":112},[128,135340,135341],{"class":130,"line":131},[128,135342,135343],{"class":3814},"\u002F* 静态定位（默认） *\u002F\n",[128,135345,135346,135349,135351,135353,135355,135358],{"class":130,"line":142},[128,135347,135348],{"class":199},".static",[128,135350,83181],{"class":138},[128,135352,132264],{"class":166},[128,135354,1967],{"class":138},[128,135356,135357],{"class":166},"static",[128,135359,132834],{"class":138},[128,135361,135362],{"class":130,"line":156},[128,135363,135364],{"class":3814},"\u002F* 相对定位 *\u002F\n",[128,135366,135367,135370,135372,135374,135376,135378],{"class":130,"line":163},[128,135368,135369],{"class":199},".relative",[128,135371,83181],{"class":138},[128,135373,132264],{"class":166},[128,135375,1967],{"class":138},[128,135377,58145],{"class":166},[128,135379,132834],{"class":138},[128,135381,135382],{"class":130,"line":183},[128,135383,135384],{"class":3814},"\u002F* 绝对定位 *\u002F\n",[128,135386,135387,135390,135392,135394,135396,135398],{"class":130,"line":188},[128,135388,135389],{"class":199},".absolute",[128,135391,83181],{"class":138},[128,135393,132264],{"class":166},[128,135395,1967],{"class":138},[128,135397,58212],{"class":166},[128,135399,132834],{"class":138},[128,135401,135402],{"class":130,"line":193},[128,135403,135404],{"class":3814},"\u002F* 固定定位 *\u002F\n",[128,135406,135407,135410,135412,135414,135416,135418],{"class":130,"line":206},[128,135408,135409],{"class":199},".fixed",[128,135411,83181],{"class":138},[128,135413,132264],{"class":166},[128,135415,1967],{"class":138},[128,135417,89605],{"class":166},[128,135419,132834],{"class":138},[128,135421,135422],{"class":130,"line":221},[128,135423,135424],{"class":3814},"\u002F* 粘性定位 *\u002F\n",[128,135426,135427,135430,135432,135434,135436,135439],{"class":130,"line":230},[128,135428,135429],{"class":199},".sticky",[128,135431,83181],{"class":138},[128,135433,132264],{"class":166},[128,135435,1967],{"class":138},[128,135437,135438],{"class":166},"sticky",[128,135440,132834],{"class":138},[26,135442,135443,135446],{"start":244},[29,135444,135445],{},"一定要用好注释",[29,135447,135448],{},"浮动的盒子不会有外边距合并的问题",[3659,135450,134792],{},{"title":112,"searchDepth":142,"depth":142,"links":135452},[135453,135454],{"id":134829,"depth":142,"text":134830},{"id":134893,"depth":142,"text":134894,"children":135455},[135456,135457,135458,135459,135460,135461,135462],{"id":134897,"depth":156,"text":134898},{"id":135003,"depth":156,"text":135004},{"id":135039,"depth":156,"text":135040},{"id":135060,"depth":156,"text":135061},{"id":135095,"depth":156,"text":135096},{"id":135128,"depth":156,"text":135129},{"id":135203,"depth":156,"text":135204},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":134821,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":135469,"title":135470,"body":135471,"description":3686,"extension":3687,"meta":136957,"navigation":159,"path":136958,"seo":136959,"stem":136960,"__hash__":136961},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":135472,"toc":136949},[135473,135476,135480,135484,135495,135499,135516,135560,135593,135596,135613,135616,135619,135663,135667,135671,135674,135677,135681,135684,135695,135758,135799,135802,135817,135871,135879,135882,135893,135947,135973,135976,135989,136043,136075,136129,136152,136206,136209,136212,136219,136273,136294,136348,136351,136354,136439,136447,136504,136527,136531,136534,136552,136556,136575,136629,136667,136671,136674,136677,136699,136703,136711,136714,136719,136730,136733,136737,136751,136795,136798,136802,136805,136810,136836,136841,136918,136921,136925,136928,136931,136934,136937,136940,136943,136946],[10,135474,135470],{"id":135475},"_11-传统布局与定位体系",[14,135477,135479],{"id":135478},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[72,135481,135483],{"id":135482},"_1111-普通流标准流","11.1.1 普通流（标准流）",[4752,135485,135486,135489,135492],{},[29,135487,135488],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[29,135490,135491],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[29,135493,135494],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[72,135496,135498],{"id":135497},"_1112-浮动","11.1.2 浮动",[4752,135500,135501,135504,135507,135510,135513],{},[29,135502,135503],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[29,135505,135506],{},"浮动可以改变元素标签默认的排列方式",[29,135508,135509],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[29,135511,135512],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[29,135514,135515],{},"在使用行内块转换时盒子之间是有空隙的",[106,135517,135518],{"className":129904,"code":134370,"language":129906,"meta":112,"style":112},[114,135519,135520,135526,135536,135540,135546,135556],{"__ignoreMap":112},[128,135521,135522,135524],{"class":130,"line":131},[128,135523,134377],{"class":199},[128,135525,1959],{"class":138},[128,135527,135528,135530,135532,135534],{"class":130,"line":142},[128,135529,134384],{"class":166},[128,135531,1967],{"class":138},[128,135533,27223],{"class":166},[128,135535,4905],{"class":138},[128,135537,135538],{"class":130,"line":156},[128,135539,2694],{"class":138},[128,135541,135542,135544],{"class":130,"line":163},[128,135543,134399],{"class":199},[128,135545,1959],{"class":138},[128,135547,135548,135550,135552,135554],{"class":130,"line":183},[128,135549,134384],{"class":166},[128,135551,1967],{"class":138},[128,135553,75897],{"class":166},[128,135555,4905],{"class":138},[128,135557,135558],{"class":130,"line":188},[128,135559,2694],{"class":138},[3891,135561,135562,135570],{},[3894,135563,135564],{},[3897,135565,135566,135568],{},[3900,135567,130368],{"align":27223},[3900,135569,30974],{"align":27223},[3938,135571,135572,135579,135586],{},[3897,135573,135574,135576],{},[3943,135575,58118],{"align":27223},[3943,135577,135578],{"align":27223},"元素不浮动（默认值）",[3897,135580,135581,135583],{},[3943,135582,27223],{"align":27223},[3943,135584,135585],{"align":27223},"元素向左浮动",[3897,135587,135588,135590],{},[3943,135589,75897],{"align":27223},[3943,135591,135592],{"align":27223},"元素向右浮动",[19,135594,135595],{},"浮动重点：",[4752,135597,135598,135601,135604,135607,135610],{},[29,135599,135600],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[29,135602,135603],{},"浮动的元素会一行内显示并且元素顶部对齐",[29,135605,135606],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[29,135608,135609],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[29,135611,135612],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,135614,135615],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,135617,135618],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[106,135620,135621],{"className":129904,"code":134370,"language":129906,"meta":112,"style":112},[114,135622,135623,135629,135639,135643,135649,135659],{"__ignoreMap":112},[128,135624,135625,135627],{"class":130,"line":131},[128,135626,134377],{"class":199},[128,135628,1959],{"class":138},[128,135630,135631,135633,135635,135637],{"class":130,"line":142},[128,135632,134384],{"class":166},[128,135634,1967],{"class":138},[128,135636,27223],{"class":166},[128,135638,4905],{"class":138},[128,135640,135641],{"class":130,"line":156},[128,135642,2694],{"class":138},[128,135644,135645,135647],{"class":130,"line":163},[128,135646,134399],{"class":199},[128,135648,1959],{"class":138},[128,135650,135651,135653,135655,135657],{"class":130,"line":183},[128,135652,134384],{"class":166},[128,135654,1967],{"class":138},[128,135656,75897],{"class":166},[128,135658,4905],{"class":138},[128,135660,135661],{"class":130,"line":188},[128,135662,2694],{"class":138},[72,135664,135666],{"id":135665},"_1113-定位","11.1.3 定位",[25485,135668,135670],{"id":135669},"_11131-使用场景","11.1.3.1 使用场景",[19,135672,135673],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,135675,135676],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[25485,135678,135680],{"id":135679},"_11132-定位组成","11.1.3.2 定位组成",[19,135682,135683],{},"定位 = 定位模式 + 边偏移",[26,135685,135686],{},[29,135687,135688,135691,135692],{},[3903,135689,135690],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[3903,135693,135694],{},"定位模式",[106,135696,135698],{"className":129904,"code":135697,"language":129906,"meta":112,"style":112},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[114,135699,135700,135706,135720,135737,135754],{"__ignoreMap":112},[128,135701,135702,135704],{"class":130,"line":131},[128,135703,133752],{"class":199},[128,135705,1959],{"class":138},[128,135707,135708,135711,135713,135715,135717],{"class":130,"line":142},[128,135709,135710],{"class":166},"  position",[128,135712,1967],{"class":138},[128,135714,58145],{"class":166},[128,135716,133767],{"class":138},[128,135718,135719],{"class":3814},"\u002F* 定位模式 *\u002F\n",[128,135721,135722,135725,135727,135729,135731,135734],{"class":130,"line":156},[128,135723,135724],{"class":166},"  top",[128,135726,1967],{"class":138},[128,135728,4196],{"class":166},[128,135730,54875],{"class":134},[128,135732,135733],{"class":138},";           ",[128,135735,135736],{"class":3814},"\u002F* 边偏移：上 *\u002F\n",[128,135738,135739,135742,135744,135746,135748,135751],{"class":130,"line":163},[128,135740,135741],{"class":166},"  left",[128,135743,1967],{"class":138},[128,135745,4449],{"class":166},[128,135747,54875],{"class":134},[128,135749,135750],{"class":138},";          ",[128,135752,135753],{"class":3814},"\u002F* 边偏移：左 *\u002F\n",[128,135755,135756],{"class":130,"line":183},[128,135757,2694],{"class":138},[3891,135759,135760,135769],{},[3894,135761,135762],{},[3897,135763,135764,135766],{},[3900,135765,3906],{"align":27223},[3900,135767,135768],{"align":27223},"语义",[3938,135770,135771,135778,135785,135792],{},[3897,135772,135773,135775],{},[3943,135774,135357],{"align":27223},[3943,135776,135777],{"align":27223},"静态定位",[3897,135779,135780,135782],{},[3943,135781,58145],{"align":27223},[3943,135783,135784],{"align":27223},"相对定位",[3897,135786,135787,135789],{},[3943,135788,58212],{"align":27223},[3943,135790,135791],{"align":27223},"绝对定位",[3897,135793,135794,135796],{},[3943,135795,89605],{"align":27223},[3943,135797,135798],{"align":27223},"固定定位",[19,135800,135801],{},"（1）静态定位：",[4752,135803,135804,135815],{},[29,135805,135806,135807,135810,135811,135814],{},"静态定位是元素的 ",[3903,135808,135809],{},"默认定位方式"," ， ",[3903,135812,135813],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[29,135816,8743],{},[106,135818,135819],{"className":129904,"code":135697,"language":129906,"meta":112,"style":112},[114,135820,135821,135827,135839,135853,135867],{"__ignoreMap":112},[128,135822,135823,135825],{"class":130,"line":131},[128,135824,133752],{"class":199},[128,135826,1959],{"class":138},[128,135828,135829,135831,135833,135835,135837],{"class":130,"line":142},[128,135830,135710],{"class":166},[128,135832,1967],{"class":138},[128,135834,58145],{"class":166},[128,135836,133767],{"class":138},[128,135838,135719],{"class":3814},[128,135840,135841,135843,135845,135847,135849,135851],{"class":130,"line":156},[128,135842,135724],{"class":166},[128,135844,1967],{"class":138},[128,135846,4196],{"class":166},[128,135848,54875],{"class":134},[128,135850,135733],{"class":138},[128,135852,135736],{"class":3814},[128,135854,135855,135857,135859,135861,135863,135865],{"class":130,"line":163},[128,135856,135741],{"class":166},[128,135858,1967],{"class":138},[128,135860,4449],{"class":166},[128,135862,54875],{"class":134},[128,135864,135750],{"class":138},[128,135866,135753],{"class":3814},[128,135868,135869],{"class":130,"line":183},[128,135870,2694],{"class":138},[4752,135872,135873,135876],{},[29,135874,135875],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[29,135877,135878],{},"静态定位在布局时我们几乎不用的",[19,135880,135881],{},"（2）相对定位",[4752,135883,135884,135891],{},[29,135885,135886,135887,135890],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[3903,135888,135889],{},"原来的位置"," 来说的（自恋型）",[29,135892,8743],{},[106,135894,135895],{"className":129904,"code":135697,"language":129906,"meta":112,"style":112},[114,135896,135897,135903,135915,135929,135943],{"__ignoreMap":112},[128,135898,135899,135901],{"class":130,"line":131},[128,135900,133752],{"class":199},[128,135902,1959],{"class":138},[128,135904,135905,135907,135909,135911,135913],{"class":130,"line":142},[128,135906,135710],{"class":166},[128,135908,1967],{"class":138},[128,135910,58145],{"class":166},[128,135912,133767],{"class":138},[128,135914,135719],{"class":3814},[128,135916,135917,135919,135921,135923,135925,135927],{"class":130,"line":156},[128,135918,135724],{"class":166},[128,135920,1967],{"class":138},[128,135922,4196],{"class":166},[128,135924,54875],{"class":134},[128,135926,135733],{"class":138},[128,135928,135736],{"class":3814},[128,135930,135931,135933,135935,135937,135939,135941],{"class":130,"line":163},[128,135932,135741],{"class":166},[128,135934,1967],{"class":138},[128,135936,4449],{"class":166},[128,135938,54875],{"class":134},[128,135940,135750],{"class":138},[128,135942,135753],{"class":3814},[128,135944,135945],{"class":130,"line":183},[128,135946,2694],{"class":138},[4752,135948,135949],{},[29,135950,135951,135952,135954,135955,135957,135958,135961,135962,135965,135966,135968,135969,135972],{},"相对定位的特点：",[57098,135953],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[57098,135956],{},"  ② ",[3903,135959,135960],{},"原来"," 在标准流的 ",[3903,135963,135964],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[57098,135967],{},"  ③因此， ",[3903,135970,135971],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,135974,135975],{},"（3）绝对定位",[4752,135977,135978,135987],{},[29,135979,135980,135982,135983,135986],{},[3903,135981,135791],{}," 是元素在移动位置的时候，是相对于它 ",[3903,135984,135985],{},"祖先元素"," 来说的（拼爹型）",[29,135988,8743],{},[106,135990,135991],{"className":129904,"code":135697,"language":129906,"meta":112,"style":112},[114,135992,135993,135999,136011,136025,136039],{"__ignoreMap":112},[128,135994,135995,135997],{"class":130,"line":131},[128,135996,133752],{"class":199},[128,135998,1959],{"class":138},[128,136000,136001,136003,136005,136007,136009],{"class":130,"line":142},[128,136002,135710],{"class":166},[128,136004,1967],{"class":138},[128,136006,58145],{"class":166},[128,136008,133767],{"class":138},[128,136010,135719],{"class":3814},[128,136012,136013,136015,136017,136019,136021,136023],{"class":130,"line":156},[128,136014,135724],{"class":166},[128,136016,1967],{"class":138},[128,136018,4196],{"class":166},[128,136020,54875],{"class":134},[128,136022,135733],{"class":138},[128,136024,135736],{"class":3814},[128,136026,136027,136029,136031,136033,136035,136037],{"class":130,"line":163},[128,136028,135741],{"class":166},[128,136030,1967],{"class":138},[128,136032,4449],{"class":166},[128,136034,54875],{"class":134},[128,136036,135750],{"class":138},[128,136038,135753],{"class":3814},[128,136040,136041],{"class":130,"line":183},[128,136042,2694],{"class":138},[4752,136044,136045,136060,136069,136072],{},[29,136046,136047,136048,136050,136051,136053,136054,136056,136057,136059],{},"绝对定位的特点：",[57098,136049],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[57098,136052],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[57098,136055],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[57098,136058],{},"  (4)固定定位",[29,136061,136062,136064,136065,136068],{},[3903,136063,135798],{}," 是元素 ",[3903,136066,136067],{},"固定于浏览器可视区的位置"," 。（认死理型）",[29,136070,136071],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[29,136073,136074],{},"语法:",[106,136076,136077],{"className":129904,"code":135697,"language":129906,"meta":112,"style":112},[114,136078,136079,136085,136097,136111,136125],{"__ignoreMap":112},[128,136080,136081,136083],{"class":130,"line":131},[128,136082,133752],{"class":199},[128,136084,1959],{"class":138},[128,136086,136087,136089,136091,136093,136095],{"class":130,"line":142},[128,136088,135710],{"class":166},[128,136090,1967],{"class":138},[128,136092,58145],{"class":166},[128,136094,133767],{"class":138},[128,136096,135719],{"class":3814},[128,136098,136099,136101,136103,136105,136107,136109],{"class":130,"line":156},[128,136100,135724],{"class":166},[128,136102,1967],{"class":138},[128,136104,4196],{"class":166},[128,136106,54875],{"class":134},[128,136108,135733],{"class":138},[128,136110,135736],{"class":3814},[128,136112,136113,136115,136117,136119,136121,136123],{"class":130,"line":163},[128,136114,135741],{"class":166},[128,136116,1967],{"class":138},[128,136118,4449],{"class":166},[128,136120,54875],{"class":134},[128,136122,135750],{"class":138},[128,136124,135753],{"class":3814},[128,136126,136127],{"class":130,"line":183},[128,136128,2694],{"class":138},[4752,136130,136131,136140],{},[29,136132,136133,136134,136136,136137,136139],{},"特点:",[57098,136135],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[57098,136138],{},"  ②固定定位不再占有原先的位置,完全脱标",[29,136141,136142,136143,136145,136146,136148,136149,136151],{},"固定在版心位置的方法:",[57098,136144],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[57098,136147],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[57098,136150],{},"  实例：",[106,136153,136154],{"className":129904,"code":135697,"language":129906,"meta":112,"style":112},[114,136155,136156,136162,136174,136188,136202],{"__ignoreMap":112},[128,136157,136158,136160],{"class":130,"line":131},[128,136159,133752],{"class":199},[128,136161,1959],{"class":138},[128,136163,136164,136166,136168,136170,136172],{"class":130,"line":142},[128,136165,135710],{"class":166},[128,136167,1967],{"class":138},[128,136169,58145],{"class":166},[128,136171,133767],{"class":138},[128,136173,135719],{"class":3814},[128,136175,136176,136178,136180,136182,136184,136186],{"class":130,"line":156},[128,136177,135724],{"class":166},[128,136179,1967],{"class":138},[128,136181,4196],{"class":166},[128,136183,54875],{"class":134},[128,136185,135733],{"class":138},[128,136187,135736],{"class":3814},[128,136189,136190,136192,136194,136196,136198,136200],{"class":130,"line":163},[128,136191,135741],{"class":166},[128,136193,1967],{"class":138},[128,136195,4449],{"class":166},[128,136197,54875],{"class":134},[128,136199,135750],{"class":138},[128,136201,135753],{"class":3814},[128,136203,136204],{"class":130,"line":183},[128,136205,2694],{"class":138},[5074,136207],{"style":129760,"src":136208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,136210,136211],{},"(5)粘性定位",[4752,136213,136214,136217],{},[29,136215,136216],{},"粘性定位可以被认为是相对定位和固定定位的混合",[29,136218,8743],{},[106,136220,136221],{"className":129904,"code":135697,"language":129906,"meta":112,"style":112},[114,136222,136223,136229,136241,136255,136269],{"__ignoreMap":112},[128,136224,136225,136227],{"class":130,"line":131},[128,136226,133752],{"class":199},[128,136228,1959],{"class":138},[128,136230,136231,136233,136235,136237,136239],{"class":130,"line":142},[128,136232,135710],{"class":166},[128,136234,1967],{"class":138},[128,136236,58145],{"class":166},[128,136238,133767],{"class":138},[128,136240,135719],{"class":3814},[128,136242,136243,136245,136247,136249,136251,136253],{"class":130,"line":156},[128,136244,135724],{"class":166},[128,136246,1967],{"class":138},[128,136248,4196],{"class":166},[128,136250,54875],{"class":134},[128,136252,135733],{"class":138},[128,136254,135736],{"class":3814},[128,136256,136257,136259,136261,136263,136265,136267],{"class":130,"line":163},[128,136258,135741],{"class":166},[128,136260,1967],{"class":138},[128,136262,4449],{"class":166},[128,136264,54875],{"class":134},[128,136266,135750],{"class":138},[128,136268,135753],{"class":3814},[128,136270,136271],{"class":130,"line":183},[128,136272,2694],{"class":138},[4752,136274,136275],{},[29,136276,136277,136278,136280,136281,136283,136284,136286,136287,136290,136291,136293],{},"粘性定位的特点：",[57098,136279],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[57098,136282],{},"  ②粘性定位占有原先的位置（相对定位特点）",[57098,136285],{},"  ③必须添加 top 、left、right、bottom ",[3903,136288,136289],{},"其中一个"," 才有效",[57098,136292],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[106,136295,136296],{"className":129904,"code":135697,"language":129906,"meta":112,"style":112},[114,136297,136298,136304,136316,136330,136344],{"__ignoreMap":112},[128,136299,136300,136302],{"class":130,"line":131},[128,136301,133752],{"class":199},[128,136303,1959],{"class":138},[128,136305,136306,136308,136310,136312,136314],{"class":130,"line":142},[128,136307,135710],{"class":166},[128,136309,1967],{"class":138},[128,136311,58145],{"class":166},[128,136313,133767],{"class":138},[128,136315,135719],{"class":3814},[128,136317,136318,136320,136322,136324,136326,136328],{"class":130,"line":156},[128,136319,135724],{"class":166},[128,136321,1967],{"class":138},[128,136323,4196],{"class":166},[128,136325,54875],{"class":134},[128,136327,135733],{"class":138},[128,136329,135736],{"class":3814},[128,136331,136332,136334,136336,136338,136340,136342],{"class":130,"line":163},[128,136333,135741],{"class":166},[128,136335,1967],{"class":138},[128,136337,4449],{"class":166},[128,136339,54875],{"class":134},[128,136341,135750],{"class":138},[128,136343,135753],{"class":3814},[128,136345,136346],{"class":130,"line":183},[128,136347,2694],{"class":138},[5074,136349],{"style":129760,"src":136350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,136352,136353],{},"(6)总结",[3891,136355,136356,136371],{},[3894,136357,136358],{},[3897,136359,136360,136362,136365,136368],{},[3900,136361,135694],{"align":27223},[3900,136363,136364],{"align":27223},"是否脱标",[3900,136366,136367],{"align":27223},"移动位置",[3900,136369,136370],{"align":27223},"是否常用",[3938,136372,136373,136386,136400,136414,136427],{},[3897,136374,136375,136378,136380,136383],{},[3943,136376,136377],{"align":27223},"Static 静态定位",[3943,136379,108041],{"align":27223},[3943,136381,136382],{"align":27223},"不能使用边偏移",[3943,136384,136385],{"align":27223},"很少",[3897,136387,136388,136391,136394,136397],{},[3943,136389,136390],{"align":27223},"Relative 相对定位",[3943,136392,136393],{"align":27223},"否(占有位置)",[3943,136395,136396],{"align":27223},"相对于自身位置移动",[3943,136398,136399],{"align":27223},"基本单独使用",[3897,136401,136402,136405,136408,136411],{},[3943,136403,136404],{"align":27223},"Absolute 绝对定位",[3943,136406,136407],{"align":27223},"是(不占有位置)",[3943,136409,136410],{"align":27223},"带有定位的父级",[3943,136412,136413],{"align":27223},"要和定位父级元素搭配使用",[3897,136415,136416,136419,136421,136424],{},[3943,136417,136418],{"align":27223},"Fixed 固定定位",[3943,136420,136407],{"align":27223},[3943,136422,136423],{"align":27223},"浏览器可视区",[3943,136425,136426],{"align":27223},"单独使用,不需要父级",[3897,136428,136429,136432,136434,136436],{},[3943,136430,136431],{"align":27223},"Sticky 粘性定位",[3943,136433,136393],{"align":27223},[3943,136435,136423],{"align":27223},[3943,136437,136438],{"align":27223},"当前阶段少",[26,136440,136441],{"start":142},[29,136442,136443,136446],{},[3903,136444,136445],{},"边偏移"," 则决定了该元素的最终位置",[3891,136448,136449,136460],{},[3894,136450,136451],{},[3897,136452,136453,136456,136458],{},[3900,136454,136455],{"align":27223},"边偏移属性",[3900,136457,30977],{"align":27223},[3900,136459,30974],{"align":27223},[3938,136461,136462,136473,136484,136494],{},[3897,136463,136464,136467,136470],{},[3943,136465,136466],{"align":27223},"top",[3943,136468,136469],{"align":27223},"top: 80px;",[3943,136471,136472],{"align":27223},"顶端偏移量，定义元素相对于父元素上边线的距离",[3897,136474,136475,136478,136481],{},[3943,136476,136477],{"align":27223},"bottom",[3943,136479,136480],{"align":27223},"bottom: 80px ;",[3943,136482,136483],{"align":27223},"底部偏移量，定义元素相对于其父元素下边线的距离",[3897,136485,136486,136488,136491],{},[3943,136487,27223],{"align":27223},[3943,136489,136490],{"align":27223},"left: 80px ;",[3943,136492,136493],{"align":27223},"左侧偏移量，定义元素相对于其父元素左边线的距离",[3897,136495,136496,136498,136501],{},[3943,136497,75897],{"align":27223},[3943,136499,136500],{"align":27223},"right: 80px ;",[3943,136502,136503],{"align":27223},"右侧偏移量，定义元素相对于其父元素右边线的距离",[4752,136505,136506],{},[29,136507,12571,136508,136510,136511,136513,136514,136516,136517,136520,136521,136523,136524,136526],{},[57098,136509],{},"  ① ",[3903,136512,136445],{}," 需要和 ",[3903,136515,135694],{}," 联合使用， ",[3903,136518,136519],{},"单独使用无效"," ；",[57098,136522],{},"  ②top和bottom不要同时使用",[57098,136525],{},"  ③left和right不要同时使用",[25485,136528,136530],{"id":136529},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,136532,136533],{},"子级是绝对定位的话，父级要用相对定位",[4752,136535,136536,136539,136542,136545],{},[29,136537,136538],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[29,136540,136541],{},"父盒子需要加定位限制子盒子在父盒子内显示",[29,136543,136544],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[29,136546,136547,136548,136551],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[3903,136549,136550],{},"子绝父绝"," 也会遇到",[25485,136553,136555],{"id":136554},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[4752,136557,136558,136573],{},[29,136559,136560,136561,136564,136565,136568,136569,136572],{},"在使用 ",[3903,136562,136563],{},"定位"," 布局时，可能会 ",[3903,136566,136567],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[3903,136570,136571],{},"z-index"," 来控制盒子的前后次序 (z轴)",[29,136574,8743],{},[106,136576,136577],{"className":129904,"code":135697,"language":129906,"meta":112,"style":112},[114,136578,136579,136585,136597,136611,136625],{"__ignoreMap":112},[128,136580,136581,136583],{"class":130,"line":131},[128,136582,133752],{"class":199},[128,136584,1959],{"class":138},[128,136586,136587,136589,136591,136593,136595],{"class":130,"line":142},[128,136588,135710],{"class":166},[128,136590,1967],{"class":138},[128,136592,58145],{"class":166},[128,136594,133767],{"class":138},[128,136596,135719],{"class":3814},[128,136598,136599,136601,136603,136605,136607,136609],{"class":130,"line":156},[128,136600,135724],{"class":166},[128,136602,1967],{"class":138},[128,136604,4196],{"class":166},[128,136606,54875],{"class":134},[128,136608,135733],{"class":138},[128,136610,135736],{"class":3814},[128,136612,136613,136615,136617,136619,136621,136623],{"class":130,"line":163},[128,136614,135741],{"class":166},[128,136616,1967],{"class":138},[128,136618,4449],{"class":166},[128,136620,54875],{"class":134},[128,136622,135750],{"class":138},[128,136624,135753],{"class":3814},[128,136626,136627],{"class":130,"line":183},[128,136628,2694],{"class":138},[4752,136630,136631],{},[29,136632,136633,136634,136510,136636,136638,136639,131067,136642,85912,136645,136647,136648,136650,136651,136654,136655,136520,136658,136660,136661,136664,136666],{},"z-index的特性",[57098,136635],{},[3903,136637,130368],{}," ： ",[3903,136640,136641],{},"正整数",[3903,136643,136644],{},"负整数",[3903,136646,2452],{}," ，默认值是 0，数值越大，盒子越靠上；",[57098,136649],{},"  ②如果 ",[3903,136652,136653],{},"属性值相同"," ，则按照书写顺序， ",[3903,136656,136657],{},"后来居上",[57098,136659],{},"  ③数字后面 ",[3903,136662,136663],{},"不能加单位",[57098,136665],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[25485,136668,136670],{"id":136669},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,136672,136673],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,136675,136676],{},"方法:",[4752,136678,136679,136689],{},[29,136680,136681,136682,136685,136686],{},"left: 50%; 让 ",[3903,136683,136684],{},"盒子的左侧"," 移动到 ",[3903,136687,136688],{},"父级元素的水平中心位置",[29,136690,136691,136692,136695,136696],{},"margin-left: -100px; 让盒子 ",[3903,136693,136694],{},"向左"," 移动 ",[3903,136697,136698],{},"自身宽度的一半",[25485,136700,136702],{"id":136701},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[26,136704,136705,136708],{},[29,136706,136707],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[29,136709,136710],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,136712,136713],{},"也就是说绝对定位和固定定位和浮动类似",[26,136715,136716],{"start":156},[29,136717,136718],{},"display 是显示模式， 可以改变显示模式有以下方式:",[4752,136720,136721,136724,136727],{},[29,136722,136723],{},"可以用inline-block 转换为行内块",[29,136725,136726],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[29,136728,136729],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,136731,136732],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[25485,136734,136736],{"id":136735},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[26,136738,136739,136742,136745,136748],{},[29,136740,136741],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[29,136743,136744],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[29,136746,136747],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[29,136749,136750],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[106,136752,136753],{"className":129904,"code":134370,"language":129906,"meta":112,"style":112},[114,136754,136755,136761,136771,136775,136781,136791],{"__ignoreMap":112},[128,136756,136757,136759],{"class":130,"line":131},[128,136758,134377],{"class":199},[128,136760,1959],{"class":138},[128,136762,136763,136765,136767,136769],{"class":130,"line":142},[128,136764,134384],{"class":166},[128,136766,1967],{"class":138},[128,136768,27223],{"class":166},[128,136770,4905],{"class":138},[128,136772,136773],{"class":130,"line":156},[128,136774,2694],{"class":138},[128,136776,136777,136779],{"class":130,"line":163},[128,136778,134399],{"class":199},[128,136780,1959],{"class":138},[128,136782,136783,136785,136787,136789],{"class":130,"line":183},[128,136784,134384],{"class":166},[128,136786,1967],{"class":138},[128,136788,75897],{"class":166},[128,136790,4905],{"class":138},[128,136792,136793],{"class":130,"line":188},[128,136794,2694],{"class":138},[5074,136796],{"style":129760,"src":136797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[25485,136799,136801],{"id":136800},"_11138-轮播图","11.1.3.8 轮播图",[5074,136803],{"style":129760,"src":136804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[26,136806,136807],{},[29,136808,136809],{},"制作顺序:",[4752,136811,136812,136815,136818,136827],{},[29,136813,136814],{},"大盒子我们类名为： tb-promo 淘宝广告",[29,136816,136817],{},"里面先放一张图片",[29,136819,136820,136821,136823,136824,136826],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[57098,136822],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[57098,136825],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[29,136828,136829,136830,136832,136833,136835],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[57098,136831],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[57098,136834],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[26,136837,136838],{"start":142},[29,136839,136840],{},"代码模块",[106,136842,136844],{"className":129904,"code":136843,"language":129906,"meta":112,"style":112},"\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",[114,136845,136846,136851,136858,136868,136878,136888,136892,136897,136904,136914],{"__ignoreMap":112},[128,136847,136848],{"class":130,"line":131},[128,136849,136850],{"class":3814},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[128,136852,136853,136856],{"class":130,"line":142},[128,136854,136855],{"class":199},".son",[128,136857,1959],{"class":138},[128,136859,136860,136862,136864,136866],{"class":130,"line":156},[128,136861,135710],{"class":166},[128,136863,1967],{"class":138},[128,136865,58212],{"class":166},[128,136867,4905],{"class":138},[128,136869,136870,136872,136874,136876],{"class":130,"line":163},[128,136871,135724],{"class":166},[128,136873,1967],{"class":138},[128,136875,2452],{"class":166},[128,136877,4905],{"class":138},[128,136879,136880,136882,136884,136886],{"class":130,"line":183},[128,136881,135741],{"class":166},[128,136883,1967],{"class":138},[128,136885,2452],{"class":166},[128,136887,4905],{"class":138},[128,136889,136890],{"class":130,"line":188},[128,136891,2694],{"class":138},[128,136893,136894],{"class":130,"line":193},[128,136895,136896],{"class":3814},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[128,136898,136899,136902],{"class":130,"line":206},[128,136900,136901],{"class":199},".father",[128,136903,1959],{"class":138},[128,136905,136906,136908,136910,136912],{"class":130,"line":221},[128,136907,135710],{"class":166},[128,136909,1967],{"class":138},[128,136911,58145],{"class":166},[128,136913,4905],{"class":138},[128,136915,136916],{"class":130,"line":230},[128,136917,2694],{"class":138},[19,136919,136920],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[72,136922,136924],{"id":136923},"_1114-定位数值的移动","11.1.4 定位数值的移动",[5074,136926],{"style":129760,"src":136927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,136929,136930],{},"✨ 黄金口诀：",[19,136932,136933],{},"\"TOP正下负上，LEFT正右负左\"",[19,136935,136936],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,136938,136939],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,136941,136942],{},"✨ 简单记：",[19,136944,136945],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[3659,136947,136948],{},"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":112,"searchDepth":142,"depth":142,"links":136950},[136951],{"id":135478,"depth":142,"text":135479,"children":136952},[136953,136954,136955,136956],{"id":135482,"depth":156,"text":135483},{"id":135497,"depth":156,"text":135498},{"id":135665,"depth":156,"text":135666},{"id":136923,"depth":156,"text":136924},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":135470,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":136963,"title":136964,"body":136965,"description":3686,"extension":3687,"meta":138388,"navigation":159,"path":138389,"seo":138390,"stem":138391,"__hash__":138392},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":136966,"toc":138367},[136967,136970,136974,136982,136986,136991,136999,137011,137015,137020,137028,137039,137043,137048,137089,137097,137101,137104,137107,137110,137204,137207,137301,137304,137398,137401,137404,137439,137442,137445,137475,137478,137481,137484,137487,137490,137493,137496,137566,137569,137573,137577,137618,137622,137628,137631,137634,137638,137641,137644,137647,137728,137731,137734,137738,137742,137745,137748,137751,137754,137757,137763,137772,137776,137795,137799,137809,137812,137815,137818,137821,137824,137827,137830,137833,137842,137846,137855,137858,137863,137916,137921,138087,138090,138093,138098,138101,138104,138107,138110,138115,138263,138266,138269,138274,138277,138282,138316,138319,138322,138326,138329,138336,138339,138342,138345,138348,138351,138354,138357,138361,138364],[10,136968,136964],{"id":136969},"_12-显示隐藏与图形资源",[14,136971,136973],{"id":136972},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[4752,136975,136976,136979],{},[29,136977,136978],{},"目的:让一个元素在页面中消失或者显示出来",[29,136980,136981],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[72,136983,136985],{"id":136984},"_1211-display-显示","12.1.1 display 显示",[26,136987,136988],{},[29,136989,136990],{},"display 设置或检索对象是否及如何显示",[4752,136992,136993,136996],{},[29,136994,136995],{},"display: none;隐藏对象",[29,136997,136998],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[26,137000,137001,137008],{"start":142},[29,137002,137003,137004,137007],{},"特点： display 隐藏元素后， ",[3903,137005,137006],{},"不再占"," 有原来的位置",[29,137009,137010],{},"在js中使用非常的广泛",[72,137012,137014],{"id":137013},"_1212-visibility可见性","12.1.2 visibility可见性",[26,137016,137017],{},[29,137018,137019],{},"visibility 属性用于指定一个元素应可见还是隐藏",[4752,137021,137022,137025],{},[29,137023,137024],{},"visibility： visible；元素可见",[29,137026,137027],{},"visibility：hidden；元素隐藏",[26,137029,137030,137033,137036],{"start":142},[29,137031,137032],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[29,137034,137035],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[29,137037,137038],{},"隐藏后继续占有原有位置",[72,137040,137042],{"id":137041},"_1213-overflow溢出","12.1.3 overflow溢出",[4752,137044,137045],{},[29,137046,137047],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[3891,137049,137050,137058],{},[3894,137051,137052],{},[3897,137053,137054,137056],{},[3900,137055,130368],{"align":27223},[3900,137057,30974],{"align":27223},[3938,137059,137060,137068,137075,137082],{},[3897,137061,137062,137065],{},[3943,137063,137064],{"align":27223},"visible",[3943,137066,137067],{"align":27223},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[3897,137069,137070,137072],{},[3943,137071,65093],{"align":27223},[3943,137073,137074],{"align":27223},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[3897,137076,137077,137079],{},[3943,137078,132324],{"align":27223},[3943,137080,137081],{"align":27223},"不管超出内容否，总是显示滚动条",[3897,137083,137084,137086],{},[3943,137085,76038],{"align":27223},[3943,137087,137088],{"align":27223},"超出自动显示滚动条，不超出不显示滚动条",[4752,137090,137091,137094],{},[29,137092,137093],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[29,137095,137096],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[72,137098,137100],{"id":137099},"_1214-案例收获","12.1.4 案例收获",[5074,137102],{"style":129760,"src":137103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,137105,137106],{},"问题：没做出来动态效果，使用hover没实现",[19,137108,137109],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[106,137111,137112],{"className":129904,"code":135336,"language":129906,"meta":112,"style":112},[114,137113,137114,137118,137132,137136,137150,137154,137168,137172,137186,137190],{"__ignoreMap":112},[128,137115,137116],{"class":130,"line":131},[128,137117,135343],{"class":3814},[128,137119,137120,137122,137124,137126,137128,137130],{"class":130,"line":142},[128,137121,135348],{"class":199},[128,137123,83181],{"class":138},[128,137125,132264],{"class":166},[128,137127,1967],{"class":138},[128,137129,135357],{"class":166},[128,137131,132834],{"class":138},[128,137133,137134],{"class":130,"line":156},[128,137135,135364],{"class":3814},[128,137137,137138,137140,137142,137144,137146,137148],{"class":130,"line":163},[128,137139,135369],{"class":199},[128,137141,83181],{"class":138},[128,137143,132264],{"class":166},[128,137145,1967],{"class":138},[128,137147,58145],{"class":166},[128,137149,132834],{"class":138},[128,137151,137152],{"class":130,"line":183},[128,137153,135384],{"class":3814},[128,137155,137156,137158,137160,137162,137164,137166],{"class":130,"line":188},[128,137157,135389],{"class":199},[128,137159,83181],{"class":138},[128,137161,132264],{"class":166},[128,137163,1967],{"class":138},[128,137165,58212],{"class":166},[128,137167,132834],{"class":138},[128,137169,137170],{"class":130,"line":193},[128,137171,135404],{"class":3814},[128,137173,137174,137176,137178,137180,137182,137184],{"class":130,"line":206},[128,137175,135409],{"class":199},[128,137177,83181],{"class":138},[128,137179,132264],{"class":166},[128,137181,1967],{"class":138},[128,137183,89605],{"class":166},[128,137185,132834],{"class":138},[128,137187,137188],{"class":130,"line":221},[128,137189,135424],{"class":3814},[128,137191,137192,137194,137196,137198,137200,137202],{"class":130,"line":230},[128,137193,135429],{"class":199},[128,137195,83181],{"class":138},[128,137197,132264],{"class":166},[128,137199,1967],{"class":138},[128,137201,135438],{"class":166},[128,137203,132834],{"class":138},[19,137205,137206],{},"完整代码：",[106,137208,137209],{"className":129904,"code":135336,"language":129906,"meta":112,"style":112},[114,137210,137211,137215,137229,137233,137247,137251,137265,137269,137283,137287],{"__ignoreMap":112},[128,137212,137213],{"class":130,"line":131},[128,137214,135343],{"class":3814},[128,137216,137217,137219,137221,137223,137225,137227],{"class":130,"line":142},[128,137218,135348],{"class":199},[128,137220,83181],{"class":138},[128,137222,132264],{"class":166},[128,137224,1967],{"class":138},[128,137226,135357],{"class":166},[128,137228,132834],{"class":138},[128,137230,137231],{"class":130,"line":156},[128,137232,135364],{"class":3814},[128,137234,137235,137237,137239,137241,137243,137245],{"class":130,"line":163},[128,137236,135369],{"class":199},[128,137238,83181],{"class":138},[128,137240,132264],{"class":166},[128,137242,1967],{"class":138},[128,137244,58145],{"class":166},[128,137246,132834],{"class":138},[128,137248,137249],{"class":130,"line":183},[128,137250,135384],{"class":3814},[128,137252,137253,137255,137257,137259,137261,137263],{"class":130,"line":188},[128,137254,135389],{"class":199},[128,137256,83181],{"class":138},[128,137258,132264],{"class":166},[128,137260,1967],{"class":138},[128,137262,58212],{"class":166},[128,137264,132834],{"class":138},[128,137266,137267],{"class":130,"line":193},[128,137268,135404],{"class":3814},[128,137270,137271,137273,137275,137277,137279,137281],{"class":130,"line":206},[128,137272,135409],{"class":199},[128,137274,83181],{"class":138},[128,137276,132264],{"class":166},[128,137278,1967],{"class":138},[128,137280,89605],{"class":166},[128,137282,132834],{"class":138},[128,137284,137285],{"class":130,"line":221},[128,137286,135424],{"class":3814},[128,137288,137289,137291,137293,137295,137297,137299],{"class":130,"line":230},[128,137290,135429],{"class":199},[128,137292,83181],{"class":138},[128,137294,132264],{"class":166},[128,137296,1967],{"class":138},[128,137298,135438],{"class":166},[128,137300,132834],{"class":138},[19,137302,137303],{},"分布思路重点详解：",[106,137305,137306],{"className":129904,"code":135336,"language":129906,"meta":112,"style":112},[114,137307,137308,137312,137326,137330,137344,137348,137362,137366,137380,137384],{"__ignoreMap":112},[128,137309,137310],{"class":130,"line":131},[128,137311,135343],{"class":3814},[128,137313,137314,137316,137318,137320,137322,137324],{"class":130,"line":142},[128,137315,135348],{"class":199},[128,137317,83181],{"class":138},[128,137319,132264],{"class":166},[128,137321,1967],{"class":138},[128,137323,135357],{"class":166},[128,137325,132834],{"class":138},[128,137327,137328],{"class":130,"line":156},[128,137329,135364],{"class":3814},[128,137331,137332,137334,137336,137338,137340,137342],{"class":130,"line":163},[128,137333,135369],{"class":199},[128,137335,83181],{"class":138},[128,137337,132264],{"class":166},[128,137339,1967],{"class":138},[128,137341,58145],{"class":166},[128,137343,132834],{"class":138},[128,137345,137346],{"class":130,"line":183},[128,137347,135384],{"class":3814},[128,137349,137350,137352,137354,137356,137358,137360],{"class":130,"line":188},[128,137351,135389],{"class":199},[128,137353,83181],{"class":138},[128,137355,132264],{"class":166},[128,137357,1967],{"class":138},[128,137359,58212],{"class":166},[128,137361,132834],{"class":138},[128,137363,137364],{"class":130,"line":193},[128,137365,135404],{"class":3814},[128,137367,137368,137370,137372,137374,137376,137378],{"class":130,"line":206},[128,137369,135409],{"class":199},[128,137371,83181],{"class":138},[128,137373,132264],{"class":166},[128,137375,1967],{"class":138},[128,137377,89605],{"class":166},[128,137379,132834],{"class":138},[128,137381,137382],{"class":130,"line":221},[128,137383,135424],{"class":3814},[128,137385,137386,137388,137390,137392,137394,137396],{"class":130,"line":230},[128,137387,135429],{"class":199},[128,137389,83181],{"class":138},[128,137391,132264],{"class":166},[128,137393,1967],{"class":138},[128,137395,135438],{"class":166},[128,137397,132834],{"class":138},[5074,137399],{"style":129760,"src":137400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,137402,137403],{},"图片太大，盒子太小，此时需要修改图片的大小",[106,137405,137407],{"className":130651,"code":137406,"language":130653,"meta":112,"style":112},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[114,137408,137409],{"__ignoreMap":112},[128,137410,137411,137413,137415,137417,137419,137422,137424,137426,137429,137432,137434,137437],{"class":130,"line":131},[128,137412,4657],{"class":138},[128,137414,5074],{"class":54685},[128,137416,58620],{"class":199},[128,137418,270],{"class":138},[128,137420,137421],{"class":176},"\"images\u002Fpic.jpg\"",[128,137423,58628],{"class":199},[128,137425,270],{"class":138},[128,137427,137428],{"class":176},"\"描述文字\"",[128,137430,137431],{"class":199}," title",[128,137433,270],{"class":138},[128,137435,137436],{"class":176},"\"悬停提示\"",[128,137438,54692],{"class":138},[5074,137440],{"style":129760,"src":137441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,137443,137444],{},"制造遮罩层",[106,137446,137447],{"className":130651,"code":137406,"language":130653,"meta":112,"style":112},[114,137448,137449],{"__ignoreMap":112},[128,137450,137451,137453,137455,137457,137459,137461,137463,137465,137467,137469,137471,137473],{"class":130,"line":131},[128,137452,4657],{"class":138},[128,137454,5074],{"class":54685},[128,137456,58620],{"class":199},[128,137458,270],{"class":138},[128,137460,137421],{"class":176},[128,137462,58628],{"class":199},[128,137464,270],{"class":138},[128,137466,137428],{"class":176},[128,137468,137431],{"class":199},[128,137470,270],{"class":138},[128,137472,137436],{"class":176},[128,137474,54692],{"class":138},[19,137476,137477],{},"此时是这样的为标准流",[5074,137479],{"style":129760,"src":137480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,137482,137483],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,137485,137486],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,137488,137489],{},"让他在中间，用center(background-position)",[19,137491,137492],{},"将需要变的尽可能放到一个盒子中",[19,137494,137495],{},"放大盒子上内部盒子发生变化",[106,137497,137499],{"className":129904,"code":137498,"language":129906,"meta":112,"style":112},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[114,137500,137501,137507,137517,137521,137528,137538,137550,137562],{"__ignoreMap":112},[128,137502,137503,137505],{"class":130,"line":131},[128,137504,130971],{"class":199},[128,137506,1959],{"class":138},[128,137508,137509,137511,137513,137515],{"class":130,"line":142},[128,137510,135710],{"class":166},[128,137512,1967],{"class":138},[128,137514,58145],{"class":166},[128,137516,4905],{"class":138},[128,137518,137519],{"class":130,"line":156},[128,137520,2694],{"class":138},[128,137522,137523,137526],{"class":130,"line":163},[128,137524,137525],{"class":199},".child",[128,137527,1959],{"class":138},[128,137529,137530,137532,137534,137536],{"class":130,"line":183},[128,137531,135710],{"class":166},[128,137533,1967],{"class":138},[128,137535,58212],{"class":166},[128,137537,4905],{"class":138},[128,137539,137540,137542,137544,137546,137548],{"class":130,"line":188},[128,137541,135724],{"class":166},[128,137543,1967],{"class":138},[128,137545,4405],{"class":166},[128,137547,4078],{"class":134},[128,137549,4905],{"class":138},[128,137551,137552,137554,137556,137558,137560],{"class":130,"line":193},[128,137553,135741],{"class":166},[128,137555,1967],{"class":138},[128,137557,4405],{"class":166},[128,137559,4078],{"class":134},[128,137561,4905],{"class":138},[128,137563,137564],{"class":130,"line":206},[128,137565,2694],{"class":138},[19,137567,137568],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,137570,137572],{"id":137571},"_122-精灵图","12.2 精灵图",[72,137574,137576],{"id":137575},"_1221-理解","12.2.1 理解",[26,137578,137579,137597],{},[29,137580,137581,137582,135810,137585,137588,137589,137592,137593,137596],{},"目的： ",[3903,137583,137584],{},"为了有效地减少服务器接收和发送请求的次数",[3903,137586,137587],{},"提高"," 页面的 ",[3903,137590,137591],{},"加载速度"," ，出现了 ",[3903,137594,137595],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[29,137598,137599,137600,137602,137603,137605,137606,137608,137609,137611,137612,137614,137615,137617],{},"使用精灵图核心：",[57098,137601],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[57098,137604],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[57098,137607],{},"  ③移动背景图片位置， 此时可以使用 background-position",[57098,137610],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[57098,137613],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[57098,137616],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[72,137619,137621],{"id":137620},"_1222-扒图","12.2.2 扒图",[106,137623,137626],{"className":137624,"code":137625,"language":111},[109],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[114,137627,137625],{"__ignoreMap":112},[5074,137629],{"style":129760,"src":137630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[5074,137632],{"style":129760,"src":137633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[72,137635,137637],{"id":137636},"_1223-精灵图的实现","12.2.3 精灵图的实现",[5074,137639],{"style":129760,"src":137640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,137642,137643],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[5074,137645],{"style":129760,"src":137646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[106,137648,137650],{"className":129904,"code":137649,"language":129906,"meta":112,"style":112},"\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",[114,137651,137652,137657,137664,137676,137688,137707,137724],{"__ignoreMap":112},[128,137653,137654],{"class":130,"line":131},[128,137655,137656],{"class":3814},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[128,137658,137659,137662],{"class":130,"line":142},[128,137660,137661],{"class":199},".icon",[128,137663,1959],{"class":138},[128,137665,137666,137668,137670,137672,137674],{"class":130,"line":156},[128,137667,73943],{"class":166},[128,137669,1967],{"class":138},[128,137671,4449],{"class":166},[128,137673,54875],{"class":134},[128,137675,4905],{"class":138},[128,137677,137678,137680,137682,137684,137686],{"class":130,"line":163},[128,137679,74163],{"class":166},[128,137681,1967],{"class":138},[128,137683,4449],{"class":166},[128,137685,54875],{"class":134},[128,137687,4905],{"class":138},[128,137689,137690,137692,137694,137696,137698,137701,137703,137705],{"class":130,"line":183},[128,137691,73986],{"class":166},[128,137693,1967],{"class":138},[128,137695,65105],{"class":166},[128,137697,253],{"class":138},[128,137699,137700],{"class":266},"sprites.png",[128,137702,276],{"class":138},[128,137704,65115],{"class":166},[128,137706,4905],{"class":138},[128,137708,137709,137711,137713,137715,137717,137720,137722],{"class":130,"line":188},[128,137710,132164],{"class":166},[128,137712,1967],{"class":138},[128,137714,55146],{"class":166},[128,137716,54875],{"class":134},[128,137718,137719],{"class":166}," -20",[128,137721,54875],{"class":134},[128,137723,4905],{"class":138},[128,137725,137726],{"class":130,"line":193},[128,137727,2694],{"class":138},[5074,137729],{"style":129760,"src":137730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,137732,137733],{},"在前端中坐标轴的正方向是右和下",[14,137735,137737],{"id":137736},"_123-字体图标","12.3 字体图标",[72,137739,137741],{"id":137740},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,137743,137744],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,137746,137747],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,137749,137750],{},"1.图片文件还是比较大的。",[19,137752,137753],{},"2.图片本身放大和缩小会失真。",[19,137755,137756],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,137758,137759,137760,29226],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[3903,137761,137762],{},"字体图标 iconfont",[19,137764,137765,137768,137769,1842],{},[3903,137766,137767],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[3903,137770,137771],{},"展示的是图标，本质属于字体",[72,137773,137775],{"id":137774},"_1232-字体图标的优点","12.3.2 字体图标的优点",[4752,137777,137778,137783,137786,137789,137792],{},[29,137779,137780,137782],{},[3903,137781,29362],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[29,137784,137785],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[29,137787,137788],{},"兼容性：几乎支持所有的浏览器，请放心使用",[29,137790,137791],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[29,137793,137794],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[72,137796,137798],{"id":137797},"_1233-字体库下载网站","12.3.3 字体库下载网站",[4752,137800,137801],{},[29,137802,137803,137804],{},"icomoon字体库：",[3989,137805,137808],{"href":137806,"rel":137807},"http:\u002F\u002Ficomoon.io\u002F",[27352],"http:\u002F\u002Ficomoon.io",[19,137810,137811],{},"进去之后点icomoon app",[5074,137813],{"style":129760,"src":137814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,137816,137817],{},"可以对其编辑：",[5074,137819],{"style":129760,"src":137820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,137822,137823],{},"生成字体：",[5074,137825],{"style":129760,"src":137826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,137828,137829],{},"下载：",[5074,137831],{"style":129760,"src":137832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[4752,137834,137835],{},[29,137836,137837,137838],{},"阿里iconfont字体库： ",[3989,137839,137840],{"href":137840,"rel":137841},"http:\u002F\u002Fwww.iconfont.cn\u002F",[27352],[72,137843,137845],{"id":137844},"_1234-字体图标的引入","12.3.4 字体图标的引入",[26,137847,137848],{},[29,137849,137850,137851,137854],{},"把下载包里面的 ",[3903,137852,137853],{},"fonts"," 文件夹放入页面根目录下",[5074,137856],{"style":129760,"src":137857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[26,137859,137860],{"start":142},[29,137861,137862],{},"字体文件格式",[3891,137864,137865,137874],{},[3894,137866,137867],{},[3897,137868,137869,137872],{},[3900,137870,137871],{"align":27223},"格式",[3900,137873,27227],{"align":27223},[3938,137875,137876,137886,137896,137906],{},[3897,137877,137878,137883],{},[3943,137879,137880],{"align":27223},[3903,137881,137882],{},".ttf",[3943,137884,137885],{"align":27223},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[3897,137887,137888,137893],{},[3943,137889,137890],{"align":27223},[3903,137891,137892],{},".woff",[3943,137894,137895],{"align":27223},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[3897,137897,137898,137903],{},[3943,137899,137900],{"align":27223},[3903,137901,137902],{},".eot",[3943,137904,137905],{"align":27223},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[3897,137907,137908,137913],{},[3943,137909,137910],{"align":27223},[3903,137911,137912],{},"svg",[3943,137914,137915],{"align":27223},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[26,137917,137918],{"start":156},[29,137919,137920],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[106,137922,137924],{"className":129904,"code":137923,"language":129906,"meta":112,"style":112},"\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",[114,137925,137926,137931,137938,137950,137966,137991,138012,138032,138052,138056,138062,138072,138083],{"__ignoreMap":112},[128,137927,137928],{"class":130,"line":131},[128,137929,137930],{"class":3814},"\u002F* 引入字体图标 *\u002F\n",[128,137932,137933,137936],{"class":130,"line":142},[128,137934,137935],{"class":134},"@font-face",[128,137937,1959],{"class":138},[128,137939,137940,137943,137945,137948],{"class":130,"line":156},[128,137941,137942],{"class":166},"  font-family",[128,137944,1967],{"class":138},[128,137946,137947],{"class":176},"'icomoon'",[128,137949,4905],{"class":138},[128,137951,137952,137955,137957,137959,137961,137964],{"class":130,"line":163},[128,137953,137954],{"class":166},"  src",[128,137956,1967],{"class":138},[128,137958,65105],{"class":166},[128,137960,253],{"class":138},[128,137962,137963],{"class":176},"'fonts\u002Ficomoon.eot'",[128,137965,6292],{"class":138},[128,137967,137968,137970,137972,137974,137976,137979,137981,137984,137986,137989],{"class":130,"line":183},[128,137969,137954],{"class":166},[128,137971,1967],{"class":138},[128,137973,65105],{"class":166},[128,137975,253],{"class":138},[128,137977,137978],{"class":176},"'fonts\u002Ficomoon.eot?#iefix'",[128,137980,276],{"class":138},[128,137982,137983],{"class":166},"format",[128,137985,253],{"class":138},[128,137987,137988],{"class":176},"'embedded-opentype'",[128,137990,2760],{"class":138},[128,137992,137993,137996,137998,138001,138003,138005,138007,138010],{"class":130,"line":188},[128,137994,137995],{"class":166},"       url",[128,137997,253],{"class":138},[128,137999,138000],{"class":176},"'fonts\u002Ficomoon.woff'",[128,138002,276],{"class":138},[128,138004,137983],{"class":166},[128,138006,253],{"class":138},[128,138008,138009],{"class":176},"'woff'",[128,138011,2760],{"class":138},[128,138013,138014,138016,138018,138021,138023,138025,138027,138030],{"class":130,"line":193},[128,138015,137995],{"class":166},[128,138017,253],{"class":138},[128,138019,138020],{"class":176},"'fonts\u002Ficomoon.ttf'",[128,138022,276],{"class":138},[128,138024,137983],{"class":166},[128,138026,253],{"class":138},[128,138028,138029],{"class":176},"'truetype'",[128,138031,2760],{"class":138},[128,138033,138034,138036,138038,138041,138043,138045,138047,138050],{"class":130,"line":206},[128,138035,137995],{"class":166},[128,138037,253],{"class":138},[128,138039,138040],{"class":176},"'fonts\u002Ficomoon.svg#icomoon'",[128,138042,276],{"class":138},[128,138044,137983],{"class":166},[128,138046,253],{"class":138},[128,138048,138049],{"class":176},"'svg'",[128,138051,6292],{"class":138},[128,138053,138054],{"class":130,"line":221},[128,138055,2694],{"class":138},[128,138057,138058,138060],{"class":130,"line":230},[128,138059,137661],{"class":199},[128,138061,1959],{"class":138},[128,138063,138064,138066,138068,138070],{"class":130,"line":235},[128,138065,137942],{"class":166},[128,138067,1967],{"class":138},[128,138069,137947],{"class":176},[128,138071,4905],{"class":138},[128,138073,138074,138077,138079,138081],{"class":130,"line":244},[128,138075,138076],{"class":166},"  font-style",[128,138078,1967],{"class":138},[128,138080,67219],{"class":166},[128,138082,4905],{"class":138},[128,138084,138085],{"class":130,"line":287},[128,138086,2694],{"class":138},[19,138088,138089],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[5074,138091],{"style":129760,"src":138092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[26,138094,138095],{"start":163},[29,138096,138097],{},"添加字体",[5074,138099],{"style":129760,"src":138100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,138102,138103],{},"复制：",[5074,138105],{"style":129760,"src":138106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,138108,138109],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[26,138111,138112],{"start":183},[29,138113,138114],{},"代码展示：",[106,138116,138117],{"className":129904,"code":137923,"language":129906,"meta":112,"style":112},[114,138118,138119,138123,138129,138139,138153,138175,138193,138211,138229,138233,138239,138249,138259],{"__ignoreMap":112},[128,138120,138121],{"class":130,"line":131},[128,138122,137930],{"class":3814},[128,138124,138125,138127],{"class":130,"line":142},[128,138126,137935],{"class":134},[128,138128,1959],{"class":138},[128,138130,138131,138133,138135,138137],{"class":130,"line":156},[128,138132,137942],{"class":166},[128,138134,1967],{"class":138},[128,138136,137947],{"class":176},[128,138138,4905],{"class":138},[128,138140,138141,138143,138145,138147,138149,138151],{"class":130,"line":163},[128,138142,137954],{"class":166},[128,138144,1967],{"class":138},[128,138146,65105],{"class":166},[128,138148,253],{"class":138},[128,138150,137963],{"class":176},[128,138152,6292],{"class":138},[128,138154,138155,138157,138159,138161,138163,138165,138167,138169,138171,138173],{"class":130,"line":183},[128,138156,137954],{"class":166},[128,138158,1967],{"class":138},[128,138160,65105],{"class":166},[128,138162,253],{"class":138},[128,138164,137978],{"class":176},[128,138166,276],{"class":138},[128,138168,137983],{"class":166},[128,138170,253],{"class":138},[128,138172,137988],{"class":176},[128,138174,2760],{"class":138},[128,138176,138177,138179,138181,138183,138185,138187,138189,138191],{"class":130,"line":188},[128,138178,137995],{"class":166},[128,138180,253],{"class":138},[128,138182,138000],{"class":176},[128,138184,276],{"class":138},[128,138186,137983],{"class":166},[128,138188,253],{"class":138},[128,138190,138009],{"class":176},[128,138192,2760],{"class":138},[128,138194,138195,138197,138199,138201,138203,138205,138207,138209],{"class":130,"line":193},[128,138196,137995],{"class":166},[128,138198,253],{"class":138},[128,138200,138020],{"class":176},[128,138202,276],{"class":138},[128,138204,137983],{"class":166},[128,138206,253],{"class":138},[128,138208,138029],{"class":176},[128,138210,2760],{"class":138},[128,138212,138213,138215,138217,138219,138221,138223,138225,138227],{"class":130,"line":206},[128,138214,137995],{"class":166},[128,138216,253],{"class":138},[128,138218,138040],{"class":176},[128,138220,276],{"class":138},[128,138222,137983],{"class":166},[128,138224,253],{"class":138},[128,138226,138049],{"class":176},[128,138228,6292],{"class":138},[128,138230,138231],{"class":130,"line":221},[128,138232,2694],{"class":138},[128,138234,138235,138237],{"class":130,"line":230},[128,138236,137661],{"class":199},[128,138238,1959],{"class":138},[128,138240,138241,138243,138245,138247],{"class":130,"line":235},[128,138242,137942],{"class":166},[128,138244,1967],{"class":138},[128,138246,137947],{"class":176},[128,138248,4905],{"class":138},[128,138250,138251,138253,138255,138257],{"class":130,"line":244},[128,138252,138076],{"class":166},[128,138254,1967],{"class":138},[128,138256,67219],{"class":166},[128,138258,4905],{"class":138},[128,138260,138261],{"class":130,"line":287},[128,138262,2694],{"class":138},[5074,138264],{"style":129760,"src":138265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,138267,138268],{},"更加细节展示：",[26,138270,138271],{},[29,138272,138273],{},"html 标签内添加小图标",[5074,138275],{"style":129760,"src":138276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[26,138278,138279],{"start":142},[29,138280,138281],{},"给标签定义字体",[106,138283,138284],{"className":130651,"code":134008,"language":130653,"meta":112,"style":112},[114,138285,138286,138290,138304,138308],{"__ignoreMap":112},[128,138287,138288],{"class":130,"line":131},[128,138289,134015],{"class":3814},[128,138291,138292,138294,138296,138298,138300,138302],{"class":130,"line":142},[128,138293,4657],{"class":138},[128,138295,54994],{"class":54685},[128,138297,56868],{"class":199},[128,138299,270],{"class":138},[128,138301,134028],{"class":176},[128,138303,54692],{"class":138},[128,138305,138306],{"class":130,"line":156},[128,138307,134035],{"class":138},[128,138309,138310,138312,138314],{"class":130,"line":163},[128,138311,55168],{"class":138},[128,138313,54994],{"class":54685},[128,138315,54692],{"class":138},[19,138317,138318],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[5074,138320],{"style":129760,"src":138321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[72,138323,138325],{"id":138324},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,138327,138328],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,138330,138331,138332,138335],{},"把压缩包里面的 ",[3903,138333,138334],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,138337,138338],{},"打开网站，点下方：",[5074,138340],{"style":129760,"src":138341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[5074,138343],{"style":129760,"src":138344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[5074,138346],{"style":129760,"src":138347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,138349,138350],{},"点yes重新加载",[19,138352,138353],{},"然后重复之前的操作就可以实现了",[19,138355,138356],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[72,138358,138360],{"id":138359},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[5074,138362],{"style":129760,"src":138363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[3659,138365,138366],{},"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":112,"searchDepth":142,"depth":142,"links":138368},[138369,138375,138380],{"id":136972,"depth":142,"text":136973,"children":138370},[138371,138372,138373,138374],{"id":136984,"depth":156,"text":136985},{"id":137013,"depth":156,"text":137014},{"id":137041,"depth":156,"text":137042},{"id":137099,"depth":156,"text":137100},{"id":137571,"depth":142,"text":137572,"children":138376},[138377,138378,138379],{"id":137575,"depth":156,"text":137576},{"id":137620,"depth":156,"text":137621},{"id":137636,"depth":156,"text":137637},{"id":137736,"depth":142,"text":137737,"children":138381},[138382,138383,138384,138385,138386,138387],{"id":137740,"depth":156,"text":137741},{"id":137774,"depth":156,"text":137775},{"id":137797,"depth":156,"text":137798},{"id":137844,"depth":156,"text":137845},{"id":138324,"depth":156,"text":138325},{"id":138359,"depth":156,"text":138360},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":136964,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":138394,"title":138395,"body":138396,"description":3686,"extension":3687,"meta":139623,"navigation":159,"path":139624,"seo":139625,"stem":139626,"__hash__":139627},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":138397,"toc":139604},[138398,138401,138405,138408,138422,138490,138520,138523,138527,138531,138633,138680,138684,138687,138690,138724,138727,138730,138733,138736,138739,138742,138745,138747,138750,138753,138756,138759,138762,138765,138768,138796,138799,138803,138806,138813,138816,138819,138845,138848,138852,138855,138858,138865,138869,138872,138874,138906,138909,138912,138924,138930,138933,138936,138939,138941,138945,138948,138951,138954,138999,139003,139005,139008,139015,139057,139060,139064,139069,139083,139087,139090,139093,139096,139099,139102,139136,139139,139142,139196,139199,139202,139205,139208,139260,139263,139266,139315,139319,139321,139324,139327,139330,139333,139336,139394,139397,139403,139406,139409,139441,139444,139448,139452,139455,139487,139491,139494,139538,139542,139545,139548,139551,139554,139557,139560,139563,139565,139568,139570,139573,139576,139579,139582,139587,139590,139592,139595,139598,139601],[10,138399,138395],{"id":138400},"_13-界面样式与布局技巧",[14,138402,138404],{"id":138403},"_131-css三角","13.1 css三角",[19,138406,138407],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[4752,138409,138410,138413,138416,138419],{},[29,138411,138412],{},"用css 边框可以模拟三角效果",[29,138414,138415],{},"宽度高度为0",[29,138417,138418],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[29,138420,138421],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[106,138423,138425],{"className":129904,"code":138424,"language":129906,"meta":112,"style":112},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[114,138426,138427,138432,138439,138449,138459,138475,138486],{"__ignoreMap":112},[128,138428,138429],{"class":130,"line":131},[128,138430,138431],{"class":3814},"\u002F* CSS 实现三角形 *\u002F\n",[128,138433,138434,138437],{"class":130,"line":142},[128,138435,138436],{"class":199},".triangle",[128,138438,1959],{"class":138},[128,138440,138441,138443,138445,138447],{"class":130,"line":156},[128,138442,73943],{"class":166},[128,138444,1967],{"class":138},[128,138446,2452],{"class":166},[128,138448,4905],{"class":138},[128,138450,138451,138453,138455,138457],{"class":130,"line":163},[128,138452,74163],{"class":166},[128,138454,1967],{"class":138},[128,138456,2452],{"class":166},[128,138458,4905],{"class":138},[128,138460,138461,138463,138465,138467,138469,138471,138473],{"class":130,"line":183},[128,138462,74271],{"class":166},[128,138464,1967],{"class":138},[128,138466,4196],{"class":166},[128,138468,54875],{"class":134},[128,138470,54904],{"class":166},[128,138472,67369],{"class":166},[128,138474,4905],{"class":138},[128,138476,138477,138480,138482,138484],{"class":130,"line":188},[128,138478,138479],{"class":166},"  border-bottom-color",[128,138481,1967],{"class":138},[128,138483,65748],{"class":166},[128,138485,4905],{"class":138},[128,138487,138488],{"class":130,"line":193},[128,138489,2694],{"class":138},[106,138491,138492],{"className":129904,"code":134061,"language":129906,"meta":112,"style":112},[114,138493,138494,138500,138516],{"__ignoreMap":112},[128,138495,138496,138498],{"class":130,"line":131},[128,138497,54994],{"class":54685},[128,138499,1959],{"class":138},[128,138501,138502,138504,138506,138508,138510,138512,138514],{"class":130,"line":142},[128,138503,74271],{"class":166},[128,138505,1967],{"class":138},[128,138507,2592],{"class":166},[128,138509,54875],{"class":134},[128,138511,54904],{"class":166},[128,138513,133296],{"class":166},[128,138515,4905],{"class":138},[128,138517,138518],{"class":130,"line":156},[128,138519,2694],{"class":138},[5074,138521],{"style":129760,"src":138522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,138524,138526],{"id":138525},"_132-css用户界面样式","13.2 css用户界面样式",[72,138528,138530],{"id":138529},"_1321-鼠标样式","13.2.1 鼠标样式",[106,138532,138534],{"className":129904,"code":138533,"language":129906,"meta":112,"style":112},"\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",[114,138535,138536,138541,138560,138578,138597,138614],{"__ignoreMap":112},[128,138537,138538],{"class":130,"line":131},[128,138539,138540],{"class":3814},"\u002F* 鼠标样式 *\u002F\n",[128,138542,138543,138545,138547,138550,138552,138554,138557],{"class":130,"line":142},[128,138544,54994],{"class":54685},[128,138546,83181],{"class":138},[128,138548,138549],{"class":166},"cursor",[128,138551,1967],{"class":138},[128,138553,65409],{"class":166},[128,138555,138556],{"class":138},"; }   ",[128,138558,138559],{"class":3814},"\u002F* 手型 *\u002F\n",[128,138561,138562,138564,138566,138568,138570,138573,138575],{"class":130,"line":156},[128,138563,54994],{"class":54685},[128,138565,83181],{"class":138},[128,138567,138549],{"class":166},[128,138569,1967],{"class":138},[128,138571,138572],{"class":166},"default",[128,138574,138556],{"class":138},[128,138576,138577],{"class":3814},"\u002F* 默认 *\u002F\n",[128,138579,138580,138582,138584,138586,138588,138591,138594],{"class":130,"line":163},[128,138581,54994],{"class":54685},[128,138583,83181],{"class":138},[128,138585,138549],{"class":166},[128,138587,1967],{"class":138},[128,138589,138590],{"class":166},"move",[128,138592,138593],{"class":138},"; }      ",[128,138595,138596],{"class":3814},"\u002F* 移动 *\u002F\n",[128,138598,138599,138601,138603,138605,138607,138609,138611],{"class":130,"line":183},[128,138600,54994],{"class":54685},[128,138602,83181],{"class":138},[128,138604,138549],{"class":166},[128,138606,1967],{"class":138},[128,138608,111],{"class":166},[128,138610,138593],{"class":138},[128,138612,138613],{"class":3814},"\u002F* 文本 *\u002F\n",[128,138615,138616,138618,138620,138622,138624,138627,138630],{"class":130,"line":188},[128,138617,54994],{"class":54685},[128,138619,83181],{"class":138},[128,138621,138549],{"class":166},[128,138623,1967],{"class":138},[128,138625,138626],{"class":166},"not-allowed",[128,138628,138629],{"class":138},"; } ",[128,138631,138632],{"class":3814},"\u002F* 禁止 *\u002F\n",[3891,138634,138635,138643],{},[3894,138636,138637],{},[3897,138638,138639,138641],{},[3900,138640,130368],{"align":27223},[3900,138642,30974],{"align":27223},[3938,138644,138645,138652,138659,138666,138673],{},[3897,138646,138647,138649],{},[3943,138648,138572],{"align":27223},[3943,138650,138651],{"align":27223},"小白 默认",[3897,138653,138654,138656],{},[3943,138655,65409],{"align":27223},[3943,138657,138658],{"align":27223},"小手",[3897,138660,138661,138663],{},[3943,138662,138590],{"align":27223},[3943,138664,138665],{"align":27223},"移动",[3897,138667,138668,138670],{},[3943,138669,111],{"align":27223},[3943,138671,138672],{"align":27223},"文本",[3897,138674,138675,138677],{},[3943,138676,138626],{"align":27223},[3943,138678,138679],{"align":27223},"禁止",[72,138681,138683],{"id":138682},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,138685,138686],{},"去除表单轮廓线",[19,138688,138689],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[106,138691,138692],{"className":129904,"code":133268,"language":129906,"meta":112,"style":112},[114,138693,138694,138698,138704,138720],{"__ignoreMap":112},[128,138695,138696],{"class":130,"line":131},[128,138697,133275],{"class":3814},[128,138699,138700,138702],{"class":130,"line":142},[128,138701,54994],{"class":54685},[128,138703,1959],{"class":138},[128,138705,138706,138708,138710,138712,138714,138716,138718],{"class":130,"line":156},[128,138707,74271],{"class":166},[128,138709,1967],{"class":138},[128,138711,2592],{"class":166},[128,138713,54875],{"class":134},[128,138715,54904],{"class":166},[128,138717,133296],{"class":166},[128,138719,4905],{"class":138},[128,138721,138722],{"class":130,"line":163},[128,138723,2694],{"class":138},[19,138725,138726],{},"文本域：",[5074,138728],{"style":129760,"src":138729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,138731,138732],{},"此时会有一个空白区域",[5074,138734],{"style":129760,"src":138735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,138737,138738],{},"写在同一行就不会出现这个问题",[5074,138740],{"style":129760,"src":138741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,138743,138744],{},"文本域是行内块元素，一定记住！！！",[19,138746,101602],{},[5074,138748],{"style":129760,"src":138749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,138751,138752],{},"文本域尽量放在一行",[19,138754,138755],{},"知识回顾：cols是列，rols是行",[5074,138757],{"style":129760,"src":138758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,138760,138761],{},"它可以进行拖动，显然这是我们不愿意看到的",[5074,138763],{"style":129760,"src":138764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,138766,138767],{},"使用resize进行解决",[106,138769,138771],{"className":129904,"code":138770,"language":129906,"meta":112,"style":112},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[114,138772,138773,138779,138792],{"__ignoreMap":112},[128,138774,138775,138777],{"class":130,"line":131},[128,138776,643],{"class":54685},[128,138778,1959],{"class":138},[128,138780,138781,138783,138785,138787,138789],{"class":130,"line":142},[128,138782,74173],{"class":166},[128,138784,1967],{"class":138},[128,138786,58118],{"class":166},[128,138788,133767],{"class":138},[128,138790,138791],{"class":3814},"\u002F* 取消表单轮廓线 *\u002F\n",[128,138793,138794],{"class":130,"line":156},[128,138795,2694],{"class":138},[19,138797,138798],{},"此时就无法通过右下方实现拖动了",[72,138800,138802],{"id":138801},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,138804,138805],{},"实现一个盒子中的文字和图片对齐",[19,138807,138808,138809,138812],{},"用于设置一个元素的 ",[3903,138810,138811],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,138814,138815],{},"图片和文字默认是基线对齐",[5074,138817],{"style":129760,"src":138818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[106,138820,138821],{"className":129904,"code":138770,"language":129906,"meta":112,"style":112},[114,138822,138823,138829,138841],{"__ignoreMap":112},[128,138824,138825,138827],{"class":130,"line":131},[128,138826,643],{"class":54685},[128,138828,1959],{"class":138},[128,138830,138831,138833,138835,138837,138839],{"class":130,"line":142},[128,138832,74173],{"class":166},[128,138834,1967],{"class":138},[128,138836,58118],{"class":166},[128,138838,133767],{"class":138},[128,138840,138791],{"class":3814},[128,138842,138843],{"class":130,"line":156},[128,138844,2694],{"class":138},[5074,138846],{"style":129760,"src":138847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[25485,138849,138851],{"id":138850},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,138853,138854],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[5074,138856],{"style":129760,"src":138857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,138859,138860,138861,138864],{},"此时可以给图片、表单这些行内块元素的 ",[3903,138862,138863],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[25485,138866,138868],{"id":138867},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,138870,138871],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,138873,18157],{},[106,138875,138877],{"className":129904,"code":138876,"language":129906,"meta":112,"style":112},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[114,138878,138879,138884,138890,138902],{"__ignoreMap":112},[128,138880,138881],{"class":130,"line":131},[128,138882,138883],{"class":3814},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[128,138885,138886,138888],{"class":130,"line":142},[128,138887,5074],{"class":54685},[128,138889,1959],{"class":138},[128,138891,138892,138895,138897,138900],{"class":130,"line":156},[128,138893,138894],{"class":166},"  vertical-align",[128,138896,1967],{"class":138},[128,138898,138899],{"class":166},"middle",[128,138901,4905],{"class":138},[128,138903,138904],{"class":130,"line":163},[128,138905,2694],{"class":138},[5074,138907],{"style":129760,"src":138908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,138910,138911],{},"主要解决方法有两种：",[26,138913,138914],{},[29,138915,138916,138919,138920,138923],{},[3903,138917,138918],{},"给图片"," 添加 ",[3903,138921,138922],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,138925,138926,138927],{},"2.把图片转换为块级元素 ",[3903,138928,138929],{},"display: block",[19,138931,138932],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,138934,138935],{},"img {",[19,138937,138938],{},"vertical-align:middle;",[19,138940,1453],{},[72,138942,138944],{"id":138943},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,138946,138947],{},"效果：",[5074,138949],{"style":129760,"src":138950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,138952,138953],{},"单行文本溢出显示省略号--必须满足三个条件：",[106,138955,138957],{"className":129904,"code":138956,"language":129906,"meta":112,"style":112},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[114,138958,138959,138964,138970,138980,138985,138995],{"__ignoreMap":112},[128,138960,138961],{"class":130,"line":131},[128,138962,138963],{"class":3814},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[128,138965,138966,138968],{"class":130,"line":142},[128,138967,5074],{"class":54685},[128,138969,1959],{"class":138},[128,138971,138972,138974,138976,138978],{"class":130,"line":156},[128,138973,138894],{"class":166},[128,138975,1967],{"class":138},[128,138977,138899],{"class":166},[128,138979,4905],{"class":138},[128,138981,138982],{"class":130,"line":163},[128,138983,138984],{"class":3814},"  \u002F* 或 *\u002F\n",[128,138986,138987,138989,138991,138993],{"class":130,"line":183},[128,138988,131520],{"class":166},[128,138990,1967],{"class":138},[128,138992,64248],{"class":166},[128,138994,4905],{"class":138},[128,138996,138997],{"class":130,"line":188},[128,138998,2694],{"class":138},[72,139000,139002],{"id":139001},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,139004,138947],{},[5074,139006],{"style":129760,"src":139007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,139009,139010,139011,139014],{},"多行文本溢出显示省略号， ",[3903,139012,139013],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[106,139016,139017],{"className":129904,"code":138956,"language":129906,"meta":112,"style":112},[114,139018,139019,139023,139029,139039,139043,139053],{"__ignoreMap":112},[128,139020,139021],{"class":130,"line":131},[128,139022,138963],{"class":3814},[128,139024,139025,139027],{"class":130,"line":142},[128,139026,5074],{"class":54685},[128,139028,1959],{"class":138},[128,139030,139031,139033,139035,139037],{"class":130,"line":156},[128,139032,138894],{"class":166},[128,139034,1967],{"class":138},[128,139036,138899],{"class":166},[128,139038,4905],{"class":138},[128,139040,139041],{"class":130,"line":163},[128,139042,138984],{"class":3814},[128,139044,139045,139047,139049,139051],{"class":130,"line":183},[128,139046,131520],{"class":166},[128,139048,1967],{"class":138},[128,139050,64248],{"class":166},[128,139052,4905],{"class":138},[128,139054,139055],{"class":130,"line":188},[128,139056,2694],{"class":138},[19,139058,139059],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,139061,139063],{"id":139062},"_133-常见布局技巧","13.3 常见布局技巧",[19,139065,139066],{},[3903,139067,139068],{},"巧妙利用一个技术更快更好的布局：",[26,139070,139071,139074,139077,139080],{},[29,139072,139073],{},"margin负值的运用",[29,139075,139076],{},"文字围绕浮动元素",[29,139078,139079],{},"行内块的巧妙运用",[29,139081,139082],{},"CSS三角强化",[72,139084,139086],{"id":139085},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,139088,139089],{},"应用场景：",[5074,139091],{"style":129760,"src":139092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[5074,139094],{"style":129760,"src":139095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,139097,139098],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,139100,139101],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[106,139103,139104],{"className":129904,"code":133268,"language":129906,"meta":112,"style":112},[114,139105,139106,139110,139116,139132],{"__ignoreMap":112},[128,139107,139108],{"class":130,"line":131},[128,139109,133275],{"class":3814},[128,139111,139112,139114],{"class":130,"line":142},[128,139113,54994],{"class":54685},[128,139115,1959],{"class":138},[128,139117,139118,139120,139122,139124,139126,139128,139130],{"class":130,"line":156},[128,139119,74271],{"class":166},[128,139121,1967],{"class":138},[128,139123,2592],{"class":166},[128,139125,54875],{"class":134},[128,139127,54904],{"class":166},[128,139129,133296],{"class":166},[128,139131,4905],{"class":138},[128,139133,139134],{"class":130,"line":163},[128,139135,2694],{"class":138},[5074,139137],{"style":129760,"src":139138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,139140,139141],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[106,139143,139145],{"className":129904,"code":139144,"language":129906,"meta":112,"style":112},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[114,139146,139147,139152,139158,139168,139180,139192],{"__ignoreMap":112},[128,139148,139149],{"class":130,"line":131},[128,139150,139151],{"class":3814},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[128,139153,139154,139156],{"class":130,"line":142},[128,139155,133752],{"class":199},[128,139157,1959],{"class":138},[128,139159,139160,139162,139164,139166],{"class":130,"line":156},[128,139161,135710],{"class":166},[128,139163,1967],{"class":138},[128,139165,58145],{"class":166},[128,139167,4905],{"class":138},[128,139169,139170,139172,139174,139176,139178],{"class":130,"line":163},[128,139171,135724],{"class":166},[128,139173,1967],{"class":138},[128,139175,4196],{"class":166},[128,139177,54875],{"class":134},[128,139179,4905],{"class":138},[128,139181,139182,139184,139186,139188,139190],{"class":130,"line":183},[128,139183,135741],{"class":166},[128,139185,1967],{"class":138},[128,139187,4449],{"class":166},[128,139189,54875],{"class":134},[128,139191,4905],{"class":138},[128,139193,139194],{"class":130,"line":188},[128,139195,2694],{"class":138},[19,139197,139198],{},"加上上述代码会发现：",[5074,139200],{"style":129760,"src":139201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,139203,139204],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,139206,139207],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[106,139209,139210],{"className":129904,"code":139144,"language":129906,"meta":112,"style":112},[114,139211,139212,139216,139222,139232,139244,139256],{"__ignoreMap":112},[128,139213,139214],{"class":130,"line":131},[128,139215,139151],{"class":3814},[128,139217,139218,139220],{"class":130,"line":142},[128,139219,133752],{"class":199},[128,139221,1959],{"class":138},[128,139223,139224,139226,139228,139230],{"class":130,"line":156},[128,139225,135710],{"class":166},[128,139227,1967],{"class":138},[128,139229,58145],{"class":166},[128,139231,4905],{"class":138},[128,139233,139234,139236,139238,139240,139242],{"class":130,"line":163},[128,139235,135724],{"class":166},[128,139237,1967],{"class":138},[128,139239,4196],{"class":166},[128,139241,54875],{"class":134},[128,139243,4905],{"class":138},[128,139245,139246,139248,139250,139252,139254],{"class":130,"line":183},[128,139247,135741],{"class":166},[128,139249,1967],{"class":138},[128,139251,4449],{"class":166},[128,139253,54875],{"class":134},[128,139255,4905],{"class":138},[128,139257,139258],{"class":130,"line":188},[128,139259,2694],{"class":138},[19,139261,139262],{},"解决方式2：",[19,139264,139265],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[106,139267,139269],{"className":129904,"code":139268,"language":129906,"meta":112,"style":112},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[114,139270,139271,139277,139287,139299,139311],{"__ignoreMap":112},[128,139272,139273,139275],{"class":130,"line":131},[128,139274,54994],{"class":54685},[128,139276,1959],{"class":138},[128,139278,139279,139281,139283,139285],{"class":130,"line":142},[128,139280,135710],{"class":166},[128,139282,1967],{"class":138},[128,139284,58145],{"class":166},[128,139286,4905],{"class":138},[128,139288,139289,139291,139293,139295,139297],{"class":130,"line":156},[128,139290,135724],{"class":166},[128,139292,1967],{"class":138},[128,139294,4196],{"class":166},[128,139296,54875],{"class":134},[128,139298,4905],{"class":138},[128,139300,139301,139303,139305,139307,139309],{"class":130,"line":163},[128,139302,135741],{"class":166},[128,139304,1967],{"class":138},[128,139306,4449],{"class":166},[128,139308,54875],{"class":134},[128,139310,4905],{"class":138},[128,139312,139313],{"class":130,"line":183},[128,139314,2694],{"class":138},[72,139316,139318],{"id":139317},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,139320,139089],{},[5074,139322],{"style":129760,"src":139323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,139325,139326],{},"实现结构图：",[5074,139328],{"style":129760,"src":139329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,139331,139332],{},"巧妙运用浮动元素不会压住文字的特性",[19,139334,139335],{},"代码显示：",[106,139337,139339],{"className":129904,"code":139338,"language":129906,"meta":112,"style":112},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[114,139340,139341,139347,139357,139361,139366,139370,139376,139390],{"__ignoreMap":112},[128,139342,139343,139345],{"class":130,"line":131},[128,139344,133752],{"class":199},[128,139346,1959],{"class":138},[128,139348,139349,139351,139353,139355],{"class":130,"line":142},[128,139350,134384],{"class":166},[128,139352,1967],{"class":138},[128,139354,27223],{"class":166},[128,139356,4905],{"class":138},[128,139358,139359],{"class":130,"line":156},[128,139360,2694],{"class":138},[128,139362,139363],{"class":130,"line":163},[128,139364,139365],{"class":138},"```Css\n",[128,139367,139368],{"class":130,"line":183},[128,139369,133747],{"class":3814},[128,139371,139372,139374],{"class":130,"line":188},[128,139373,133752],{"class":199},[128,139375,1959],{"class":138},[128,139377,139378,139380,139382,139384,139386,139388],{"class":130,"line":193},[128,139379,73845],{"class":166},[128,139381,1967],{"class":138},[128,139383,2452],{"class":166},[128,139385,54939],{"class":166},[128,139387,133767],{"class":138},[128,139389,133770],{"class":3814},[128,139391,139392],{"class":130,"line":206},[128,139393,2694],{"class":138},[19,139395,139396],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[106,139398,139401],{"className":139399,"code":139400,"language":111},[109],"\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",[114,139402,139400],{"__ignoreMap":112},[5074,139404],{"style":129760,"src":139405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,139407,139408],{},"最终展示结果：",[106,139410,139411],{"className":129904,"code":133740,"language":129906,"meta":112,"style":112},[114,139412,139413,139417,139423,139437],{"__ignoreMap":112},[128,139414,139415],{"class":130,"line":131},[128,139416,133747],{"class":3814},[128,139418,139419,139421],{"class":130,"line":142},[128,139420,133752],{"class":199},[128,139422,1959],{"class":138},[128,139424,139425,139427,139429,139431,139433,139435],{"class":130,"line":156},[128,139426,73845],{"class":166},[128,139428,1967],{"class":138},[128,139430,2452],{"class":166},[128,139432,54939],{"class":166},[128,139434,133767],{"class":138},[128,139436,133770],{"class":3814},[128,139438,139439],{"class":130,"line":163},[128,139440,2694],{"class":138},[5074,139442],{"style":129760,"src":139443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,139445,139447],{"id":139446},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[72,139449,139451],{"id":139450},"_1341-原理","13.4.1 原理",[5074,139453],{"style":129760,"src":139454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[106,139456,139457],{"className":129904,"code":133740,"language":129906,"meta":112,"style":112},[114,139458,139459,139463,139469,139483],{"__ignoreMap":112},[128,139460,139461],{"class":130,"line":131},[128,139462,133747],{"class":3814},[128,139464,139465,139467],{"class":130,"line":142},[128,139466,133752],{"class":199},[128,139468,1959],{"class":138},[128,139470,139471,139473,139475,139477,139479,139481],{"class":130,"line":156},[128,139472,73845],{"class":166},[128,139474,1967],{"class":138},[128,139476,2452],{"class":166},[128,139478,54939],{"class":166},[128,139480,133767],{"class":138},[128,139482,133770],{"class":3814},[128,139484,139485],{"class":130,"line":163},[128,139486,2694],{"class":138},[72,139488,139490],{"id":139489},"_1342-实例","13.4.2 实例",[5074,139492],{"style":129760,"src":139493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[106,139495,139496],{"className":129904,"code":134370,"language":129906,"meta":112,"style":112},[114,139497,139498,139504,139514,139518,139524,139534],{"__ignoreMap":112},[128,139499,139500,139502],{"class":130,"line":131},[128,139501,134377],{"class":199},[128,139503,1959],{"class":138},[128,139505,139506,139508,139510,139512],{"class":130,"line":142},[128,139507,134384],{"class":166},[128,139509,1967],{"class":138},[128,139511,27223],{"class":166},[128,139513,4905],{"class":138},[128,139515,139516],{"class":130,"line":156},[128,139517,2694],{"class":138},[128,139519,139520,139522],{"class":130,"line":163},[128,139521,134399],{"class":199},[128,139523,1959],{"class":138},[128,139525,139526,139528,139530,139532],{"class":130,"line":183},[128,139527,134384],{"class":166},[128,139529,1967],{"class":138},[128,139531,75897],{"class":166},[128,139533,4905],{"class":138},[128,139535,139536],{"class":130,"line":188},[128,139537,2694],{"class":138},[14,139539,139541],{"id":139540},"_135-css的初始化","13.5 css的初始化",[19,139543,139544],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,139546,139547],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,139549,139550],{},"每个网页都必须首先进行 CSS初始化。",[19,139552,139553],{},"这里我们以 京东CSS初始化代码为例。",[19,139555,139556],{},"在网页右键查看网页源代码",[19,139558,139559],{},"找到css的link引入语句",[19,139561,139562],{},"然后ctrl+f 输入body",[19,139564,80600],{},[5074,139566],{"style":129760,"src":139567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,139569,80623],{},[5074,139571],{"style":129760,"src":139572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,139574,139575],{},"③打开了网页上传压缩的代码",[5074,139577],{"style":129760,"src":139578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,139580,139581],{},"④从body前可以查看这个网页的初始化代码",[19,139583,139584],{},[3903,139585,139586],{},"Unicode编码字体：",[19,139588,139589],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,139591,86580],{},[19,139593,139594],{},"黑体 \\9ED1\\4F53",[19,139596,139597],{},"宋体 \\5B8B\\4F53",[19,139599,139600],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[3659,139602,139603],{},"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":112,"searchDepth":142,"depth":142,"links":139605},[139606,139607,139614,139618,139622],{"id":138403,"depth":142,"text":138404},{"id":138525,"depth":142,"text":138526,"children":139608},[139609,139610,139611,139612,139613],{"id":138529,"depth":156,"text":138530},{"id":138682,"depth":156,"text":138683},{"id":138801,"depth":156,"text":138802},{"id":138943,"depth":156,"text":138944},{"id":139001,"depth":156,"text":139002},{"id":139062,"depth":142,"text":139063,"children":139615},[139616,139617],{"id":139085,"depth":156,"text":139086},{"id":139317,"depth":156,"text":139318},{"id":139446,"depth":142,"text":139447,"children":139619},[139620,139621],{"id":139450,"depth":156,"text":139451},{"id":139489,"depth":156,"text":139490},{"id":139540,"depth":142,"text":139541},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":138395,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":139629,"title":139630,"body":139631,"description":3686,"extension":3687,"meta":141317,"navigation":159,"path":141318,"seo":141319,"stem":141320,"__hash__":141321},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":139632,"toc":141306},[139633,139636,139640,139644,139647,139654,139657,139660,139698,139701,139703,139717,139721,139730,139734,139739,139742,139745,139748,139783,139788,139791,139821,139824,139829,139832,139835,139865,139868,139922,139925,139929,139934,139946,139949,139953,139983,139986,139991,139994,140024,140027,140031,140048,140052,140056,140059,140092,140095,140099,140102,140105,140108,140111,140114,140225,140228,140231,140234,140336,140339,140343,140347,140351,140354,140394,140397,140399,140415,140419,140422,140427,140508,140511,140514,140640,140645,140648,140656,140659,140664,140749,140752,140756,140759,140762,140766,140786,140791,140875,140878,140883,140886,140889,140967,140970,140973,140976,140979,140982,140987,140990,140993,141065,141068,141073,141076,141173,141176,141182,141185,141188,141191,141194,141197,141200,141203,141206,141210,141215,141218,141251,141256,141259,141300,141303],[10,139634,139630],{"id":139635},"_14-html5与css3新特性",[14,139637,139639],{"id":139638},"_141-html5的新特性","14.1 HTML5的新特性",[72,139641,139643],{"id":139642},"_1411-基本标签","14.1.1 基本标签",[19,139645,139646],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,139648,139649,139650,139653],{},"这些新特性都有兼容性问题，基本是 ",[3903,139651,139652],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,139655,139656],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,139658,139659],{},"现在使用的是新特性：",[4752,139661,139662,139668,139674,139680,139686,139692],{},[29,139663,139664,139667],{},[114,139665,139666],{},"\u003Cheader>"," 头部标签",[29,139669,139670,139673],{},[114,139671,139672],{},"\u003Cnav>"," 导航标签",[29,139675,139676,139679],{},[114,139677,139678],{},"\u003Carticle>"," 内容标签",[29,139681,139682,139685],{},[114,139683,139684],{},"\u003Csection>"," 定义文档某个区域",[29,139687,139688,139691],{},[114,139689,139690],{},"\u003Caside>"," 侧边栏标签",[29,139693,139694,139697],{},[114,139695,139696],{},"\u003Cfooter>"," 尾部标签",[5074,139699],{"style":129760,"src":139700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,139702,3788],{},[4752,139704,139705,139708,139711,139714],{},[29,139706,139707],{},"这种语义化标准主要是针对搜索引擎的",[29,139709,139710],{},"这些标签页面中可以经常使用",[29,139712,139713],{},"在IE9中，需要把这些元素转换为块级元素",[29,139715,139716],{},"移动端更喜欢使用这些标签",[72,139718,139720],{"id":139719},"_1412-多媒体标签","14.1.2 多媒体标签",[19,139722,139723,139724,139726,139727,139729],{},"音频 ",[3903,139725,31659],{}," 和视频 ",[3903,139728,31668],{}," 两个标签",[25485,139731,139733],{"id":139732},"_14121-视频标签-video","14.1.2.1 视频标签- video",[26,139735,139736],{},[29,139737,139738],{},"支持格式：",[5074,139740],{"style":129760,"src":139741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,139743,139744],{},"尽量使用MP4，兼容性好",[19,139746,139747],{},"用MP4就可以",[106,139749,139751],{"className":130651,"code":139750,"language":130653,"meta":112,"style":112},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[114,139752,139753],{"__ignoreMap":112},[128,139754,139755,139757,139759,139761,139763,139766,139768,139771,139774,139777,139779,139781],{"class":130,"line":131},[128,139756,4657],{"class":138},[128,139758,31668],{"class":54685},[128,139760,58620],{"class":199},[128,139762,270],{"class":138},[128,139764,139765],{"class":176},"\"movie.mp4\"",[128,139767,95793],{"class":199},[128,139769,139770],{"class":199}," autoplay",[128,139772,139773],{"class":199}," muted",[128,139775,139776],{"class":199}," loop",[128,139778,58695],{"class":138},[128,139780,31668],{"class":54685},[128,139782,54692],{"class":138},[26,139784,139785],{"start":142},[29,139786,139787],{},"兼容写法",[19,139789,139790],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[106,139792,139793],{"className":130651,"code":139750,"language":130653,"meta":112,"style":112},[114,139794,139795],{"__ignoreMap":112},[128,139796,139797,139799,139801,139803,139805,139807,139809,139811,139813,139815,139817,139819],{"class":130,"line":131},[128,139798,4657],{"class":138},[128,139800,31668],{"class":54685},[128,139802,58620],{"class":199},[128,139804,270],{"class":138},[128,139806,139765],{"class":176},[128,139808,95793],{"class":199},[128,139810,139770],{"class":199},[128,139812,139773],{"class":199},[128,139814,139776],{"class":199},[128,139816,58695],{"class":138},[128,139818,31668],{"class":54685},[128,139820,54692],{"class":138},[19,139822,139823],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,139825,139826],{"start":156},[29,139827,139828],{},"video常用属性",[5074,139830],{"style":129760,"src":139831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,139833,139834],{},"poster属性后面是跟的等待加载图片的地址",[106,139836,139837],{"className":130651,"code":137406,"language":130653,"meta":112,"style":112},[114,139838,139839],{"__ignoreMap":112},[128,139840,139841,139843,139845,139847,139849,139851,139853,139855,139857,139859,139861,139863],{"class":130,"line":131},[128,139842,4657],{"class":138},[128,139844,5074],{"class":54685},[128,139846,58620],{"class":199},[128,139848,270],{"class":138},[128,139850,137421],{"class":176},[128,139852,58628],{"class":199},[128,139854,270],{"class":138},[128,139856,137428],{"class":176},[128,139858,137431],{"class":199},[128,139860,270],{"class":138},[128,139862,137436],{"class":176},[128,139864,54692],{"class":138},[19,139866,139867],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[106,139869,139871],{"className":129904,"code":139870,"language":129906,"meta":112,"style":112},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[114,139872,139873,139878,139884,139908,139913,139918],{"__ignoreMap":112},[128,139874,139875],{"class":130,"line":131},[128,139876,139877],{"class":3814},"\u002F* 2D 位移 *\u002F\n",[128,139879,139880,139882],{"class":130,"line":142},[128,139881,54994],{"class":54685},[128,139883,1959],{"class":138},[128,139885,139886,139889,139891,139894,139896,139898,139900,139902,139904,139906],{"class":130,"line":156},[128,139887,139888],{"class":166},"  transform",[128,139890,1967],{"class":138},[128,139892,139893],{"class":166},"translate",[128,139895,253],{"class":138},[128,139897,4061],{"class":166},[128,139899,54875],{"class":134},[128,139901,258],{"class":138},[128,139903,4405],{"class":166},[128,139905,54875],{"class":134},[128,139907,6292],{"class":138},[128,139909,139910],{"class":130,"line":163},[128,139911,139912],{"class":3814},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[128,139914,139915],{"class":130,"line":183},[128,139916,139917],{"class":3814},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[128,139919,139920],{"class":130,"line":188},[128,139921,2694],{"class":138},[19,139923,139924],{},"muted:自动静音属性",[25485,139926,139928],{"id":139927},"_14122-音频标签audio","14.1.2.2 音频标签audio",[26,139930,139931],{},[29,139932,139933],{},"基本使用",[19,139935,139936,139937,139942,139943],{},"当前 ",[3903,139938,139939],{},[114,139940,139941],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[3903,139944,139945],{},"mp3格式",[5074,139947],{"style":129760,"src":139948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[26,139950,139951],{"start":142},[29,139952,139787],{},[106,139954,139955],{"className":130651,"code":139750,"language":130653,"meta":112,"style":112},[114,139956,139957],{"__ignoreMap":112},[128,139958,139959,139961,139963,139965,139967,139969,139971,139973,139975,139977,139979,139981],{"class":130,"line":131},[128,139960,4657],{"class":138},[128,139962,31668],{"class":54685},[128,139964,58620],{"class":199},[128,139966,270],{"class":138},[128,139968,139765],{"class":176},[128,139970,95793],{"class":199},[128,139972,139770],{"class":199},[128,139974,139773],{"class":199},[128,139976,139776],{"class":199},[128,139978,58695],{"class":138},[128,139980,31668],{"class":54685},[128,139982,54692],{"class":138},[19,139984,139985],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,139987,139988],{"start":156},[29,139989,139990],{},"常用属性",[5074,139992],{"style":129760,"src":139993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[106,139995,139996],{"className":130651,"code":139750,"language":130653,"meta":112,"style":112},[114,139997,139998],{"__ignoreMap":112},[128,139999,140000,140002,140004,140006,140008,140010,140012,140014,140016,140018,140020,140022],{"class":130,"line":131},[128,140001,4657],{"class":138},[128,140003,31668],{"class":54685},[128,140005,58620],{"class":199},[128,140007,270],{"class":138},[128,140009,139765],{"class":176},[128,140011,95793],{"class":199},[128,140013,139770],{"class":199},[128,140015,139773],{"class":199},[128,140017,139776],{"class":199},[128,140019,58695],{"class":138},[128,140021,31668],{"class":54685},[128,140023,54692],{"class":138},[19,140025,140026],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[25485,140028,140030],{"id":140029},"_14123-总结","14.1.2.3 总结",[4752,140032,140033,140036,140039,140042,140045],{},[29,140034,140035],{},"音频标签和视频标签使用方式基本一致",[29,140037,140038],{},"浏览器支持情况不同",[29,140040,140041],{},"谷歌浏览器把音频和视频自动播放禁止了",[29,140043,140044],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[29,140046,140047],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[72,140049,140051],{"id":140050},"_1413-表单元素","14.1.3 表单元素",[25485,140053,140055],{"id":140054},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[5074,140057],{"style":129760,"src":140058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[106,140060,140062],{"className":130651,"code":140061,"language":130653,"meta":112,"style":112},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[114,140063,140064],{"__ignoreMap":112},[128,140065,140066,140068,140070,140072,140074,140076,140078,140080,140083,140085,140087,140090],{"class":130,"line":131},[128,140067,4657],{"class":138},[128,140069,643],{"class":54685},[128,140071,57205],{"class":199},[128,140073,270],{"class":138},[128,140075,66077],{"class":176},[128,140077,18442],{"class":199},[128,140079,270],{"class":138},[128,140081,140082],{"class":176},"\"username\"",[128,140084,64399],{"class":199},[128,140086,270],{"class":138},[128,140088,140089],{"class":176},"\"请输入用户名\"",[128,140091,54692],{"class":138},[5074,140093],{"style":129760,"src":140094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[25485,140096,140098],{"id":140097},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[5074,140100],{"style":129760,"src":140101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,140103,140104],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,140106,140107],{},"快捷操作：",[5074,140109],{"style":129760,"src":140110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,140112,140113],{},"例子1：",[106,140115,140117],{"className":130651,"code":140116,"language":130653,"meta":112,"style":112},"\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",[114,140118,140119,140142,140169,140198,140217],{"__ignoreMap":112},[128,140120,140121,140123,140125,140127,140129,140132,140135,140137,140140],{"class":130,"line":131},[128,140122,4657],{"class":138},[128,140124,70003],{"class":54685},[128,140126,70006],{"class":199},[128,140128,270],{"class":138},[128,140130,140131],{"class":176},"\"\u002Fsubmit\"",[128,140133,140134],{"class":199}," method",[128,140136,270],{"class":138},[128,140138,140139],{"class":176},"\"post\"",[128,140141,54692],{"class":138},[128,140143,140144,140146,140148,140150,140152,140154,140156,140158,140160,140162,140164,140167],{"class":130,"line":142},[128,140145,55526],{"class":138},[128,140147,643],{"class":54685},[128,140149,57205],{"class":199},[128,140151,270],{"class":138},[128,140153,66077],{"class":176},[128,140155,18442],{"class":199},[128,140157,270],{"class":138},[128,140159,140082],{"class":176},[128,140161,64399],{"class":199},[128,140163,270],{"class":138},[128,140165,140166],{"class":176},"\"用户名\"",[128,140168,54692],{"class":138},[128,140170,140171,140173,140175,140177,140179,140182,140184,140186,140189,140191,140193,140196],{"class":130,"line":156},[128,140172,55526],{"class":138},[128,140174,643],{"class":54685},[128,140176,57205],{"class":199},[128,140178,270],{"class":138},[128,140180,140181],{"class":176},"\"password\"",[128,140183,18442],{"class":199},[128,140185,270],{"class":138},[128,140187,140188],{"class":176},"\"pwd\"",[128,140190,64399],{"class":199},[128,140192,270],{"class":138},[128,140194,140195],{"class":176},"\"密码\"",[128,140197,54692],{"class":138},[128,140199,140200,140202,140204,140206,140208,140210,140213,140215],{"class":130,"line":163},[128,140201,55526],{"class":138},[128,140203,57268],{"class":54685},[128,140205,57205],{"class":199},[128,140207,270],{"class":138},[128,140209,70026],{"class":176},[128,140211,140212],{"class":138},">提交\u003C\u002F",[128,140214,57268],{"class":54685},[128,140216,54692],{"class":138},[128,140218,140219,140221,140223],{"class":130,"line":183},[128,140220,55168],{"class":138},[128,140222,70003],{"class":54685},[128,140224,54692],{"class":138},[5074,140226],{"style":129760,"src":140227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,140229,140230],{},"value是表单域的内容",[19,140232,140233],{},"例子2：",[106,140235,140236],{"className":130651,"code":140116,"language":130653,"meta":112,"style":112},[114,140237,140238,140258,140284,140310,140328],{"__ignoreMap":112},[128,140239,140240,140242,140244,140246,140248,140250,140252,140254,140256],{"class":130,"line":131},[128,140241,4657],{"class":138},[128,140243,70003],{"class":54685},[128,140245,70006],{"class":199},[128,140247,270],{"class":138},[128,140249,140131],{"class":176},[128,140251,140134],{"class":199},[128,140253,270],{"class":138},[128,140255,140139],{"class":176},[128,140257,54692],{"class":138},[128,140259,140260,140262,140264,140266,140268,140270,140272,140274,140276,140278,140280,140282],{"class":130,"line":142},[128,140261,55526],{"class":138},[128,140263,643],{"class":54685},[128,140265,57205],{"class":199},[128,140267,270],{"class":138},[128,140269,66077],{"class":176},[128,140271,18442],{"class":199},[128,140273,270],{"class":138},[128,140275,140082],{"class":176},[128,140277,64399],{"class":199},[128,140279,270],{"class":138},[128,140281,140166],{"class":176},[128,140283,54692],{"class":138},[128,140285,140286,140288,140290,140292,140294,140296,140298,140300,140302,140304,140306,140308],{"class":130,"line":156},[128,140287,55526],{"class":138},[128,140289,643],{"class":54685},[128,140291,57205],{"class":199},[128,140293,270],{"class":138},[128,140295,140181],{"class":176},[128,140297,18442],{"class":199},[128,140299,270],{"class":138},[128,140301,140188],{"class":176},[128,140303,64399],{"class":199},[128,140305,270],{"class":138},[128,140307,140195],{"class":176},[128,140309,54692],{"class":138},[128,140311,140312,140314,140316,140318,140320,140322,140324,140326],{"class":130,"line":163},[128,140313,55526],{"class":138},[128,140315,57268],{"class":54685},[128,140317,57205],{"class":199},[128,140319,270],{"class":138},[128,140321,70026],{"class":176},[128,140323,140212],{"class":138},[128,140325,57268],{"class":54685},[128,140327,54692],{"class":138},[128,140329,140330,140332,140334],{"class":130,"line":183},[128,140331,55168],{"class":138},[128,140333,70003],{"class":54685},[128,140335,54692],{"class":138},[5074,140337],{"style":129760,"src":140338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,140340,140342],{"id":140341},"_142-css新特性","14.2 CSS新特性",[72,140344,140346],{"id":140345},"_1421-新增选择器","14.2.1 新增选择器",[25485,140348,140350],{"id":140349},"_14211-属性选择器","14.2.1.1 属性选择器",[5074,140352],{"style":129760,"src":140353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[106,140355,140357],{"className":129904,"code":140356,"language":129906,"meta":112,"style":112},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[114,140358,140359,140374,140390],{"__ignoreMap":112},[128,140360,140361,140363,140365,140367,140369,140371],{"class":130,"line":131},[128,140362,643],{"class":54685},[128,140364,4638],{"class":138},[128,140366,106470],{"class":199},[128,140368,270],{"class":134},[128,140370,66077],{"class":176},[128,140372,140373],{"class":138},"] {\n",[128,140375,140376,140378,140380,140382,140384,140386,140388],{"class":130,"line":142},[128,140377,74271],{"class":166},[128,140379,1967],{"class":138},[128,140381,2592],{"class":166},[128,140383,54875],{"class":134},[128,140385,54904],{"class":166},[128,140387,133484],{"class":166},[128,140389,4905],{"class":138},[128,140391,140392],{"class":130,"line":156},[128,140393,2694],{"class":138},[5074,140395],{"style":129760,"src":140396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,140398,3788],{},[4752,140400,140401,140404,140407,140410],{},[29,140402,140403],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[29,140405,140406],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[29,140408,140409],{},"属性选择器也可以选择出来自定义的属性",[29,140411,140412,140414],{},[3903,140413,12571],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[25485,140416,140418],{"id":140417},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[5074,140420],{"style":129760,"src":140421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[26,140423,140424],{},[29,140425,140426],{},"fist-child",[106,140428,140430],{"className":129904,"code":140429,"language":129906,"meta":112,"style":112},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[114,140431,140432,140437,140452,140472,140490],{"__ignoreMap":112},[128,140433,140434],{"class":130,"line":131},[128,140435,140436],{"class":3814},"\u002F* 属性选择器 *\u002F\n",[128,140438,140439,140441,140443,140445,140447,140449],{"class":130,"line":142},[128,140440,643],{"class":54685},[128,140442,4638],{"class":138},[128,140444,106470],{"class":199},[128,140446,270],{"class":134},[128,140448,66077],{"class":176},[128,140450,140451],{"class":138},"] { }\n",[128,140453,140454,140456,140458,140460,140463,140466,140469],{"class":130,"line":156},[128,140455,643],{"class":54685},[128,140457,4638],{"class":138},[128,140459,1901],{"class":199},[128,140461,140462],{"class":134},"^=",[128,140464,140465],{"class":176},"\"icon\"",[128,140467,140468],{"class":138},"] { }  ",[128,140470,140471],{"class":3814},"\u002F* 以 icon 开头 *\u002F\n",[128,140473,140474,140476,140478,140480,140483,140485,140487],{"class":130,"line":163},[128,140475,643],{"class":54685},[128,140477,4638],{"class":138},[128,140479,1901],{"class":199},[128,140481,140482],{"class":134},"$=",[128,140484,140465],{"class":176},[128,140486,140468],{"class":138},[128,140488,140489],{"class":3814},"\u002F* 以 icon 结尾 *\u002F\n",[128,140491,140492,140494,140496,140498,140501,140503,140505],{"class":130,"line":183},[128,140493,643],{"class":54685},[128,140495,4638],{"class":138},[128,140497,1901],{"class":199},[128,140499,140500],{"class":134},"*=",[128,140502,140465],{"class":176},[128,140504,140468],{"class":138},[128,140506,140507],{"class":3814},"\u002F* 包含 icon *\u002F\n",[19,140509,140510],{},"ul的第一个儿子文本为红色",[19,140512,140513],{},"一定要在冒号前加空格，不然就是选中所有的了",[106,140515,140517],{"className":129904,"code":140516,"language":129906,"meta":112,"style":112},".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",[114,140518,140519,140525,140535,140539,140543,140548,140561,140574,140590,140607,140624],{"__ignoreMap":112},[128,140520,140521,140523],{"class":130,"line":131},[128,140522,130195],{"class":199},[128,140524,1959],{"class":138},[128,140526,140527,140529,140531,140533],{"class":130,"line":142},[128,140528,74280],{"class":166},[128,140530,1967],{"class":138},[128,140532,60801],{"class":166},[128,140534,4905],{"class":138},[128,140536,140537],{"class":130,"line":156},[128,140538,2694],{"class":138},[128,140540,140541],{"class":130,"line":163},[128,140542,139365],{"class":138},[128,140544,140545],{"class":130,"line":183},[128,140546,140547],{"class":3814},"\u002F* 结构伪类选择器 *\u002F\n",[128,140549,140550,140552,140555,140558],{"class":130,"line":188},[128,140551,29],{"class":54685},[128,140553,140554],{"class":199},":first-child",[128,140556,140557],{"class":138}," { }           ",[128,140559,140560],{"class":3814},"\u002F* 第一个 *\u002F\n",[128,140562,140563,140565,140568,140571],{"class":130,"line":193},[128,140564,29],{"class":54685},[128,140566,140567],{"class":199},":last-child",[128,140569,140570],{"class":138}," { }            ",[128,140572,140573],{"class":3814},"\u002F* 最后一个 *\u002F\n",[128,140575,140576,140578,140580,140582,140584,140587],{"class":130,"line":206},[128,140577,29],{"class":54685},[128,140579,132818],{"class":199},[128,140581,253],{"class":138},[128,140583,409],{"class":166},[128,140585,140586],{"class":138},") { }          ",[128,140588,140589],{"class":3814},"\u002F* 第2个 *\u002F\n",[128,140591,140592,140594,140596,140598,140601,140604],{"class":130,"line":221},[128,140593,29],{"class":54685},[128,140595,132818],{"class":199},[128,140597,253],{"class":138},[128,140599,140600],{"class":166},"2n",[128,140602,140603],{"class":138},") { }         ",[128,140605,140606],{"class":3814},"\u002F* 偶数 *\u002F\n",[128,140608,140609,140611,140613,140615,140618,140621],{"class":130,"line":230},[128,140610,29],{"class":54685},[128,140612,132818],{"class":199},[128,140614,253],{"class":138},[128,140616,140617],{"class":166},"2n+1",[128,140619,140620],{"class":138},") { }       ",[128,140622,140623],{"class":3814},"\u002F* 奇数 *\u002F\n",[128,140625,140626,140628,140630,140632,140635,140637],{"class":130,"line":235},[128,140627,29],{"class":54685},[128,140629,132818],{"class":199},[128,140631,253],{"class":138},[128,140633,140634],{"class":166},"-n+3",[128,140636,140620],{"class":138},[128,140638,140639],{"class":3814},"\u002F* 前3个 *\u002F\n",[54994,140641,140644],{"className":140642},[140643],"example","\n  示例内容\n",[19,140646,140647],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[4752,140649,140650],{},[29,140651,140652,140655],{},[114,140653,140654],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,140657,140658],{},"也就是说它选择的是熊大",[26,140660,140661],{"start":188},[29,140662,140663],{},"权重",[106,140665,140667],{"className":129904,"code":140666,"language":129906,"meta":112,"style":112},"\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",[114,140668,140669,140673,140683,140693,140707,140721,140735],{"__ignoreMap":112},[128,140670,140671],{"class":130,"line":131},[128,140672,140547],{"class":3814},[128,140674,140675,140677,140679,140681],{"class":130,"line":142},[128,140676,29],{"class":54685},[128,140678,140554],{"class":199},[128,140680,140557],{"class":138},[128,140682,140560],{"class":3814},[128,140684,140685,140687,140689,140691],{"class":130,"line":156},[128,140686,29],{"class":54685},[128,140688,140567],{"class":199},[128,140690,140570],{"class":138},[128,140692,140573],{"class":3814},[128,140694,140695,140697,140699,140701,140703,140705],{"class":130,"line":163},[128,140696,29],{"class":54685},[128,140698,132818],{"class":199},[128,140700,253],{"class":138},[128,140702,409],{"class":166},[128,140704,140586],{"class":138},[128,140706,140589],{"class":3814},[128,140708,140709,140711,140713,140715,140717,140719],{"class":130,"line":183},[128,140710,29],{"class":54685},[128,140712,132818],{"class":199},[128,140714,253],{"class":138},[128,140716,140600],{"class":166},[128,140718,140603],{"class":138},[128,140720,140606],{"class":3814},[128,140722,140723,140725,140727,140729,140731,140733],{"class":130,"line":188},[128,140724,29],{"class":54685},[128,140726,132818],{"class":199},[128,140728,253],{"class":138},[128,140730,140617],{"class":166},[128,140732,140620],{"class":138},[128,140734,140623],{"class":3814},[128,140736,140737,140739,140741,140743,140745,140747],{"class":130,"line":193},[128,140738,29],{"class":54685},[128,140740,132818],{"class":199},[128,140742,253],{"class":138},[128,140744,140634],{"class":166},[128,140746,140620],{"class":138},[128,140748,140639],{"class":3814},[19,140750,140751],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[25485,140753,140755],{"id":140754},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,140757,140758],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[5074,140760],{"style":129760,"src":140761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[26,140763,140764],{},[29,140765,3788],{},[4752,140767,140768,140771,140774,140777,140780,140783],{},[29,140769,140770],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[29,140772,140773],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[29,140775,140776],{},"语法： element::before {}",[29,140778,140779],{},"before 和 after 必须有 content 属性",[29,140781,140782],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[29,140784,140785],{},"伪元素选择器和标签选择器一样，权重为 1",[26,140787,140788],{"start":142},[29,140789,140790],{},"实例",[106,140792,140793],{"className":129904,"code":140666,"language":129906,"meta":112,"style":112},[114,140794,140795,140799,140809,140819,140833,140847,140861],{"__ignoreMap":112},[128,140796,140797],{"class":130,"line":131},[128,140798,140547],{"class":3814},[128,140800,140801,140803,140805,140807],{"class":130,"line":142},[128,140802,29],{"class":54685},[128,140804,140554],{"class":199},[128,140806,140557],{"class":138},[128,140808,140560],{"class":3814},[128,140810,140811,140813,140815,140817],{"class":130,"line":156},[128,140812,29],{"class":54685},[128,140814,140567],{"class":199},[128,140816,140570],{"class":138},[128,140818,140573],{"class":3814},[128,140820,140821,140823,140825,140827,140829,140831],{"class":130,"line":163},[128,140822,29],{"class":54685},[128,140824,132818],{"class":199},[128,140826,253],{"class":138},[128,140828,409],{"class":166},[128,140830,140586],{"class":138},[128,140832,140589],{"class":3814},[128,140834,140835,140837,140839,140841,140843,140845],{"class":130,"line":183},[128,140836,29],{"class":54685},[128,140838,132818],{"class":199},[128,140840,253],{"class":138},[128,140842,140600],{"class":166},[128,140844,140603],{"class":138},[128,140846,140606],{"class":3814},[128,140848,140849,140851,140853,140855,140857,140859],{"class":130,"line":188},[128,140850,29],{"class":54685},[128,140852,132818],{"class":199},[128,140854,253],{"class":138},[128,140856,140617],{"class":166},[128,140858,140620],{"class":138},[128,140860,140623],{"class":3814},[128,140862,140863,140865,140867,140869,140871,140873],{"class":130,"line":193},[128,140864,29],{"class":54685},[128,140866,132818],{"class":199},[128,140868,253],{"class":138},[128,140870,140634],{"class":166},[128,140872,140620],{"class":138},[128,140874,140639],{"class":3814},[5074,140876],{"style":129760,"src":140877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[26,140879,140880],{"start":156},[29,140881,140882],{},"使用场景1",[5074,140884],{"style":129760,"src":140885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,140887,140888],{},"不需要再加盒子来整红色那部分了",[106,140890,140892],{"className":129904,"code":140891,"language":129906,"meta":112,"style":112},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[114,140893,140894,140899,140908,140919,140929,140933,140942,140953,140963],{"__ignoreMap":112},[128,140895,140896],{"class":130,"line":131},[128,140897,140898],{"class":3814},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[128,140900,140901,140903,140906],{"class":130,"line":142},[128,140902,54994],{"class":54685},[128,140904,140905],{"class":199},"::before",[128,140907,1959],{"class":138},[128,140909,140910,140913,140915,140917],{"class":130,"line":156},[128,140911,140912],{"class":166},"  content",[128,140914,1967],{"class":138},[128,140916,11209],{"class":176},[128,140918,4905],{"class":138},[128,140920,140921,140923,140925,140927],{"class":130,"line":163},[128,140922,131520],{"class":166},[128,140924,1967],{"class":138},[128,140926,64248],{"class":166},[128,140928,4905],{"class":138},[128,140930,140931],{"class":130,"line":183},[128,140932,2694],{"class":138},[128,140934,140935,140937,140940],{"class":130,"line":188},[128,140936,54994],{"class":54685},[128,140938,140939],{"class":199},"::after",[128,140941,1959],{"class":138},[128,140943,140944,140946,140948,140951],{"class":130,"line":193},[128,140945,140912],{"class":166},[128,140947,1967],{"class":138},[128,140949,140950],{"class":176},"\"→\"",[128,140952,4905],{"class":138},[128,140954,140955,140957,140959,140961],{"class":130,"line":206},[128,140956,74280],{"class":166},[128,140958,1967],{"class":138},[128,140960,65449],{"class":166},[128,140962,4905],{"class":138},[128,140964,140965],{"class":130,"line":221},[128,140966,2694],{"class":138},[5074,140968],{"style":129760,"src":140969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,140971,140972],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[5074,140974],{"style":129760,"src":140975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,140977,140978],{},"但是在引用时需要先转义一下",[19,140980,140981],{},"content='\\e930'",[26,140983,140984],{"start":163},[29,140985,140986],{},"使用场景2",[19,140988,140989],{},"仿土豆效果",[19,140991,140992],{},"通过使用伪元素选择器可以减少body中盒子的数量",[106,140994,140995],{"className":129904,"code":140891,"language":129906,"meta":112,"style":112},[114,140996,140997,141001,141009,141019,141029,141033,141041,141051,141061],{"__ignoreMap":112},[128,140998,140999],{"class":130,"line":131},[128,141000,140898],{"class":3814},[128,141002,141003,141005,141007],{"class":130,"line":142},[128,141004,54994],{"class":54685},[128,141006,140905],{"class":199},[128,141008,1959],{"class":138},[128,141010,141011,141013,141015,141017],{"class":130,"line":156},[128,141012,140912],{"class":166},[128,141014,1967],{"class":138},[128,141016,11209],{"class":176},[128,141018,4905],{"class":138},[128,141020,141021,141023,141025,141027],{"class":130,"line":163},[128,141022,131520],{"class":166},[128,141024,1967],{"class":138},[128,141026,64248],{"class":166},[128,141028,4905],{"class":138},[128,141030,141031],{"class":130,"line":183},[128,141032,2694],{"class":138},[128,141034,141035,141037,141039],{"class":130,"line":188},[128,141036,54994],{"class":54685},[128,141038,140939],{"class":199},[128,141040,1959],{"class":138},[128,141042,141043,141045,141047,141049],{"class":130,"line":193},[128,141044,140912],{"class":166},[128,141046,1967],{"class":138},[128,141048,140950],{"class":176},[128,141050,4905],{"class":138},[128,141052,141053,141055,141057,141059],{"class":130,"line":206},[128,141054,74280],{"class":166},[128,141056,1967],{"class":138},[128,141058,65449],{"class":166},[128,141060,4905],{"class":138},[128,141062,141063],{"class":130,"line":221},[128,141064,2694],{"class":138},[5074,141066],{"style":129760,"src":141067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[26,141069,141070],{"start":183},[29,141071,141072],{},"使用场景3",[19,141074,141075],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[106,141077,141079],{"className":129904,"code":141078,"language":129906,"meta":112,"style":112},".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",[114,141080,141081,141087,141097,141101,141105,141109,141117,141127,141137,141141,141149,141159,141169],{"__ignoreMap":112},[128,141082,141083,141085],{"class":130,"line":131},[128,141084,133752],{"class":199},[128,141086,1959],{"class":138},[128,141088,141089,141091,141093,141095],{"class":130,"line":142},[128,141090,134384],{"class":166},[128,141092,1967],{"class":138},[128,141094,27223],{"class":166},[128,141096,4905],{"class":138},[128,141098,141099],{"class":130,"line":156},[128,141100,2694],{"class":138},[128,141102,141103],{"class":130,"line":163},[128,141104,139365],{"class":138},[128,141106,141107],{"class":130,"line":183},[128,141108,140898],{"class":3814},[128,141110,141111,141113,141115],{"class":130,"line":188},[128,141112,54994],{"class":54685},[128,141114,140905],{"class":199},[128,141116,1959],{"class":138},[128,141118,141119,141121,141123,141125],{"class":130,"line":193},[128,141120,140912],{"class":166},[128,141122,1967],{"class":138},[128,141124,11209],{"class":176},[128,141126,4905],{"class":138},[128,141128,141129,141131,141133,141135],{"class":130,"line":206},[128,141130,131520],{"class":166},[128,141132,1967],{"class":138},[128,141134,64248],{"class":166},[128,141136,4905],{"class":138},[128,141138,141139],{"class":130,"line":221},[128,141140,2694],{"class":138},[128,141142,141143,141145,141147],{"class":130,"line":230},[128,141144,54994],{"class":54685},[128,141146,140939],{"class":199},[128,141148,1959],{"class":138},[128,141150,141151,141153,141155,141157],{"class":130,"line":235},[128,141152,140912],{"class":166},[128,141154,1967],{"class":138},[128,141156,140950],{"class":176},[128,141158,4905],{"class":138},[128,141160,141161,141163,141165,141167],{"class":130,"line":244},[128,141162,74280],{"class":166},[128,141164,1967],{"class":138},[128,141166,65449],{"class":166},[128,141168,4905],{"class":138},[128,141170,141171],{"class":130,"line":287},[128,141172,2694],{"class":138},[19,141174,141175],{},"div {\nmargin: 0 auto;\n}",[106,141177,141180],{"className":141178,"code":141179,"language":111},[109],"\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",[114,141181,141179],{"__ignoreMap":112},[19,141183,141184],{},"如果想让多个元素都发生变化",[19,141186,141187],{},"不能如下操作：",[19,141189,141190],{},"transition: width 2s ease 0.5s;",[19,141192,141193],{},"transition: height 2s ease 0.5s;不对！！！",[19,141195,141196],{},"上方会样式冲突，导致不显示任何过渡效果",[19,141198,141199],{},"使用如下：加逗号隔开",[19,141201,141202],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,141204,141205],{},"transition all 2s ease;",[72,141207,141209],{"id":141208},"_1426-过渡练习","14.2.6 过渡练习",[26,141211,141212],{},[29,141213,141214],{},"进度条",[5074,141216],{"style":129760,"src":141217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[106,141219,141221],{"className":129904,"code":141220,"language":129906,"meta":112,"style":112},"div {\n  transition: all 0.3s ease;\n}\n",[114,141222,141223,141229,141247],{"__ignoreMap":112},[128,141224,141225,141227],{"class":130,"line":131},[128,141226,54994],{"class":54685},[128,141228,1959],{"class":138},[128,141230,141231,141234,141236,141238,141241,141243,141245],{"class":130,"line":142},[128,141232,141233],{"class":166},"  transition",[128,141235,1967],{"class":138},[128,141237,31606],{"class":166},[128,141239,141240],{"class":166}," 0.3",[128,141242,4444],{"class":134},[128,141244,82054],{"class":166},[128,141246,4905],{"class":138},[128,141248,141249],{"class":130,"line":156},[128,141250,2694],{"class":138},[26,141252,141253],{"start":142},[29,141254,141255],{},"小米logo",[19,141257,141258],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[106,141260,141262],{"className":129904,"code":141261,"language":129906,"meta":112,"style":112},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[114,141263,141264,141269,141275,141291,141296],{"__ignoreMap":112},[128,141265,141266],{"class":130,"line":131},[128,141267,141268],{"class":3814},"\u002F* CSS3 过渡 *\u002F\n",[128,141270,141271,141273],{"class":130,"line":142},[128,141272,54994],{"class":54685},[128,141274,1959],{"class":138},[128,141276,141277,141279,141281,141283,141285,141287,141289],{"class":130,"line":156},[128,141278,141233],{"class":166},[128,141280,1967],{"class":138},[128,141282,31606],{"class":166},[128,141284,141240],{"class":166},[128,141286,4444],{"class":134},[128,141288,82054],{"class":166},[128,141290,4905],{"class":138},[128,141292,141293],{"class":130,"line":163},[128,141294,141295],{"class":3814},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[128,141297,141298],{"class":130,"line":183},[128,141299,2694],{"class":138},[19,141301,141302],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[3659,141304,141305],{},"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":112,"searchDepth":142,"depth":142,"links":141307},[141308,141313],{"id":139638,"depth":142,"text":139639,"children":141309},[141310,141311,141312],{"id":139642,"depth":156,"text":139643},{"id":139719,"depth":156,"text":139720},{"id":140050,"depth":156,"text":140051},{"id":140341,"depth":142,"text":140342,"children":141314},[141315,141316],{"id":140345,"depth":156,"text":140346},{"id":141208,"depth":156,"text":141209},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":139630,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":141323,"title":141324,"body":141325,"description":3686,"extension":3687,"meta":143069,"navigation":159,"path":143070,"seo":143071,"stem":143072,"__hash__":143073},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":141326,"toc":143050},[141327,141330,141334,141337,141343,141349,141353,141355,141358,141361,141364,141367,141370,141373,141376,141380,141384,141387,141390,141393,141397,141400,141403,141408,141411,141414,141417,141421,141424,141433,141436,141439,141443,141446,141449,141454,141461,141475,141483,141490,141495,141498,141501,141504,141511,141515,141521,141527,141530,141533,141538,141544,141546,141554,141559,141562,141568,141570,141575,141580,141583,141585,141590,141593,141598,141603,141637,141641,141645,141648,141652,141655,141741,141744,141781,141784,141820,141824,141829,141842,141896,141898,141926,141928,141956,141962,141976,141978,142022,142024,142068,142071,142078,142089,142091,142118,142120,142146,142153,142169,142171,142265,142267,142361,142368,142371,142376,142382,142456,142459,142461,142497,142499,142535,142538,142545,142564,142567,142570,142572,142597,142599,142623,142626,142629,142659,142663,142666,142729,142731,142797,142799,142863,142866,142898,142900,142926,142928,142954,142957,142988,142990,143016,143018,143044,143047],[10,141328,141324],{"id":141329},"_15-品优购项目上篇-搭建与公共模块",[14,141331,141333],{"id":141332},"_151-项目规划","15.1 项目规划",[5074,141335],{"style":129760,"src":141336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,141338,141339,141342],{},[3903,141340,141341],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,141344,141345,141348],{},[3903,141346,141347],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,141350,141352],{"id":141351},"_152-项目介绍","15.2 项目介绍",[19,141354,141341],{},[5074,141356],{"style":129760,"src":141357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,141359,141360],{},"主页：",[5074,141362],{"style":129760,"src":141363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,141365,141366],{},"列表页：",[5074,141368],{"style":129760,"src":141369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,141371,141372],{},"注册页：",[5074,141374],{"style":129760,"src":141375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,141377,141379],{"id":141378},"_153-项目搭建工作","15.3 项目搭建工作",[72,141381,141383],{"id":141382},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[5074,141385],{"style":129760,"src":141386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,141388,141389],{},"经常更换的图片要放到upload文件夹中",[19,141391,141392],{},"不经常换的放到images文件夹中",[72,141394,141396],{"id":141395},"_1532-创建文件如下","15.3.2 创建文件如下",[5074,141398],{"style":129760,"src":141399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[5074,141401],{"style":129760,"src":141402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,141404,141405],{},[3903,141406,141407],{},"初始化样式：",[19,141409,141410],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,141412,141413],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,141415,141416],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[72,141418,141420],{"id":141419},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,141422,141423],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,141425,141426,141427,141432],{},"这里最典型的应用就是 ",[3903,141428,141429],{},[114,141430,141431],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[5074,141434],{"style":129760,"src":141435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,141437,141438],{},"通过link方法来引入",[72,141440,141442],{"id":141441},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[5074,141444],{"style":129760,"src":141445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,141447,141448],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[26,141450,141451],{},[29,141452,141453],{},"制作favicon图标",[19,141455,141456,141457,141460],{},"①把品优购图标切成 ",[114,141458,141459],{},"png"," 图片",[19,141462,141463,141464,141466,141467,141470,141471],{},"②把 ",[114,141465,141459],{}," 图片转换为 ",[114,141468,141469],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[3989,141472,141473],{"href":141473,"rel":141474},"http:\u002F\u002Fwww.bitbug.net\u002F",[27352],[26,141476,141477,141480],{"start":142},[29,141478,141479],{},"favicon图标放到网站根目录下",[29,141481,141482],{},"HTML页面引入favicon",[19,141484,141485,141486,141489],{},"在html 页面里面的 ",[114,141487,141488],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,141491,141492],{},[114,141493,141494],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,141496,141497],{},"复制这行代码或者在生成这个的网站进行复制",[5074,141499],{"style":129760,"src":141500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,141502,141503],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,141505,141506,141507],{},"例如:",[3989,141508,141509],{"href":141509,"rel":141510},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[27352],[72,141512,141514],{"id":141513},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,141516,141517,141520],{},[3903,141518,141519],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,141522,141523,141526],{},[3903,141524,141525],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,141528,141529],{},"页面必须有三个标签用来符合 SEO 优化",[5074,141531],{"style":129760,"src":141532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[26,141534,141535],{},[29,141536,141537],{},"title网站标题",[19,141539,141540,141543],{},[3903,141541,141542],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,141545,72168],{},[4752,141547,141548,141551],{},[29,141549,141550],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[29,141552,141553],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[26,141555,141556],{"start":142},[29,141557,141558],{},"description网站描述",[19,141560,141561],{},"简要说明我们网站主要是做什么的",[19,141563,141564,141567],{},[3903,141565,141566],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,141569,72168],{},[19,141571,141572],{},[114,141573,141574],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[26,141576,141577],{"start":156},[29,141578,141579],{},"keywords关键词",[19,141581,141582],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,141584,72168],{},[19,141586,141587],{},[114,141588,141589],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,141591,141592],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,141594,141595],{},[3903,141596,141597],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[26,141599,141600],{"start":163},[29,141601,141602],{},"代码总结",[106,141604,141605],{"className":130651,"code":134008,"language":130653,"meta":112,"style":112},[114,141606,141607,141611,141625,141629],{"__ignoreMap":112},[128,141608,141609],{"class":130,"line":131},[128,141610,134015],{"class":3814},[128,141612,141613,141615,141617,141619,141621,141623],{"class":130,"line":142},[128,141614,4657],{"class":138},[128,141616,54994],{"class":54685},[128,141618,56868],{"class":199},[128,141620,270],{"class":138},[128,141622,134028],{"class":176},[128,141624,54692],{"class":138},[128,141626,141627],{"class":130,"line":156},[128,141628,134035],{"class":138},[128,141630,141631,141633,141635],{"class":130,"line":163},[128,141632,55168],{"class":138},[128,141634,54994],{"class":54685},[128,141636,54692],{"class":138},[14,141638,141640],{"id":141639},"_154-项目公共部分制作","15.4 项目公共部分制作",[72,141642,141644],{"id":141643},"_1541-常用模块类命名","15.4.1 常用模块类命名",[5074,141646],{"style":129760,"src":141647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[72,141649,141651],{"id":141650},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,141653,141654],{},"布局思路：",[4752,141656,141657,141660,141663,141685,141718],{},[29,141658,141659],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[29,141661,141662],{},"里面包含版心的盒子",[29,141664,141665,141666],{},"版心盒子里面包含 1 号左侧盒子左浮动",[4752,141667,141668,141676,141682],{},[29,141669,141670,141671,24987,141673,141675],{},"1 号盒子 里面包含一个",[114,141672,4752],{},[114,141674,4752],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[29,141677,141678,141679,141681],{},"里面的内容是水平排列，所以需要给",[114,141680,29],{},"设置浮动",[29,141683,141684],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[29,141686,141687,141688],{},"版心盒子里面包含 2 号右侧盒子右浮动",[4752,141689,141690,141704,141709],{},[29,141691,141692,141693,24987,141695,141697,141698,141700,141701,141703],{},"2 号盒子 里面包含一个",[114,141694,4752],{},[114,141696,4752],{},"包裹",[114,141699,29],{},"，中间的",[114,141702,4668],{},"可以用样式去设置，也可以用字符 |",[29,141705,141706,141707,141681],{},"里面内容水平排列，给",[114,141708,29],{},[29,141710,141711,141712,141714,141715,141717],{},"找到里面所有偶数的 ",[114,141713,29],{}," 设置样式（偶数的 ",[114,141716,29],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[29,141719,141720,141721],{},"需要用到字体图标",[4752,141722,141723,141729,141732,141735,141738],{},[29,141724,141725,141726],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[114,141727,141728],{},"arrow-icon",[29,141730,141731],{},"先要引入字体图片的资源",[29,141733,141734],{},"在样式里面利用 font-face 来进行声明",[29,141736,141737],{},"在伪元素的 content属性设置 图标的编码",[29,141739,141740],{},"给伪元素设置font-family属性",[19,141742,141743],{},"结构实例代码：",[106,141745,141747],{"className":129904,"code":141746,"language":129906,"meta":112,"style":112},"div::before {\n  content: \"\";\n  display: block;\n}\n",[114,141748,141749,141757,141767,141777],{"__ignoreMap":112},[128,141750,141751,141753,141755],{"class":130,"line":131},[128,141752,54994],{"class":54685},[128,141754,140905],{"class":199},[128,141756,1959],{"class":138},[128,141758,141759,141761,141763,141765],{"class":130,"line":142},[128,141760,140912],{"class":166},[128,141762,1967],{"class":138},[128,141764,11209],{"class":176},[128,141766,4905],{"class":138},[128,141768,141769,141771,141773,141775],{"class":130,"line":156},[128,141770,131520],{"class":166},[128,141772,1967],{"class":138},[128,141774,64248],{"class":166},[128,141776,4905],{"class":138},[128,141778,141779],{"class":130,"line":163},[128,141780,2694],{"class":138},[19,141782,141783],{},"样式实例代码：",[106,141785,141786],{"className":129904,"code":141746,"language":129906,"meta":112,"style":112},[114,141787,141788,141796,141806,141816],{"__ignoreMap":112},[128,141789,141790,141792,141794],{"class":130,"line":131},[128,141791,54994],{"class":54685},[128,141793,140905],{"class":199},[128,141795,1959],{"class":138},[128,141797,141798,141800,141802,141804],{"class":130,"line":142},[128,141799,140912],{"class":166},[128,141801,1967],{"class":138},[128,141803,11209],{"class":176},[128,141805,4905],{"class":138},[128,141807,141808,141810,141812,141814],{"class":130,"line":156},[128,141809,131520],{"class":166},[128,141811,1967],{"class":138},[128,141813,64248],{"class":166},[128,141815,4905],{"class":138},[128,141817,141818],{"class":130,"line":163},[128,141819,2694],{"class":138},[72,141821,141823],{"id":141822},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[4752,141825,141826],{},[29,141827,141828],{},"header 盒子必须要有高度",[19,141830,141831,141832,141834,141835],{},"1 号盒子是 ",[114,141833,134916],{}," 标志定位，在正常开发过程中， ",[3903,141836,141837,141838,141841],{},"logo的布局其实是有讲究的，需要进行 ",[114,141839,141840],{},"logoSEO","的优化 （★★★）",[4752,141843,141844,141852,141860,141887],{},[29,141845,141846,141848,141849,141851],{},[114,141847,134916],{}," 里面首先放一个 ",[114,141850,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[29,141853,141854,141856,141857,141859],{},[114,141855,10],{}," 里面再放一个链接，可以返回首页的，把 ",[114,141858,134916],{}," 的背景图片给链接即可",[29,141861,141862,141863],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[4752,141864,141865,141880],{},[29,141866,141867,141868,141871,141872,141875,141876,141879],{},"方法1：",[114,141869,141870],{},"text-indent"," 移到盒子外面（",[114,141873,141874],{},"text-indent: -9999px",") ，然后 ",[114,141877,141878],{},"overflow:hidden"," ，淘宝的做法",[29,141881,141882,141883,141886],{},"方法2：直接给 ",[114,141884,141885],{},"font-size: 0;"," 就看不到文字了，京东的做法",[29,141888,141889,141890,141892,141893,141895],{},"最后给链接一个 ",[114,141891,2752],{}," 属性，这样鼠标放到 ",[114,141894,134916],{}," 上就可以看到提示文字了",[19,141897,141743],{},[106,141899,141900],{"className":130651,"code":135137,"language":130653,"meta":112,"style":112},[114,141901,141902],{"__ignoreMap":112},[128,141903,141904,141906,141908,141910,141912,141914,141916,141918,141920,141922,141924],{"class":130,"line":131},[128,141905,4657],{"class":138},[128,141907,3989],{"class":54685},[128,141909,64436],{"class":199},[128,141911,270],{"class":138},[128,141913,135152],{"class":176},[128,141915,135155],{"class":199},[128,141917,270],{"class":138},[128,141919,135160],{"class":176},[128,141921,135163],{"class":138},[128,141923,3989],{"class":54685},[128,141925,54692],{"class":138},[19,141927,141783],{},[106,141929,141930],{"className":130651,"code":135137,"language":130653,"meta":112,"style":112},[114,141931,141932],{"__ignoreMap":112},[128,141933,141934,141936,141938,141940,141942,141944,141946,141948,141950,141952,141954],{"class":130,"line":131},[128,141935,4657],{"class":138},[128,141937,3989],{"class":54685},[128,141939,64436],{"class":199},[128,141941,270],{"class":138},[128,141943,135152],{"class":176},[128,141945,135155],{"class":199},[128,141947,270],{"class":138},[128,141949,135160],{"class":176},[128,141951,135163],{"class":138},[128,141953,3989],{"class":54685},[128,141955,54692],{"class":138},[19,141957,141958,141959,141961],{},"2 号盒子是 ",[114,141960,134929],{}," 搜索模块定位",[4752,141963,141964,141967,141970,141973],{},[29,141965,141966],{},"search盒子利用定位的方式放在对应的位置",[29,141968,141969],{},"search盒子设置绝对定位，header盒子设置相对定位",[29,141971,141972],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[29,141974,141975],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,141977,141743],{},[106,141979,141980],{"className":129904,"code":135224,"language":129906,"meta":112,"style":112},[114,141981,141982,142004,142008,142018],{"__ignoreMap":112},[128,141983,141984,141986,141988,141990,141992,141994,141996,141998,142000,142002],{"class":130,"line":131},[128,141985,54994],{"class":54685},[128,141987,258],{"class":138},[128,141989,19],{"class":54685},[128,141991,258],{"class":138},[128,141993,10],{"class":54685},[128,141995,258],{"class":138},[128,141997,4752],{"class":54685},[128,141999,258],{"class":138},[128,142001,29],{"class":54685},[128,142003,1959],{"class":138},[128,142005,142006],{"class":130,"line":142},[128,142007,135253],{"class":3814},[128,142009,142010,142012,142014,142016],{"class":130,"line":156},[128,142011,131520],{"class":166},[128,142013,1967],{"class":138},[128,142015,64248],{"class":166},[128,142017,4905],{"class":138},[128,142019,142020],{"class":130,"line":163},[128,142021,2694],{"class":138},[19,142023,141783],{},[106,142025,142026],{"className":129904,"code":135224,"language":129906,"meta":112,"style":112},[114,142027,142028,142050,142054,142064],{"__ignoreMap":112},[128,142029,142030,142032,142034,142036,142038,142040,142042,142044,142046,142048],{"class":130,"line":131},[128,142031,54994],{"class":54685},[128,142033,258],{"class":138},[128,142035,19],{"class":54685},[128,142037,258],{"class":138},[128,142039,10],{"class":54685},[128,142041,258],{"class":138},[128,142043,4752],{"class":54685},[128,142045,258],{"class":138},[128,142047,29],{"class":54685},[128,142049,1959],{"class":138},[128,142051,142052],{"class":130,"line":142},[128,142053,135253],{"class":3814},[128,142055,142056,142058,142060,142062],{"class":130,"line":156},[128,142057,131520],{"class":166},[128,142059,1967],{"class":138},[128,142061,64248],{"class":166},[128,142063,4905],{"class":138},[128,142065,142066],{"class":130,"line":163},[128,142067,2694],{"class":138},[19,142069,142070],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,142072,142073,142074,142077],{},"3 号盒子是 ",[114,142075,142076],{},"hotwords"," 热词模块定位",[4752,142079,142080,142083,142086],{},[29,142081,142082],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[29,142084,142085],{},"给里面所有的a标签设置 左右10px的外边距",[29,142087,142088],{},"给第一个a标签设置文字变红色（#c81623）",[19,142090,141743],{},[106,142092,142094],{"className":129904,"code":142093,"language":129906,"meta":112,"style":112},"div {\n  margin: 0 auto;\n}\n",[114,142095,142096,142102,142114],{"__ignoreMap":112},[128,142097,142098,142100],{"class":130,"line":131},[128,142099,54994],{"class":54685},[128,142101,1959],{"class":138},[128,142103,142104,142106,142108,142110,142112],{"class":130,"line":142},[128,142105,73845],{"class":166},[128,142107,1967],{"class":138},[128,142109,2452],{"class":166},[128,142111,54939],{"class":166},[128,142113,4905],{"class":138},[128,142115,142116],{"class":130,"line":156},[128,142117,2694],{"class":138},[19,142119,141783],{},[106,142121,142122],{"className":129904,"code":142093,"language":129906,"meta":112,"style":112},[114,142123,142124,142130,142142],{"__ignoreMap":112},[128,142125,142126,142128],{"class":130,"line":131},[128,142127,54994],{"class":54685},[128,142129,1959],{"class":138},[128,142131,142132,142134,142136,142138,142140],{"class":130,"line":142},[128,142133,73845],{"class":166},[128,142135,1967],{"class":138},[128,142137,2452],{"class":166},[128,142139,54939],{"class":166},[128,142141,4905],{"class":138},[128,142143,142144],{"class":130,"line":156},[128,142145,2694],{"class":138},[19,142147,142148,142149,142152],{},"4 号盒子是 ",[114,142150,142151],{},"shopcar"," 购物车模块",[4752,142154,142155,142160,142163,142166],{},[29,142156,126691,142157,142159],{},[114,142158,142151],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[29,142161,142162],{},"count 统计部分用绝对定位做",[29,142164,142165],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[29,142167,142168],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,142170,141743],{},[106,142172,142173],{"className":129904,"code":135336,"language":129906,"meta":112,"style":112},[114,142174,142175,142179,142193,142197,142211,142215,142229,142233,142247,142251],{"__ignoreMap":112},[128,142176,142177],{"class":130,"line":131},[128,142178,135343],{"class":3814},[128,142180,142181,142183,142185,142187,142189,142191],{"class":130,"line":142},[128,142182,135348],{"class":199},[128,142184,83181],{"class":138},[128,142186,132264],{"class":166},[128,142188,1967],{"class":138},[128,142190,135357],{"class":166},[128,142192,132834],{"class":138},[128,142194,142195],{"class":130,"line":156},[128,142196,135364],{"class":3814},[128,142198,142199,142201,142203,142205,142207,142209],{"class":130,"line":163},[128,142200,135369],{"class":199},[128,142202,83181],{"class":138},[128,142204,132264],{"class":166},[128,142206,1967],{"class":138},[128,142208,58145],{"class":166},[128,142210,132834],{"class":138},[128,142212,142213],{"class":130,"line":183},[128,142214,135384],{"class":3814},[128,142216,142217,142219,142221,142223,142225,142227],{"class":130,"line":188},[128,142218,135389],{"class":199},[128,142220,83181],{"class":138},[128,142222,132264],{"class":166},[128,142224,1967],{"class":138},[128,142226,58212],{"class":166},[128,142228,132834],{"class":138},[128,142230,142231],{"class":130,"line":193},[128,142232,135404],{"class":3814},[128,142234,142235,142237,142239,142241,142243,142245],{"class":130,"line":206},[128,142236,135409],{"class":199},[128,142238,83181],{"class":138},[128,142240,132264],{"class":166},[128,142242,1967],{"class":138},[128,142244,89605],{"class":166},[128,142246,132834],{"class":138},[128,142248,142249],{"class":130,"line":221},[128,142250,135424],{"class":3814},[128,142252,142253,142255,142257,142259,142261,142263],{"class":130,"line":230},[128,142254,135429],{"class":199},[128,142256,83181],{"class":138},[128,142258,132264],{"class":166},[128,142260,1967],{"class":138},[128,142262,135438],{"class":166},[128,142264,132834],{"class":138},[19,142266,141783],{},[106,142268,142269],{"className":129904,"code":135336,"language":129906,"meta":112,"style":112},[114,142270,142271,142275,142289,142293,142307,142311,142325,142329,142343,142347],{"__ignoreMap":112},[128,142272,142273],{"class":130,"line":131},[128,142274,135343],{"class":3814},[128,142276,142277,142279,142281,142283,142285,142287],{"class":130,"line":142},[128,142278,135348],{"class":199},[128,142280,83181],{"class":138},[128,142282,132264],{"class":166},[128,142284,1967],{"class":138},[128,142286,135357],{"class":166},[128,142288,132834],{"class":138},[128,142290,142291],{"class":130,"line":156},[128,142292,135364],{"class":3814},[128,142294,142295,142297,142299,142301,142303,142305],{"class":130,"line":163},[128,142296,135369],{"class":199},[128,142298,83181],{"class":138},[128,142300,132264],{"class":166},[128,142302,1967],{"class":138},[128,142304,58145],{"class":166},[128,142306,132834],{"class":138},[128,142308,142309],{"class":130,"line":183},[128,142310,135384],{"class":3814},[128,142312,142313,142315,142317,142319,142321,142323],{"class":130,"line":188},[128,142314,135389],{"class":199},[128,142316,83181],{"class":138},[128,142318,132264],{"class":166},[128,142320,1967],{"class":138},[128,142322,58212],{"class":166},[128,142324,132834],{"class":138},[128,142326,142327],{"class":130,"line":193},[128,142328,135404],{"class":3814},[128,142330,142331,142333,142335,142337,142339,142341],{"class":130,"line":206},[128,142332,135409],{"class":199},[128,142334,83181],{"class":138},[128,142336,132264],{"class":166},[128,142338,1967],{"class":138},[128,142340,89605],{"class":166},[128,142342,132834],{"class":138},[128,142344,142345],{"class":130,"line":221},[128,142346,135424],{"class":3814},[128,142348,142349,142351,142353,142355,142357,142359],{"class":130,"line":230},[128,142350,135429],{"class":199},[128,142352,83181],{"class":138},[128,142354,132264],{"class":166},[128,142356,1967],{"class":138},[128,142358,135438],{"class":166},[128,142360,132834],{"class":138},[72,142362,142364,142365,142367],{"id":142363},"_1544-nav导航模块制作","15.4.4 ",[114,142366,57095],{},"导航模块制作",[5074,142369],{"style":129760,"src":142370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,142372,142373,142375],{},[114,142374,57095],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,142377,142378,142379],{},"1 号盒子左侧浮动，",[114,142380,142381],{},"dropdown",[4752,142383,142384,142394,142402,142408,142416,142426,142434,142445],{},[29,142385,142386,142387,3330,142390,142393],{},"1号盒子有讲究，根据相关性 里面包含 ",[114,142388,142389],{},".dt",[114,142391,142392],{},".dd"," 两个盒子",[29,142395,142396,142398,142399,142401],{},[114,142397,142389],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[114,142400,142392],{}," 挤到下面去了",[29,142403,142404,142405,142407],{},"给 ",[114,142406,142392],{}," 盒子设置宽度 和 高度，以及背景颜色",[29,142409,142404,142410,142412,142413,123593],{},[114,142411,142392],{}," 盒子里面定义 无序列表 （",[114,142414,142415],{},"ul > li > a",[29,142417,142418,142419,142421,142422,142425],{},"每个 ",[114,142420,29],{}," 都有一个高度（",[114,142423,142424],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[29,142427,142404,142428,142430,142431,123593],{},[114,142429,29],{}," 里面的a设置文字大小（",[114,142432,142433],{},"14px",[29,142435,142404,142436,142438,142439,142441,142442,142444],{},[114,142437,29],{}," 设置 ",[114,142440,131065],{},"，当鼠标移入的时候，让",[114,142443,29],{},"的背景变成白色，让里面的文字变成红色",[29,142446,142447,142449,142450,142452,142453,142455],{},[114,142448,29],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[114,142451,29],{},"的右侧，那么给",[114,142454,29],{},"设置相对定位",[19,142457,142458],{},"一定要注意相关性",[19,142460,141743],{},[106,142462,142463],{"className":129904,"code":141746,"language":129906,"meta":112,"style":112},[114,142464,142465,142473,142483,142493],{"__ignoreMap":112},[128,142466,142467,142469,142471],{"class":130,"line":131},[128,142468,54994],{"class":54685},[128,142470,140905],{"class":199},[128,142472,1959],{"class":138},[128,142474,142475,142477,142479,142481],{"class":130,"line":142},[128,142476,140912],{"class":166},[128,142478,1967],{"class":138},[128,142480,11209],{"class":176},[128,142482,4905],{"class":138},[128,142484,142485,142487,142489,142491],{"class":130,"line":156},[128,142486,131520],{"class":166},[128,142488,1967],{"class":138},[128,142490,64248],{"class":166},[128,142492,4905],{"class":138},[128,142494,142495],{"class":130,"line":163},[128,142496,2694],{"class":138},[19,142498,141783],{},[106,142500,142501],{"className":129904,"code":141746,"language":129906,"meta":112,"style":112},[114,142502,142503,142511,142521,142531],{"__ignoreMap":112},[128,142504,142505,142507,142509],{"class":130,"line":131},[128,142506,54994],{"class":54685},[128,142508,140905],{"class":199},[128,142510,1959],{"class":138},[128,142512,142513,142515,142517,142519],{"class":130,"line":142},[128,142514,140912],{"class":166},[128,142516,1967],{"class":138},[128,142518,11209],{"class":176},[128,142520,4905],{"class":138},[128,142522,142523,142525,142527,142529],{"class":130,"line":156},[128,142524,131520],{"class":166},[128,142526,1967],{"class":138},[128,142528,64248],{"class":166},[128,142530,4905],{"class":138},[128,142532,142533],{"class":130,"line":163},[128,142534,2694],{"class":138},[19,142536,142537],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,142539,142540,142541,142544],{},"2 号盒子左侧浮动，",[114,142542,142543],{},"navitems"," 导航栏组",[4752,142546,142547,142552,142561],{},[29,142548,142549,142550],{},"里面结构是 ",[114,142551,142415],{},[29,142553,142554,142555,142557,142558,142560],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[114,142556,3989],{},"左右的",[114,142559,34356],{},"把两侧撑开",[29,142562,142563],{},"让文字垂直居中（行高等于高度）",[5074,142565],{"style":129760,"src":142566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,142568,142569],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,142571,141743],{},[106,142573,142575],{"className":129904,"code":142574,"language":129906,"meta":112,"style":112},".box {\n  float: left;\n}\n",[114,142576,142577,142583,142593],{"__ignoreMap":112},[128,142578,142579,142581],{"class":130,"line":131},[128,142580,133752],{"class":199},[128,142582,1959],{"class":138},[128,142584,142585,142587,142589,142591],{"class":130,"line":142},[128,142586,134384],{"class":166},[128,142588,1967],{"class":138},[128,142590,27223],{"class":166},[128,142592,4905],{"class":138},[128,142594,142595],{"class":130,"line":156},[128,142596,2694],{"class":138},[19,142598,141783],{},[106,142600,142601],{"className":129904,"code":142574,"language":129906,"meta":112,"style":112},[114,142602,142603,142609,142619],{"__ignoreMap":112},[128,142604,142605,142607],{"class":130,"line":131},[128,142606,133752],{"class":199},[128,142608,1959],{"class":138},[128,142610,142611,142613,142615,142617],{"class":130,"line":142},[128,142612,134384],{"class":166},[128,142614,1967],{"class":138},[128,142616,27223],{"class":166},[128,142618,4905],{"class":138},[128,142620,142621],{"class":130,"line":156},[128,142622,2694],{"class":138},[19,142624,142625],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[5074,142627],{"style":129760,"src":142628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[106,142630,142631],{"className":129904,"code":134061,"language":129906,"meta":112,"style":112},[114,142632,142633,142639,142655],{"__ignoreMap":112},[128,142634,142635,142637],{"class":130,"line":131},[128,142636,54994],{"class":54685},[128,142638,1959],{"class":138},[128,142640,142641,142643,142645,142647,142649,142651,142653],{"class":130,"line":142},[128,142642,74271],{"class":166},[128,142644,1967],{"class":138},[128,142646,2592],{"class":166},[128,142648,54875],{"class":134},[128,142650,54904],{"class":166},[128,142652,133296],{"class":166},[128,142654,4905],{"class":138},[128,142656,142657],{"class":130,"line":156},[128,142658,2694],{"class":138},[72,142660,142662],{"id":142661},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[5074,142664],{"style":129760,"src":142665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[4752,142667,142668,142673,142678],{},[29,142669,142670,142672],{},[114,142671,135107],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[29,142674,142675,142677],{},[114,142676,135107],{}," 里面有一个大的版心",[29,142679,142680,142681,142684,142685],{},"版心里面包含 1 号盒子，",[114,142682,142683],{},"mod_service"," 是服务模块，mod 是模块的意思",[4752,142686,142687,142692,142705,142721,142726],{},[29,142688,142404,142689,142691],{},[114,142690,142683],{}," 设置高度（80px）和下边框",[29,142693,142694,142695,142698,142699,142701,142702,142704],{},"在里面定义 ",[114,142696,142697],{},"ul > li"," ,每个",[114,142700,29],{}," 宽度是300px 高度是 50px，给每个",[114,142703,29],{},"设置35px的左内边距",[29,142706,142707,142708,142710,142711,142713,142714,142716,142717,21897,142719,123593],{},"在每个",[114,142709,29],{},"里面，放一个 ",[114,142712,26397],{},"（里面放图标），一个",[114,142715,54994],{},"（里面放",[114,142718,54994],{},[114,142720,19],{},[29,142722,142404,142723,142725],{},[114,142724,26397],{},"设置浮动，让h5与这个div左右排列",[29,142727,142728],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,142730,141743],{},[106,142732,142734],{"className":129904,"code":142733,"language":129906,"meta":112,"style":112},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[114,142735,142736,142742,142754,142766,142793],{"__ignoreMap":112},[128,142737,142738,142740],{"class":130,"line":131},[128,142739,137661],{"class":199},[128,142741,1959],{"class":138},[128,142743,142744,142746,142748,142750,142752],{"class":130,"line":142},[128,142745,73943],{"class":166},[128,142747,1967],{"class":138},[128,142749,4449],{"class":166},[128,142751,54875],{"class":134},[128,142753,4905],{"class":138},[128,142755,142756,142758,142760,142762,142764],{"class":130,"line":156},[128,142757,74163],{"class":166},[128,142759,1967],{"class":138},[128,142761,4449],{"class":166},[128,142763,54875],{"class":134},[128,142765,4905],{"class":138},[128,142767,142768,142770,142772,142774,142776,142778,142780,142782,142785,142787,142789,142791],{"class":130,"line":163},[128,142769,73986],{"class":166},[128,142771,1967],{"class":138},[128,142773,65105],{"class":166},[128,142775,253],{"class":138},[128,142777,137700],{"class":266},[128,142779,276],{"class":138},[128,142781,65115],{"class":166},[128,142783,142784],{"class":166}," -10",[128,142786,54875],{"class":134},[128,142788,137719],{"class":166},[128,142790,54875],{"class":134},[128,142792,4905],{"class":138},[128,142794,142795],{"class":130,"line":183},[128,142796,2694],{"class":138},[19,142798,141783],{},[106,142800,142801],{"className":129904,"code":142733,"language":129906,"meta":112,"style":112},[114,142802,142803,142809,142821,142833,142859],{"__ignoreMap":112},[128,142804,142805,142807],{"class":130,"line":131},[128,142806,137661],{"class":199},[128,142808,1959],{"class":138},[128,142810,142811,142813,142815,142817,142819],{"class":130,"line":142},[128,142812,73943],{"class":166},[128,142814,1967],{"class":138},[128,142816,4449],{"class":166},[128,142818,54875],{"class":134},[128,142820,4905],{"class":138},[128,142822,142823,142825,142827,142829,142831],{"class":130,"line":156},[128,142824,74163],{"class":166},[128,142826,1967],{"class":138},[128,142828,4449],{"class":166},[128,142830,54875],{"class":134},[128,142832,4905],{"class":138},[128,142834,142835,142837,142839,142841,142843,142845,142847,142849,142851,142853,142855,142857],{"class":130,"line":163},[128,142836,73986],{"class":166},[128,142838,1967],{"class":138},[128,142840,65105],{"class":166},[128,142842,253],{"class":138},[128,142844,137700],{"class":266},[128,142846,276],{"class":138},[128,142848,65115],{"class":166},[128,142850,142784],{"class":166},[128,142852,54875],{"class":134},[128,142854,137719],{"class":166},[128,142856,54875],{"class":134},[128,142858,4905],{"class":138},[128,142860,142861],{"class":130,"line":183},[128,142862,2694],{"class":138},[19,142864,142865],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[4752,142867,142868,142871,142877,142883,142895],{},[29,142869,142870],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[29,142872,142873,142874,123593],{},"里面的布局利用 自定义列表来实现（",[114,142875,142876],{},"dl > dt + dd",[29,142878,142404,142879,142882],{},[114,142880,142881],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[29,142884,142404,142885,142888,142889,21897,142891,142894],{},[114,142886,142887],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[114,142890,142887],{},[114,142892,142893],{},"dd","之间有些距离",[29,142896,142897],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,142899,141743],{},[106,142901,142902],{"className":129904,"code":142093,"language":129906,"meta":112,"style":112},[114,142903,142904,142910,142922],{"__ignoreMap":112},[128,142905,142906,142908],{"class":130,"line":131},[128,142907,54994],{"class":54685},[128,142909,1959],{"class":138},[128,142911,142912,142914,142916,142918,142920],{"class":130,"line":142},[128,142913,73845],{"class":166},[128,142915,1967],{"class":138},[128,142917,2452],{"class":166},[128,142919,54939],{"class":166},[128,142921,4905],{"class":138},[128,142923,142924],{"class":130,"line":156},[128,142925,2694],{"class":138},[19,142927,141783],{},[106,142929,142930],{"className":129904,"code":142093,"language":129906,"meta":112,"style":112},[114,142931,142932,142938,142950],{"__ignoreMap":112},[128,142933,142934,142936],{"class":130,"line":131},[128,142935,54994],{"class":54685},[128,142937,1959],{"class":138},[128,142939,142940,142942,142944,142946,142948],{"class":130,"line":142},[128,142941,73845],{"class":166},[128,142943,1967],{"class":138},[128,142945,2452],{"class":166},[128,142947,54939],{"class":166},[128,142949,4905],{"class":138},[128,142951,142952],{"class":130,"line":156},[128,142953,2694],{"class":138},[19,142955,142956],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[4752,142958,142959,142968,142971,142982],{},[29,142960,142961,142962,142964,142965,142967],{},"分为上下两块，上面是 ",[114,142963,135124],{}," 友情链接，下面是 ",[114,142966,135117],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[29,142969,142970],{},"把内容分别复制到相应模块中",[29,142972,142404,142973,142975,142976,142978,142979,142981],{},[114,142974,135124],{}," 设置 15px 的下外边距，给",[114,142977,135124],{}," 里面 的 ",[114,142980,3989],{}," 标签设置 左右 3px 的外边距",[29,142983,142984,142985,142987],{},"给",[114,142986,135117],{}," 设置 20px 的行高",[19,142989,141743],{},[106,142991,142992],{"className":129904,"code":142093,"language":129906,"meta":112,"style":112},[114,142993,142994,143000,143012],{"__ignoreMap":112},[128,142995,142996,142998],{"class":130,"line":131},[128,142997,54994],{"class":54685},[128,142999,1959],{"class":138},[128,143001,143002,143004,143006,143008,143010],{"class":130,"line":142},[128,143003,73845],{"class":166},[128,143005,1967],{"class":138},[128,143007,2452],{"class":166},[128,143009,54939],{"class":166},[128,143011,4905],{"class":138},[128,143013,143014],{"class":130,"line":156},[128,143015,2694],{"class":138},[19,143017,141783],{},[106,143019,143020],{"className":129904,"code":142093,"language":129906,"meta":112,"style":112},[114,143021,143022,143028,143040],{"__ignoreMap":112},[128,143023,143024,143026],{"class":130,"line":131},[128,143025,54994],{"class":54685},[128,143027,1959],{"class":138},[128,143029,143030,143032,143034,143036,143038],{"class":130,"line":142},[128,143031,73845],{"class":166},[128,143033,1967],{"class":138},[128,143035,2452],{"class":166},[128,143037,54939],{"class":166},[128,143039,4905],{"class":138},[128,143041,143042],{"class":130,"line":156},[128,143043,2694],{"class":138},[19,143045,143046],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[3659,143048,143049],{},"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":112,"searchDepth":142,"depth":142,"links":143051},[143052,143053,143054,143061],{"id":141332,"depth":142,"text":141333},{"id":141351,"depth":142,"text":141352},{"id":141378,"depth":142,"text":141379,"children":143055},[143056,143057,143058,143059,143060],{"id":141382,"depth":156,"text":141383},{"id":141395,"depth":156,"text":141396},{"id":141419,"depth":156,"text":141420},{"id":141441,"depth":156,"text":141442},{"id":141513,"depth":156,"text":141514},{"id":141639,"depth":142,"text":141640,"children":143062},[143063,143064,143065,143066,143068],{"id":141643,"depth":156,"text":141644},{"id":141650,"depth":156,"text":141651},{"id":141822,"depth":156,"text":141823},{"id":142363,"depth":156,"text":143067},"15.4.4 nav导航模块制作",{"id":142661,"depth":156,"text":142662},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":141324,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":143075,"title":143076,"body":143077,"description":3686,"extension":3687,"meta":145479,"navigation":159,"path":145480,"seo":145481,"stem":145482,"__hash__":145483},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":143078,"toc":145456},[143079,143082,143086,143090,143102,143105,143108,143111,143122,143124,143148,143150,143174,143179,143182,143184,143220,143222,143258,143261,143266,143269,143272,143275,143305,143312,143315,143325,143327,143361,143364,143398,143404,143421,143423,143459,143461,143497,143502,143527,143529,143555,143557,143581,143588,143591,143655,143657,143699,143701,143741,143748,143753,143755,143785,143787,143817,143821,143824,143831,143843,143845,143871,143873,143897,143900,143902,143926,143932,143942,143944,143974,143976,144006,144013,144054,144056,144092,144094,144130,144134,144137,144140,144143,144149,144154,144157,144180,144183,144207,144210,144234,144239,144242,144245,144248,144251,144254,144328,144330,144360,144362,144392,144395,144398,144430,144434,144438,144452,144461,144464,144469,144471,144565,144567,144661,144684,144686,144710,144712,144736,144743,144746,144756,144758,144782,144787,144795,144797,144827,144832,144872,144874,144900,144902,144928,144932,144935,144940,144943,144947,144955,144962,144970,144972,145002,145004,145034,145042,145045,145048,145050,145080,145082,145112,145115,145120,145122,145146,145148,145172,145175,145260,145262,145286,145288,145312,145316,145318,145342,145344,145378,145382,145396,145399,145404,145407,145412,145415,145445,145453],[10,143080,143076],{"id":143081},"_16-品优购项目下篇-主体与页面开发",[14,143083,143085],{"id":143084},"_161-项目主体模块制作","16.1 项目主体模块制作",[72,143087,143089],{"id":143088},"_1611-首页制作","16.1.1 首页制作",[19,143091,143092,143094,143095,143097,143098,143101],{},[3903,143093,105421],{}," 主体模块是 ",[3903,143096,77432],{}," 里面专有的，注意需要新的样式文件 ",[3903,143099,143100],{},"index.css，"," 就不要写在common.css中了",[5074,143103],{"style":129760,"src":143104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[5074,143106],{"style":129760,"src":143107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,143109,143110],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[4752,143112,143113,143116,143119],{},[29,143114,143115],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[29,143117,143118],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[29,143120,143121],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,143123,141743],{},[106,143125,143126],{"className":129904,"code":142574,"language":129906,"meta":112,"style":112},[114,143127,143128,143134,143144],{"__ignoreMap":112},[128,143129,143130,143132],{"class":130,"line":131},[128,143131,133752],{"class":199},[128,143133,1959],{"class":138},[128,143135,143136,143138,143140,143142],{"class":130,"line":142},[128,143137,134384],{"class":166},[128,143139,1967],{"class":138},[128,143141,27223],{"class":166},[128,143143,4905],{"class":138},[128,143145,143146],{"class":130,"line":156},[128,143147,2694],{"class":138},[19,143149,141783],{},[106,143151,143152],{"className":129904,"code":142574,"language":129906,"meta":112,"style":112},[114,143153,143154,143160,143170],{"__ignoreMap":112},[128,143155,143156,143158],{"class":130,"line":131},[128,143157,133752],{"class":199},[128,143159,1959],{"class":138},[128,143161,143162,143164,143166,143168],{"class":130,"line":142},[128,143163,134384],{"class":166},[128,143165,1967],{"class":138},[128,143167,27223],{"class":166},[128,143169,4905],{"class":138},[128,143171,143172],{"class":130,"line":156},[128,143173,2694],{"class":138},[26,143175,143176],{},[29,143177,143178],{},"左侧focus模块制作",[5074,143180],{"style":129760,"src":143181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,143183,141743],{},[106,143185,143186],{"className":129904,"code":131227,"language":129906,"meta":112,"style":112},[114,143187,143188,143196,143206,143216],{"__ignoreMap":112},[128,143189,143190,143192,143194],{"class":130,"line":131},[128,143191,643],{"class":54685},[128,143193,65279],{"class":199},[128,143195,1959],{"class":138},[128,143197,143198,143200,143202,143204],{"class":130,"line":142},[128,143199,131242],{"class":166},[128,143201,1967],{"class":138},[128,143203,58270],{"class":166},[128,143205,4905],{"class":138},[128,143207,143208,143210,143212,143214],{"class":130,"line":156},[128,143209,74173],{"class":166},[128,143211,1967],{"class":138},[128,143213,58118],{"class":166},[128,143215,4905],{"class":138},[128,143217,143218],{"class":130,"line":163},[128,143219,2694],{"class":138},[19,143221,141783],{},[106,143223,143224],{"className":129904,"code":131227,"language":129906,"meta":112,"style":112},[114,143225,143226,143234,143244,143254],{"__ignoreMap":112},[128,143227,143228,143230,143232],{"class":130,"line":131},[128,143229,643],{"class":54685},[128,143231,65279],{"class":199},[128,143233,1959],{"class":138},[128,143235,143236,143238,143240,143242],{"class":130,"line":142},[128,143237,131242],{"class":166},[128,143239,1967],{"class":138},[128,143241,58270],{"class":166},[128,143243,4905],{"class":138},[128,143245,143246,143248,143250,143252],{"class":130,"line":156},[128,143247,74173],{"class":166},[128,143249,1967],{"class":138},[128,143251,58118],{"class":166},[128,143253,4905],{"class":138},[128,143255,143256],{"class":130,"line":163},[128,143257,2694],{"class":138},[19,143259,143260],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[26,143262,143263],{"start":142},[29,143264,143265],{},"右侧newsflash模块制作",[5074,143267],{"style":129760,"src":143268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,143270,143271],{},"右侧的模块 分为上中下三个盒子",[19,143273,143274],{},"结构代码：",[106,143276,143277],{"className":130651,"code":137406,"language":130653,"meta":112,"style":112},[114,143278,143279],{"__ignoreMap":112},[128,143280,143281,143283,143285,143287,143289,143291,143293,143295,143297,143299,143301,143303],{"class":130,"line":131},[128,143282,4657],{"class":138},[128,143284,5074],{"class":54685},[128,143286,58620],{"class":199},[128,143288,270],{"class":138},[128,143290,137421],{"class":176},[128,143292,58628],{"class":199},[128,143294,270],{"class":138},[128,143296,137428],{"class":176},[128,143298,137431],{"class":199},[128,143300,270],{"class":138},[128,143302,137436],{"class":176},[128,143304,54692],{"class":138},[19,143306,143307,143308,143311],{},"1 号盒子为 ",[114,143309,143310],{},"news"," 新闻模块 高度为 165px",[5074,143313],{"style":129760,"src":143314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,143316,143317,143318,143321,143322],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[114,143319,143320],{},"news-hd","，下面是 ",[114,143323,143324],{},"news-bd",[19,143326,143274],{},[106,143328,143329],{"className":130651,"code":134008,"language":130653,"meta":112,"style":112},[114,143330,143331,143335,143349,143353],{"__ignoreMap":112},[128,143332,143333],{"class":130,"line":131},[128,143334,134015],{"class":3814},[128,143336,143337,143339,143341,143343,143345,143347],{"class":130,"line":142},[128,143338,4657],{"class":138},[128,143340,54994],{"class":54685},[128,143342,56868],{"class":199},[128,143344,270],{"class":138},[128,143346,134028],{"class":176},[128,143348,54692],{"class":138},[128,143350,143351],{"class":130,"line":156},[128,143352,134035],{"class":138},[128,143354,143355,143357,143359],{"class":130,"line":163},[128,143356,55168],{"class":138},[128,143358,54994],{"class":54685},[128,143360,54692],{"class":138},[19,143362,143363],{},"样式代码：",[106,143365,143366],{"className":130651,"code":134008,"language":130653,"meta":112,"style":112},[114,143367,143368,143372,143386,143390],{"__ignoreMap":112},[128,143369,143370],{"class":130,"line":131},[128,143371,134015],{"class":3814},[128,143373,143374,143376,143378,143380,143382,143384],{"class":130,"line":142},[128,143375,4657],{"class":138},[128,143377,54994],{"class":54685},[128,143379,56868],{"class":199},[128,143381,270],{"class":138},[128,143383,134028],{"class":176},[128,143385,54692],{"class":138},[128,143387,143388],{"class":130,"line":156},[128,143389,134035],{"class":138},[128,143391,143392,143394,143396],{"class":130,"line":163},[128,143393,55168],{"class":138},[128,143395,54994],{"class":54685},[128,143397,54692],{"class":138},[19,143399,143400,143401,143403],{},"上面是",[114,143402,143320],{},"，设置高度是 33px，设置下边框",[4752,143405,143406,143412],{},[29,143407,143408,143409,143411],{},"里面放一个",[114,143410,26397],{}," 标题",[29,143413,143414,143415,143417,143418,143420],{},"放一个a",[114,143416,106056],{},"，内容是 更多，然后让 ",[114,143419,3989],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,143422,143274],{},[106,143424,143425],{"className":129904,"code":141746,"language":129906,"meta":112,"style":112},[114,143426,143427,143435,143445,143455],{"__ignoreMap":112},[128,143428,143429,143431,143433],{"class":130,"line":131},[128,143430,54994],{"class":54685},[128,143432,140905],{"class":199},[128,143434,1959],{"class":138},[128,143436,143437,143439,143441,143443],{"class":130,"line":142},[128,143438,140912],{"class":166},[128,143440,1967],{"class":138},[128,143442,11209],{"class":176},[128,143444,4905],{"class":138},[128,143446,143447,143449,143451,143453],{"class":130,"line":156},[128,143448,131520],{"class":166},[128,143450,1967],{"class":138},[128,143452,64248],{"class":166},[128,143454,4905],{"class":138},[128,143456,143457],{"class":130,"line":163},[128,143458,2694],{"class":138},[19,143460,143363],{},[106,143462,143463],{"className":129904,"code":141746,"language":129906,"meta":112,"style":112},[114,143464,143465,143473,143483,143493],{"__ignoreMap":112},[128,143466,143467,143469,143471],{"class":130,"line":131},[128,143468,54994],{"class":54685},[128,143470,140905],{"class":199},[128,143472,1959],{"class":138},[128,143474,143475,143477,143479,143481],{"class":130,"line":142},[128,143476,140912],{"class":166},[128,143478,1967],{"class":138},[128,143480,11209],{"class":176},[128,143482,4905],{"class":138},[128,143484,143485,143487,143489,143491],{"class":130,"line":156},[128,143486,131520],{"class":166},[128,143488,1967],{"class":138},[128,143490,64248],{"class":166},[128,143492,4905],{"class":138},[128,143494,143495],{"class":130,"line":163},[128,143496,2694],{"class":138},[19,143498,143499,143500],{},"下面是",[114,143501,143324],{},[4752,143503,143504,143512],{},[29,143505,143506,143507,3330,143509,143511],{},"里面包含 ",[114,143508,4752],{},[114,143510,29],{}," 还有链接",[29,143513,142984,143514,143516,143517,143519,143520,143523,143524],{},[114,143515,29],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[114,143518,134570],{}," 2.设置 ",[114,143521,143522],{},"white-space: nowrap;"," 3. 设置 ",[114,143525,143526],{},"text-overflow: ellipsis;",[19,143528,143274],{},[106,143530,143532],{"className":129904,"code":143531,"language":129906,"meta":112,"style":112},"div {\n  overflow: hidden;\n}\n",[114,143533,143534,143540,143551],{"__ignoreMap":112},[128,143535,143536,143538],{"class":130,"line":131},[128,143537,54994],{"class":54685},[128,143539,1959],{"class":138},[128,143541,143542,143545,143547,143549],{"class":130,"line":142},[128,143543,143544],{"class":166},"  overflow",[128,143546,1967],{"class":138},[128,143548,65093],{"class":166},[128,143550,4905],{"class":138},[128,143552,143553],{"class":130,"line":156},[128,143554,2694],{"class":138},[19,143556,143363],{},[106,143558,143559],{"className":129904,"code":143531,"language":129906,"meta":112,"style":112},[114,143560,143561,143567,143577],{"__ignoreMap":112},[128,143562,143563,143565],{"class":130,"line":131},[128,143564,54994],{"class":54685},[128,143566,1959],{"class":138},[128,143568,143569,143571,143573,143575],{"class":130,"line":142},[128,143570,143544],{"class":166},[128,143572,1967],{"class":138},[128,143574,65093],{"class":166},[128,143576,4905],{"class":138},[128,143578,143579],{"class":130,"line":156},[128,143580,2694],{"class":138},[19,143582,143583,143584,143587],{},"2 号盒子为 ",[114,143585,143586],{},"lifeservice"," 生活服务模块 高度为 209px",[5074,143589],{"style":129760,"src":143590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[4752,143592,143593,143596,143606,143630,143641],{},[29,143594,143595],{},"设置边框（左右下边框）",[29,143597,143598,143599,143602,143603,143605],{},"里面的内容 是 ",[114,143600,143601],{},"ul > 12*li","，给",[114,143604,29],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[29,143607,143608,143609],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[4752,143610,143611,143616,143625],{},[29,143612,143613,143615],{},[114,143614,143586],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[29,143617,143618,143619,143621,143622,143624],{},"可以让 ",[114,143620,143586],{}," 里面的 ",[114,143623,4752],{}," 宽度为 252，就可以装的下 4 个 小 li",[29,143626,143627,143629],{},[114,143628,143586],{}," 盒子 overflow 隐藏多余的部分就可以了",[29,143631,119823,143632,143634,143635,143637,143638,143640],{},[114,143633,29],{}," 里面放一个 ",[114,143636,4191],{},"（里面放图标），下面的文本用 ",[114,143639,19],{}," 标签包裹",[29,143642,142404,143643,143645,143646,143648,143649,142438,143651,143654],{},[114,143644,4191],{}," 设置 24px宽和28px的高（注意 ",[114,143647,4191],{}," 是行内元素， 转成行内块），给 ",[114,143650,29],{},[114,143652,143653],{},"text-align:center"," 让里面内容居中显示",[19,143656,143274],{},[106,143658,143660],{"className":129904,"code":143659,"language":129906,"meta":112,"style":112},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[114,143661,143662,143680,143685,143695],{"__ignoreMap":112},[128,143663,143664,143666,143668,143670,143672,143674,143676,143678],{"class":130,"line":131},[128,143665,128],{"class":54685},[128,143667,258],{"class":138},[128,143669,3989],{"class":54685},[128,143671,258],{"class":138},[128,143673,27040],{"class":54685},[128,143675,258],{"class":138},[128,143677,3903],{"class":54685},[128,143679,1959],{"class":138},[128,143681,143682],{"class":130,"line":142},[128,143683,143684],{"class":3814},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[128,143686,143687,143689,143691,143693],{"class":130,"line":156},[128,143688,131520],{"class":166},[128,143690,1967],{"class":138},[128,143692,131582],{"class":166},[128,143694,4905],{"class":138},[128,143696,143697],{"class":130,"line":163},[128,143698,2694],{"class":138},[19,143700,143363],{},[106,143702,143703],{"className":129904,"code":143659,"language":129906,"meta":112,"style":112},[114,143704,143705,143723,143727,143737],{"__ignoreMap":112},[128,143706,143707,143709,143711,143713,143715,143717,143719,143721],{"class":130,"line":131},[128,143708,128],{"class":54685},[128,143710,258],{"class":138},[128,143712,3989],{"class":54685},[128,143714,258],{"class":138},[128,143716,27040],{"class":54685},[128,143718,258],{"class":138},[128,143720,3903],{"class":54685},[128,143722,1959],{"class":138},[128,143724,143725],{"class":130,"line":142},[128,143726,143684],{"class":3814},[128,143728,143729,143731,143733,143735],{"class":130,"line":156},[128,143730,131520],{"class":166},[128,143732,1967],{"class":138},[128,143734,131582],{"class":166},[128,143736,4905],{"class":138},[128,143738,143739],{"class":130,"line":163},[128,143740,2694],{"class":138},[19,143742,143743,143744,143747],{},"3 号盒子为 ",[114,143745,143746],{},"bargain"," 特价商品",[4752,143749,143750],{},[29,143751,143752],{},"这个比较简单，直接插入一张图片即可",[19,143754,143274],{},[106,143756,143757],{"className":130651,"code":137406,"language":130653,"meta":112,"style":112},[114,143758,143759],{"__ignoreMap":112},[128,143760,143761,143763,143765,143767,143769,143771,143773,143775,143777,143779,143781,143783],{"class":130,"line":131},[128,143762,4657],{"class":138},[128,143764,5074],{"class":54685},[128,143766,58620],{"class":199},[128,143768,270],{"class":138},[128,143770,137421],{"class":176},[128,143772,58628],{"class":199},[128,143774,270],{"class":138},[128,143776,137428],{"class":176},[128,143778,137431],{"class":199},[128,143780,270],{"class":138},[128,143782,137436],{"class":176},[128,143784,54692],{"class":138},[19,143786,143363],{},[106,143788,143789],{"className":130651,"code":137406,"language":130653,"meta":112,"style":112},[114,143790,143791],{"__ignoreMap":112},[128,143792,143793,143795,143797,143799,143801,143803,143805,143807,143809,143811,143813,143815],{"class":130,"line":131},[128,143794,4657],{"class":138},[128,143796,5074],{"class":54685},[128,143798,58620],{"class":199},[128,143800,270],{"class":138},[128,143802,137421],{"class":176},[128,143804,58628],{"class":199},[128,143806,270],{"class":138},[128,143808,137428],{"class":176},[128,143810,137431],{"class":199},[128,143812,270],{"class":138},[128,143814,137436],{"class":176},[128,143816,54692],{"class":138},[72,143818,143820],{"id":143819},"_1612-推荐模块制作","16.1.2 推荐模块制作",[5074,143822],{"style":129760,"src":143823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,143825,143826,143827,143830],{},"大盒子 ",[114,143828,143829],{},"recom"," 推荐模块 recommend",[4752,143832,143833],{},[29,143834,143835,143836,143838,143839,143842],{},"给这个 ",[114,143837,143829],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[114,143840,143841],{},"#ebebeb","），设置距离上边 12px",[19,143844,143274],{},[106,143846,143848],{"className":129904,"code":143847,"language":129906,"meta":112,"style":112},"div {\n  background-color: #f0f0f0;\n}\n",[114,143849,143850,143856,143867],{"__ignoreMap":112},[128,143851,143852,143854],{"class":130,"line":131},[128,143853,54994],{"class":54685},[128,143855,1959],{"class":138},[128,143857,143858,143860,143862,143865],{"class":130,"line":142},[128,143859,74253],{"class":166},[128,143861,1967],{"class":138},[128,143863,143864],{"class":166},"#f0f0f0",[128,143866,4905],{"class":138},[128,143868,143869],{"class":130,"line":156},[128,143870,2694],{"class":138},[19,143872,143363],{},[106,143874,143875],{"className":129904,"code":143847,"language":129906,"meta":112,"style":112},[114,143876,143877,143883,143893],{"__ignoreMap":112},[128,143878,143879,143881],{"class":130,"line":131},[128,143880,54994],{"class":54685},[128,143882,1959],{"class":138},[128,143884,143885,143887,143889,143891],{"class":130,"line":142},[128,143886,74253],{"class":166},[128,143888,1967],{"class":138},[128,143890,143864],{"class":166},[128,143892,4905],{"class":138},[128,143894,143895],{"class":130,"line":156},[128,143896,2694],{"class":138},[19,143898,143899],{},"里面包含 2 个盒子， 浮动即可",[19,143901,143274],{},[106,143903,143904],{"className":129904,"code":142574,"language":129906,"meta":112,"style":112},[114,143905,143906,143912,143922],{"__ignoreMap":112},[128,143907,143908,143910],{"class":130,"line":131},[128,143909,133752],{"class":199},[128,143911,1959],{"class":138},[128,143913,143914,143916,143918,143920],{"class":130,"line":142},[128,143915,134384],{"class":166},[128,143917,1967],{"class":138},[128,143919,27223],{"class":166},[128,143921,4905],{"class":138},[128,143923,143924],{"class":130,"line":156},[128,143925,2694],{"class":138},[19,143927,143928,143929],{},"1 号盒子 ",[114,143930,143931],{},"recom_hd",[4752,143933,143934,143937],{},[29,143935,143936],{},"设置宽度205px，高度163px",[29,143938,143408,143939,143941],{},[114,143940,5074],{},"标签，插入图片即可",[19,143943,143274],{},[106,143945,143946],{"className":130651,"code":137406,"language":130653,"meta":112,"style":112},[114,143947,143948],{"__ignoreMap":112},[128,143949,143950,143952,143954,143956,143958,143960,143962,143964,143966,143968,143970,143972],{"class":130,"line":131},[128,143951,4657],{"class":138},[128,143953,5074],{"class":54685},[128,143955,58620],{"class":199},[128,143957,270],{"class":138},[128,143959,137421],{"class":176},[128,143961,58628],{"class":199},[128,143963,270],{"class":138},[128,143965,137428],{"class":176},[128,143967,137431],{"class":199},[128,143969,270],{"class":138},[128,143971,137436],{"class":176},[128,143973,54692],{"class":138},[19,143975,143363],{},[106,143977,143978],{"className":130651,"code":137406,"language":130653,"meta":112,"style":112},[114,143979,143980],{"__ignoreMap":112},[128,143981,143982,143984,143986,143988,143990,143992,143994,143996,143998,144000,144002,144004],{"class":130,"line":131},[128,143983,4657],{"class":138},[128,143985,5074],{"class":54685},[128,143987,58620],{"class":199},[128,143989,270],{"class":138},[128,143991,137421],{"class":176},[128,143993,58628],{"class":199},[128,143995,270],{"class":138},[128,143997,137428],{"class":176},[128,143999,137431],{"class":199},[128,144001,270],{"class":138},[128,144003,137436],{"class":176},[128,144005,54692],{"class":138},[19,144007,144008,144009,144012],{},"2 号盒子 ",[114,144010,144011],{},"recom_bd"," ，注意里面的小竖线",[4752,144014,144015,144026,144029,144034,144039],{},[29,144016,144017,144018,144020,144021,144023,144024],{},"右侧结构里面放 ",[114,144019,4752],{}," 包含 4个 ",[114,144022,29],{},"，每个li里面包含一个",[114,144025,5074],{},[29,144027,144028],{},"直接利用切片工具把里面的内容当成一张图片",[29,144030,142404,144031,144033],{},[114,144032,29],{}," 设置浮动",[29,144035,142404,144036,144038],{},[114,144037,5074],{}," 设置宽高，宽度 248px，高度 163px",[29,144040,144041,144042,143602,144045,144047,144048,144050,144051],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[114,144043,144044],{},"top 10px",[114,144046,29],{},"设置相对定位（注意，最后一个",[114,144049,29],{},"不用设置伪元素），可以利用 ",[114,144052,144053],{},"nth-child(-n+3){...}",[19,144055,143274],{},[106,144057,144058],{"className":129904,"code":141746,"language":129906,"meta":112,"style":112},[114,144059,144060,144068,144078,144088],{"__ignoreMap":112},[128,144061,144062,144064,144066],{"class":130,"line":131},[128,144063,54994],{"class":54685},[128,144065,140905],{"class":199},[128,144067,1959],{"class":138},[128,144069,144070,144072,144074,144076],{"class":130,"line":142},[128,144071,140912],{"class":166},[128,144073,1967],{"class":138},[128,144075,11209],{"class":176},[128,144077,4905],{"class":138},[128,144079,144080,144082,144084,144086],{"class":130,"line":156},[128,144081,131520],{"class":166},[128,144083,1967],{"class":138},[128,144085,64248],{"class":166},[128,144087,4905],{"class":138},[128,144089,144090],{"class":130,"line":163},[128,144091,2694],{"class":138},[19,144093,143363],{},[106,144095,144096],{"className":129904,"code":141746,"language":129906,"meta":112,"style":112},[114,144097,144098,144106,144116,144126],{"__ignoreMap":112},[128,144099,144100,144102,144104],{"class":130,"line":131},[128,144101,54994],{"class":54685},[128,144103,140905],{"class":199},[128,144105,1959],{"class":138},[128,144107,144108,144110,144112,144114],{"class":130,"line":142},[128,144109,140912],{"class":166},[128,144111,1967],{"class":138},[128,144113,11209],{"class":176},[128,144115,4905],{"class":138},[128,144117,144118,144120,144122,144124],{"class":130,"line":156},[128,144119,131520],{"class":166},[128,144121,1967],{"class":138},[128,144123,64248],{"class":166},[128,144125,4905],{"class":138},[128,144127,144128],{"class":130,"line":163},[128,144129,2694],{"class":138},[72,144131,144133],{"id":144132},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[5074,144135],{"style":129760,"src":144136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,144138,144139],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,144141,144142],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,144144,144145,144148],{},[114,144146,144147],{},"box_hd"," 制作",[19,144150,143928,144151,144153],{},[114,144152,144147],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[5074,144155],{"style":129760,"src":144156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[4752,144158,144159,144164,144169,144172],{},[29,144160,144161,144163],{},[114,144162,144147],{}," 给 30px 的高度，2个像素的下边框",[29,144165,144166,144167],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[114,144168,142415],{},[29,144170,144171],{},"左侧盒左浮动，右侧盒子右浮动",[29,144173,144174,144176,144177,144179],{},[114,144175,3989],{},"标签之间的距离用左右的",[114,144178,34356],{},"撑开即可",[19,144181,144182],{},"结构代码",[106,144184,144185],{"className":129904,"code":142574,"language":129906,"meta":112,"style":112},[114,144186,144187,144193,144203],{"__ignoreMap":112},[128,144188,144189,144191],{"class":130,"line":131},[128,144190,133752],{"class":199},[128,144192,1959],{"class":138},[128,144194,144195,144197,144199,144201],{"class":130,"line":142},[128,144196,134384],{"class":166},[128,144198,1967],{"class":138},[128,144200,27223],{"class":166},[128,144202,4905],{"class":138},[128,144204,144205],{"class":130,"line":156},[128,144206,2694],{"class":138},[19,144208,144209],{},"样式代码",[106,144211,144212],{"className":129904,"code":142574,"language":129906,"meta":112,"style":112},[114,144213,144214,144220,144230],{"__ignoreMap":112},[128,144215,144216,144218],{"class":130,"line":131},[128,144217,133752],{"class":199},[128,144219,1959],{"class":138},[128,144221,144222,144224,144226,144228],{"class":130,"line":142},[128,144223,134384],{"class":166},[128,144225,1967],{"class":138},[128,144227,27223],{"class":166},[128,144229,4905],{"class":138},[128,144231,144232],{"class":130,"line":156},[128,144233,2694],{"class":138},[19,144235,144236,144148],{},[114,144237,144238],{},"box_bd",[19,144240,144241],{},"2 号盒子 box_bd，不要给高度",[5074,144243],{"style":129760,"src":144244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,144246,144247],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,144249,144250],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,144252,144253],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[4752,144255,144256,144268,144284],{},[29,144257,144258,144260,144261,144264,144265,144267],{},[114,144259,144238],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[114,144262,144263],{},"tab_content","，在",[114,144266,144263],{}," 里面包裹tab选项卡对应的内容",[29,144269,144270,144271,144274,144275,144277,144278,144280,144281,144283],{},"内容被一个大盒子包裹（",[114,144272,144273],{},"tab_list_item","），里面是 ",[114,144276,4752],{}," 包裹 5个 ",[114,144279,29],{},"，每个",[114,144282,29],{},"设置对应的宽度，然后设置浮动",[29,144285,144286,144287,144289,144290,144292,144293],{},"而这5个",[114,144288,29],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[114,144291,29],{},"设置",[4752,144294,144295,144313,144316],{},[29,144296,144297,144298,144300,144301,144303,144304,144306,144307,144309,144310,144312],{},"第一个小 ",[114,144299,29],{}," 分为上下结构，上面是 ",[114,144302,4752],{}," 包裹 ",[114,144305,29],{}," ，",[114,144308,29],{},"里面包裹 ",[114,144311,3989],{},"，下面插入一张图片",[29,144314,144315],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[29,144317,144318,144319,144321,144322,144324,144325,144327],{},"后面的小 ",[114,144320,29],{}," 里面先放一个",[114,144323,3989],{},"标签，然后在",[114,144326,3989],{},"标签里面插入图片即可",[19,144329,144182],{},[106,144331,144332],{"className":130651,"code":137406,"language":130653,"meta":112,"style":112},[114,144333,144334],{"__ignoreMap":112},[128,144335,144336,144338,144340,144342,144344,144346,144348,144350,144352,144354,144356,144358],{"class":130,"line":131},[128,144337,4657],{"class":138},[128,144339,5074],{"class":54685},[128,144341,58620],{"class":199},[128,144343,270],{"class":138},[128,144345,137421],{"class":176},[128,144347,58628],{"class":199},[128,144349,270],{"class":138},[128,144351,137428],{"class":176},[128,144353,137431],{"class":199},[128,144355,270],{"class":138},[128,144357,137436],{"class":176},[128,144359,54692],{"class":138},[19,144361,144209],{},[106,144363,144364],{"className":130651,"code":137406,"language":130653,"meta":112,"style":112},[114,144365,144366],{"__ignoreMap":112},[128,144367,144368,144370,144372,144374,144376,144378,144380,144382,144384,144386,144388,144390],{"class":130,"line":131},[128,144369,4657],{"class":138},[128,144371,5074],{"class":54685},[128,144373,58620],{"class":199},[128,144375,270],{"class":138},[128,144377,137421],{"class":176},[128,144379,58628],{"class":199},[128,144381,270],{"class":138},[128,144383,137428],{"class":176},[128,144385,137431],{"class":199},[128,144387,270],{"class":138},[128,144389,137436],{"class":176},[128,144391,54692],{"class":138},[19,144393,144394],{},"tab栏切换需求！！！！！！介绍：",[5074,144396],{"style":129760,"src":144397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[4752,144399,144400,144408,144414,144417],{},[29,144401,144402,144405,144406],{},[114,144403,144404],{},"tab","栏的布局是 ",[114,144407,142415],{},[29,144409,144410,144411,144413],{},"有多少个",[114,144412,144404],{},"选项卡，那么对应就有多少个内容",[29,144415,144416],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[29,144418,144419,144420,144423,144424,144426,144427,144429],{},"等后面我们学习了",[114,144421,144422],{},"js","之后，我们就会配合",[114,144425,144422],{},"来实现，",[114,144428,144404],{},"栏的切换",[14,144431,144433],{"id":144432},"_162-列表制作","16.2 列表制作",[72,144435,144437],{"id":144436},"_1621-准备工作","16.2.1 准备工作",[4752,144439,144440,144443,144446,144449],{},[29,144441,144442],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[29,144444,144445],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[29,144447,144448],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[29,144450,144451],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[72,144453,144455,144456,3330,144458,144460],{"id":144454},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[114,144457,134909],{},[114,144459,57095],{}," 修改",[5074,144462],{"style":129760,"src":144463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[4752,144465,144466],{},[29,144467,144468],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,144470,143274],{},[106,144472,144473],{"className":129904,"code":135336,"language":129906,"meta":112,"style":112},[114,144474,144475,144479,144493,144497,144511,144515,144529,144533,144547,144551],{"__ignoreMap":112},[128,144476,144477],{"class":130,"line":131},[128,144478,135343],{"class":3814},[128,144480,144481,144483,144485,144487,144489,144491],{"class":130,"line":142},[128,144482,135348],{"class":199},[128,144484,83181],{"class":138},[128,144486,132264],{"class":166},[128,144488,1967],{"class":138},[128,144490,135357],{"class":166},[128,144492,132834],{"class":138},[128,144494,144495],{"class":130,"line":156},[128,144496,135364],{"class":3814},[128,144498,144499,144501,144503,144505,144507,144509],{"class":130,"line":163},[128,144500,135369],{"class":199},[128,144502,83181],{"class":138},[128,144504,132264],{"class":166},[128,144506,1967],{"class":138},[128,144508,58145],{"class":166},[128,144510,132834],{"class":138},[128,144512,144513],{"class":130,"line":183},[128,144514,135384],{"class":3814},[128,144516,144517,144519,144521,144523,144525,144527],{"class":130,"line":188},[128,144518,135389],{"class":199},[128,144520,83181],{"class":138},[128,144522,132264],{"class":166},[128,144524,1967],{"class":138},[128,144526,58212],{"class":166},[128,144528,132834],{"class":138},[128,144530,144531],{"class":130,"line":193},[128,144532,135404],{"class":3814},[128,144534,144535,144537,144539,144541,144543,144545],{"class":130,"line":206},[128,144536,135409],{"class":199},[128,144538,83181],{"class":138},[128,144540,132264],{"class":166},[128,144542,1967],{"class":138},[128,144544,89605],{"class":166},[128,144546,132834],{"class":138},[128,144548,144549],{"class":130,"line":221},[128,144550,135424],{"class":3814},[128,144552,144553,144555,144557,144559,144561,144563],{"class":130,"line":230},[128,144554,135429],{"class":199},[128,144556,83181],{"class":138},[128,144558,132264],{"class":166},[128,144560,1967],{"class":138},[128,144562,135438],{"class":166},[128,144564,132834],{"class":138},[19,144566,143363],{},[106,144568,144569],{"className":129904,"code":135336,"language":129906,"meta":112,"style":112},[114,144570,144571,144575,144589,144593,144607,144611,144625,144629,144643,144647],{"__ignoreMap":112},[128,144572,144573],{"class":130,"line":131},[128,144574,135343],{"class":3814},[128,144576,144577,144579,144581,144583,144585,144587],{"class":130,"line":142},[128,144578,135348],{"class":199},[128,144580,83181],{"class":138},[128,144582,132264],{"class":166},[128,144584,1967],{"class":138},[128,144586,135357],{"class":166},[128,144588,132834],{"class":138},[128,144590,144591],{"class":130,"line":156},[128,144592,135364],{"class":3814},[128,144594,144595,144597,144599,144601,144603,144605],{"class":130,"line":163},[128,144596,135369],{"class":199},[128,144598,83181],{"class":138},[128,144600,132264],{"class":166},[128,144602,1967],{"class":138},[128,144604,58145],{"class":166},[128,144606,132834],{"class":138},[128,144608,144609],{"class":130,"line":183},[128,144610,135384],{"class":3814},[128,144612,144613,144615,144617,144619,144621,144623],{"class":130,"line":188},[128,144614,135389],{"class":199},[128,144616,83181],{"class":138},[128,144618,132264],{"class":166},[128,144620,1967],{"class":138},[128,144622,58212],{"class":166},[128,144624,132834],{"class":138},[128,144626,144627],{"class":130,"line":193},[128,144628,135404],{"class":3814},[128,144630,144631,144633,144635,144637,144639,144641],{"class":130,"line":206},[128,144632,135409],{"class":199},[128,144634,83181],{"class":138},[128,144636,132264],{"class":166},[128,144638,1967],{"class":138},[128,144640,89605],{"class":166},[128,144642,132834],{"class":138},[128,144644,144645],{"class":130,"line":221},[128,144646,135424],{"class":3814},[128,144648,144649,144651,144653,144655,144657,144659],{"class":130,"line":230},[128,144650,135429],{"class":199},[128,144652,83181],{"class":138},[128,144654,132264],{"class":166},[128,144656,1967],{"class":138},[128,144658,135438],{"class":166},[128,144660,132834],{"class":138},[4752,144662,144663,144674],{},[29,144664,144665,144666,144669,144670,3330,144672],{},"1 号盒子左侧浮动 ",[114,144667,144668],{},"sk_list"," 里面包含 ",[114,144671,4752],{},[114,144673,29],{},[29,144675,144676,144677,144669,144680,3330,144682],{},"2 号盒子左侧浮动 ",[114,144678,144679],{},"sk_con",[114,144681,4752],{},[114,144683,29],{},[19,144685,143274],{},[106,144687,144688],{"className":129904,"code":142574,"language":129906,"meta":112,"style":112},[114,144689,144690,144696,144706],{"__ignoreMap":112},[128,144691,144692,144694],{"class":130,"line":131},[128,144693,133752],{"class":199},[128,144695,1959],{"class":138},[128,144697,144698,144700,144702,144704],{"class":130,"line":142},[128,144699,134384],{"class":166},[128,144701,1967],{"class":138},[128,144703,27223],{"class":166},[128,144705,4905],{"class":138},[128,144707,144708],{"class":130,"line":156},[128,144709,2694],{"class":138},[19,144711,143363],{},[106,144713,144714],{"className":129904,"code":142574,"language":129906,"meta":112,"style":112},[114,144715,144716,144722,144732],{"__ignoreMap":112},[128,144717,144718,144720],{"class":130,"line":131},[128,144719,133752],{"class":199},[128,144721,1959],{"class":138},[128,144723,144724,144726,144728,144730],{"class":130,"line":142},[128,144725,134384],{"class":166},[128,144727,1967],{"class":138},[128,144729,27223],{"class":166},[128,144731,4905],{"class":138},[128,144733,144734],{"class":130,"line":156},[128,144735,2694],{"class":138},[72,144737,144739,144740],{"id":144738},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[114,144741,144742],{},"sk_container",[5074,144744],{"style":129760,"src":144745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[4752,144747,144748,144753],{},[29,144749,143928,144750,144752],{},[114,144751,144742],{}," 给宽度 1200，不要给高度",[29,144754,144755],{},"一定不要忘记清除浮动",[19,144757,143274],{},[106,144759,144760],{"className":129904,"code":142574,"language":129906,"meta":112,"style":112},[114,144761,144762,144768,144778],{"__ignoreMap":112},[128,144763,144764,144766],{"class":130,"line":131},[128,144765,133752],{"class":199},[128,144767,1959],{"class":138},[128,144769,144770,144772,144774,144776],{"class":130,"line":142},[128,144771,134384],{"class":166},[128,144773,1967],{"class":138},[128,144775,27223],{"class":166},[128,144777,4905],{"class":138},[128,144779,144780],{"class":130,"line":156},[128,144781,2694],{"class":138},[26,144783,144784],{},[29,144785,144786],{},"sk_hd制作",[4752,144788,144789],{},[29,144790,144008,144791,144794],{},[114,144792,144793],{},"sk_hd"," ，插入图片即可",[19,144796,143274],{},[106,144798,144799],{"className":130651,"code":137406,"language":130653,"meta":112,"style":112},[114,144800,144801],{"__ignoreMap":112},[128,144802,144803,144805,144807,144809,144811,144813,144815,144817,144819,144821,144823,144825],{"class":130,"line":131},[128,144804,4657],{"class":138},[128,144806,5074],{"class":54685},[128,144808,58620],{"class":199},[128,144810,270],{"class":138},[128,144812,137421],{"class":176},[128,144814,58628],{"class":199},[128,144816,270],{"class":138},[128,144818,137428],{"class":176},[128,144820,137431],{"class":199},[128,144822,270],{"class":138},[128,144824,137436],{"class":176},[128,144826,54692],{"class":138},[26,144828,144829],{"start":142},[29,144830,144831],{},"sk_bd制作",[4752,144833,144834],{},[29,144835,144836,144837,144840,144841,3330,144843,144845],{},"3 号盒子 ",[114,144838,144839],{},"sk_bd"," ，里面包含很多的 ",[114,144842,4752],{},[114,144844,29],{},[4752,144846,144847,144856],{},[29,144848,144849,144850,144852,144853,144855],{},"当鼠标移入到 ",[114,144851,29],{}," 上面的时候显示红色的边框，在这里先给 ",[114,144854,29],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[29,144857,144858,144859,144861,144862,144864,144865,144868,144869,144871],{},"由于给每个 ",[114,144860,29],{}," 都设置了外边距，导致一行的最后一个 ",[114,144863,29],{}," 掉了下来，在这里我们利用 ",[114,144866,144867],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[114,144870,29],{},"，去掉外边距就好了",[19,144873,143274],{},[106,144875,144876],{"className":129904,"code":142093,"language":129906,"meta":112,"style":112},[114,144877,144878,144884,144896],{"__ignoreMap":112},[128,144879,144880,144882],{"class":130,"line":131},[128,144881,54994],{"class":54685},[128,144883,1959],{"class":138},[128,144885,144886,144888,144890,144892,144894],{"class":130,"line":142},[128,144887,73845],{"class":166},[128,144889,1967],{"class":138},[128,144891,2452],{"class":166},[128,144893,54939],{"class":166},[128,144895,4905],{"class":138},[128,144897,144898],{"class":130,"line":156},[128,144899,2694],{"class":138},[19,144901,143363],{},[106,144903,144904],{"className":129904,"code":142093,"language":129906,"meta":112,"style":112},[114,144905,144906,144912,144924],{"__ignoreMap":112},[128,144907,144908,144910],{"class":130,"line":131},[128,144909,54994],{"class":54685},[128,144911,1959],{"class":138},[128,144913,144914,144916,144918,144920,144922],{"class":130,"line":142},[128,144915,73845],{"class":166},[128,144917,1967],{"class":138},[128,144919,2452],{"class":166},[128,144921,54939],{"class":166},[128,144923,4905],{"class":138},[128,144925,144926],{"class":130,"line":156},[128,144927,2694],{"class":138},[14,144929,144931],{"id":144930},"_163-注册页面制作","16.3 注册页面制作",[5074,144933],{"style":129760,"src":144934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,144936,144937,144939],{},[3903,144938,12571],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[5074,144941],{"style":129760,"src":144942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[72,144944,144946],{"id":144945},"_1631-准备工作","16.3.1 准备工作",[4752,144948,144949,144952],{},[29,144950,144951],{},"创建register.html，引入 base.css，引入favicon图标",[29,144953,144954],{},"创建register.css ，在html页面进行引入",[72,144956,144958,144959,144961],{"id":144957},"_1632-header-头部实现","16.3.2 ",[114,144960,134909],{}," 头部实现",[4752,144963,144964,144967],{},[29,144965,144966],{},"整个内容用 版心 进行包裹",[29,144968,144969],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,144971,143274],{},[106,144973,144974],{"className":130651,"code":137406,"language":130653,"meta":112,"style":112},[114,144975,144976],{"__ignoreMap":112},[128,144977,144978,144980,144982,144984,144986,144988,144990,144992,144994,144996,144998,145000],{"class":130,"line":131},[128,144979,4657],{"class":138},[128,144981,5074],{"class":54685},[128,144983,58620],{"class":199},[128,144985,270],{"class":138},[128,144987,137421],{"class":176},[128,144989,58628],{"class":199},[128,144991,270],{"class":138},[128,144993,137428],{"class":176},[128,144995,137431],{"class":199},[128,144997,270],{"class":138},[128,144999,137436],{"class":176},[128,145001,54692],{"class":138},[19,145003,143363],{},[106,145005,145006],{"className":130651,"code":137406,"language":130653,"meta":112,"style":112},[114,145007,145008],{"__ignoreMap":112},[128,145009,145010,145012,145014,145016,145018,145020,145022,145024,145026,145028,145030,145032],{"class":130,"line":131},[128,145011,4657],{"class":138},[128,145013,5074],{"class":54685},[128,145015,58620],{"class":199},[128,145017,270],{"class":138},[128,145019,137421],{"class":176},[128,145021,58628],{"class":199},[128,145023,270],{"class":138},[128,145025,137428],{"class":176},[128,145027,137431],{"class":199},[128,145029,270],{"class":138},[128,145031,137436],{"class":176},[128,145033,54692],{"class":138},[72,145035,145037,145038,145041],{"id":145036},"_1633-registerarea-主体模块实现","16.3.3 ",[114,145039,145040],{},"registerarea"," 主体模块实现",[5074,145043],{"style":129760,"src":145044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,145046,145047],{},"整个大盒子 高度为 522px，设置4个边框",[19,145049,143274],{},[106,145051,145052],{"className":129904,"code":134061,"language":129906,"meta":112,"style":112},[114,145053,145054,145060,145076],{"__ignoreMap":112},[128,145055,145056,145058],{"class":130,"line":131},[128,145057,54994],{"class":54685},[128,145059,1959],{"class":138},[128,145061,145062,145064,145066,145068,145070,145072,145074],{"class":130,"line":142},[128,145063,74271],{"class":166},[128,145065,1967],{"class":138},[128,145067,2592],{"class":166},[128,145069,54875],{"class":134},[128,145071,54904],{"class":166},[128,145073,133296],{"class":166},[128,145075,4905],{"class":138},[128,145077,145078],{"class":130,"line":156},[128,145079,2694],{"class":138},[19,145081,143363],{},[106,145083,145084],{"className":129904,"code":134061,"language":129906,"meta":112,"style":112},[114,145085,145086,145092,145108],{"__ignoreMap":112},[128,145087,145088,145090],{"class":130,"line":131},[128,145089,54994],{"class":54685},[128,145091,1959],{"class":138},[128,145093,145094,145096,145098,145100,145102,145104,145106],{"class":130,"line":142},[128,145095,74271],{"class":166},[128,145097,1967],{"class":138},[128,145099,2592],{"class":166},[128,145101,54875],{"class":134},[128,145103,54904],{"class":166},[128,145105,133296],{"class":166},[128,145107,4905],{"class":138},[128,145109,145110],{"class":130,"line":156},[128,145111,2694],{"class":138},[19,145113,145114],{},"1号盒子 是一个 h3 标签，放标题",[4752,145116,145117],{},[29,145118,145119],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,145121,143274],{},[106,145123,145124],{"className":129904,"code":142574,"language":129906,"meta":112,"style":112},[114,145125,145126,145132,145142],{"__ignoreMap":112},[128,145127,145128,145130],{"class":130,"line":131},[128,145129,133752],{"class":199},[128,145131,1959],{"class":138},[128,145133,145134,145136,145138,145140],{"class":130,"line":142},[128,145135,134384],{"class":166},[128,145137,1967],{"class":138},[128,145139,27223],{"class":166},[128,145141,4905],{"class":138},[128,145143,145144],{"class":130,"line":156},[128,145145,2694],{"class":138},[19,145147,143363],{},[106,145149,145150],{"className":129904,"code":142574,"language":129906,"meta":112,"style":112},[114,145151,145152,145158,145168],{"__ignoreMap":112},[128,145153,145154,145156],{"class":130,"line":131},[128,145155,133752],{"class":199},[128,145157,1959],{"class":138},[128,145159,145160,145162,145164,145166],{"class":130,"line":142},[128,145161,134384],{"class":166},[128,145163,1967],{"class":138},[128,145165,27223],{"class":166},[128,145167,4905],{"class":138},[128,145169,145170],{"class":130,"line":156},[128,145171,2694],{"class":138},[19,145173,145174],{},"2号盒子 里面放注册的内容",[4752,145176,145177,145180,145189,145203,145216,145219,145222,145240,145254],{},[29,145178,145179],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[29,145181,145182,145183,145185,145186,145188],{},"里面的内容利用 ",[114,145184,4752],{}," 包含 ",[114,145187,29],{}," 来实现的（不需要用表格）",[29,145190,142418,145191,145193,145194,145196,145197,145199,145200,145202],{},[114,145192,29],{}," 里面，左侧放 ",[114,145195,37003],{}," 标签， 中间放",[114,145198,643],{}," 标签， 右侧放 ",[114,145201,128],{}," 提示信息",[29,145204,145205,145206,145208,145209,145211,145212,145215],{},"左侧 ",[114,145207,37003],{},"里面的文字都是右对齐，我们可以给",[114,145210,37003],{},"设置一个宽度（88px），然后利用",[114,145213,145214],{},"text-align"," 来设置右对齐",[29,145217,145218],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[29,145220,145221],{},"右侧 span修饰一下文字颜色",[29,145223,145224,145225],{},"提示信息的样式优化",[4752,145226,145227,145230,145233],{},[29,145228,145229],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[29,145231,145232],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[29,145234,145235,145236,145239],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[114,145237,145238],{},"vertical-algin"," 来设置 图片与文字对齐方式",[29,145241,145242,145243],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[4752,145244,145245,145251],{},[29,145246,145247,145248,145250],{},"设置 ",[114,145249,27040],{}," 的 左右 12px 的内边距，设置一下文字颜色",[29,145252,145253],{},"分别设置 背景颜色",[29,145255,145256,145257,145259],{},"同意协议 和 完成注册 都是用 ",[114,145258,29],{}," 进行包裹",[19,145261,143274],{},[106,145263,145264],{"className":129904,"code":143847,"language":129906,"meta":112,"style":112},[114,145265,145266,145272,145282],{"__ignoreMap":112},[128,145267,145268,145270],{"class":130,"line":131},[128,145269,54994],{"class":54685},[128,145271,1959],{"class":138},[128,145273,145274,145276,145278,145280],{"class":130,"line":142},[128,145275,74253],{"class":166},[128,145277,1967],{"class":138},[128,145279,143864],{"class":166},[128,145281,4905],{"class":138},[128,145283,145284],{"class":130,"line":156},[128,145285,2694],{"class":138},[19,145287,143363],{},[106,145289,145290],{"className":129904,"code":143847,"language":129906,"meta":112,"style":112},[114,145291,145292,145298,145308],{"__ignoreMap":112},[128,145293,145294,145296],{"class":130,"line":131},[128,145295,54994],{"class":54685},[128,145297,1959],{"class":138},[128,145299,145300,145302,145304,145306],{"class":130,"line":142},[128,145301,74253],{"class":166},[128,145303,1967],{"class":138},[128,145305,143864],{"class":166},[128,145307,4905],{"class":138},[128,145309,145310],{"class":130,"line":156},[128,145311,2694],{"class":138},[72,145313,145315],{"id":145314},"_1634-底部实现","16.3.4 底部实现",[19,145317,143274],{},[106,145319,145320],{"className":129904,"code":143847,"language":129906,"meta":112,"style":112},[114,145321,145322,145328,145338],{"__ignoreMap":112},[128,145323,145324,145326],{"class":130,"line":131},[128,145325,54994],{"class":54685},[128,145327,1959],{"class":138},[128,145329,145330,145332,145334,145336],{"class":130,"line":142},[128,145331,74253],{"class":166},[128,145333,1967],{"class":138},[128,145335,143864],{"class":166},[128,145337,4905],{"class":138},[128,145339,145340],{"class":130,"line":156},[128,145341,2694],{"class":138},[19,145343,143363],{},[106,145345,145346],{"className":130651,"code":134008,"language":130653,"meta":112,"style":112},[114,145347,145348,145352,145366,145370],{"__ignoreMap":112},[128,145349,145350],{"class":130,"line":131},[128,145351,134015],{"class":3814},[128,145353,145354,145356,145358,145360,145362,145364],{"class":130,"line":142},[128,145355,4657],{"class":138},[128,145357,54994],{"class":54685},[128,145359,56868],{"class":199},[128,145361,270],{"class":138},[128,145363,134028],{"class":176},[128,145365,54692],{"class":138},[128,145367,145368],{"class":130,"line":156},[128,145369,134035],{"class":138},[128,145371,145372,145374,145376],{"class":130,"line":163},[128,145373,55168],{"class":138},[128,145375,54994],{"class":54685},[128,145377,54692],{"class":138},[14,145379,145381],{"id":145380},"_164-项目总结","16.4 项目总结",[26,145383,145384,145387,145390,145393],{},[29,145385,145386],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[29,145388,145389],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[29,145391,145392],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[29,145394,145395],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[5074,145397],{"style":129760,"src":145398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[26,145400,145401],{"start":183},[29,145402,145403],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[5074,145405],{"style":129760,"src":145406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[26,145408,145409],{"start":188},[29,145410,145411],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[5074,145413],{"style":129760,"src":145414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[106,145416,145417],{"className":130651,"code":140061,"language":130653,"meta":112,"style":112},[114,145418,145419],{"__ignoreMap":112},[128,145420,145421,145423,145425,145427,145429,145431,145433,145435,145437,145439,145441,145443],{"class":130,"line":131},[128,145422,4657],{"class":138},[128,145424,643],{"class":54685},[128,145426,57205],{"class":199},[128,145428,270],{"class":138},[128,145430,66077],{"class":176},[128,145432,18442],{"class":199},[128,145434,270],{"class":138},[128,145436,140082],{"class":176},[128,145438,64399],{"class":199},[128,145440,270],{"class":138},[128,145442,140089],{"class":176},[128,145444,54692],{"class":138},[26,145446,145447,145450],{"start":193},[29,145448,145449],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[29,145451,145452],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[3659,145454,145455],{},"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":112,"searchDepth":142,"depth":142,"links":145457},[145458,145463,145470,145478],{"id":143084,"depth":142,"text":143085,"children":145459},[145460,145461,145462],{"id":143088,"depth":156,"text":143089},{"id":143819,"depth":156,"text":143820},{"id":144132,"depth":156,"text":144133},{"id":144432,"depth":142,"text":144433,"children":145464},[145465,145466,145468],{"id":144436,"depth":156,"text":144437},{"id":144454,"depth":156,"text":145467},"16.2.2 列表页 header 和 nav 修改",{"id":144738,"depth":156,"text":145469},"16.2.3 列表页主体 sk_container",{"id":144930,"depth":142,"text":144931,"children":145471},[145472,145473,145475,145477],{"id":144945,"depth":156,"text":144946},{"id":144957,"depth":156,"text":145474},"16.3.2 header 头部实现",{"id":145036,"depth":156,"text":145476},"16.3.3 registerarea 主体模块实现",{"id":145314,"depth":156,"text":145315},{"id":145380,"depth":142,"text":145381},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":143076,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":145485,"title":145486,"body":145487,"description":3686,"extension":3687,"meta":145595,"navigation":159,"path":145596,"seo":145597,"stem":145598,"__hash__":145599},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":145488,"toc":145590},[145489,145492,145496,145499,145502,145511,145520,145524,145529,145536,145554,145557,145560,145563,145566,145569,145572,145575,145578,145581,145584,145587],[10,145490,145486],{"id":145491},"_17-web服务器与网站发布",[14,145493,145495],{"id":145494},"_171-web服务器","17.1 Web服务器",[19,145497,145498],{},"把自己网站上传到服务器上，可以让其他人访问",[5074,145500],{"style":129760,"src":145501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,145503,145504,145507,145508],{},[3903,145505,145506],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[3903,145509,145510],{},"Web 服务器等",[19,145512,145513,145514,3330,145517,29226],{},"根据服务器在网络中所在的位置不同，又可分为 ",[3903,145515,145516],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[3903,145518,145519],{},"远程服务器",[72,145521,145523],{"id":145522},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,145525,145526],{},[3903,145527,145528],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,145530,145531,145532],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[3989,145533,145534],{"href":145534,"rel":145535},"http:\u002F\u002Ffree.3v.do\u002F",[27352],[4752,145537,145538,145541,145544,145551],{},[29,145539,145540],{},"去免费空间网站注册账号。",[29,145542,145543],{},"记录下主机名、用户名、密码、域名。",[29,145545,145546,145547,145550],{},"利用 ",[114,145548,145549],{},"utftp"," 软件 上传网站到远程服务器",[29,145552,145553],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,145555,145556],{},"使用软件上传，对上传软件文件进行解压",[5074,145558],{"style":129760,"src":145559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[5074,145561],{"style":129760,"src":145562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,145564,145565],{},"输入刚刚申请的服务器账号信息：",[5074,145567],{"style":129760,"src":145568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[5074,145570],{"style":129760,"src":145571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[5074,145573],{"style":129760,"src":145574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[5074,145576],{"style":129760,"src":145577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,145579,145580],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[5074,145582],{"style":129760,"src":145583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,145585,145586],{},"浏览器输入域名即可访问",[19,145588,145589],{},"首页一定必须是index",{"title":112,"searchDepth":142,"depth":142,"links":145591},[145592],{"id":145494,"depth":142,"text":145495,"children":145593},[145594],{"id":145522,"depth":156,"text":145523},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":145486,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":145601,"title":145602,"body":145603,"description":3686,"extension":3687,"meta":146530,"navigation":159,"path":146531,"seo":146532,"stem":146533,"__hash__":146534},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":145604,"toc":146513},[145605,145608,145612,145615,145618,145629,145632,145636,145640,145645,145648,145651,145654,145657,145661,145687,145691,145695,145698,145701,145705,145738,145742,145745,145748,145812,145816,145820,145823,145826,145829,145833,145878,145882,145885,145915,145919,145923,145926,145929,145933,145936,146005,146008,146116,146118,146124,146128,146131,146134,146230,146233,146237,146261,146265,146268,146272,146275,146279,146282,146285,146288,146291,146295,146298,146301,146305,146309,146312,146315,146318,146321,146325,146328,146332,146335,146338,146383,146387,146391,146394,146397,146400,146432,146436,146439,146473,146477,146480,146510],[10,145606,145602],{"id":145607},"_18-2d动画与3d转换",[14,145609,145611],{"id":145610},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,145613,145614],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,145616,145617],{},"转换（transform）你可以简单理解为变形",[4752,145619,145620,145623,145626],{},[29,145621,145622],{},"移动：translate",[29,145624,145625],{},"旋转：rotate",[29,145627,145628],{},"缩放：scale",[5074,145630],{"style":129760,"src":145631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[72,145633,145635],{"id":145634},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[25485,145637,145639],{"id":145638},"_18111-translate介绍","18.1.1.1 translate介绍",[19,145641,145642,145643],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[3903,145644,136563],{},[5074,145646],{"style":129760,"src":145647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,145649,145650],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,145652,145653],{},"对于行内元素无效",[19,145655,145656],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[25485,145658,145660],{"id":145659},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[106,145662,145663],{"className":129904,"code":142093,"language":129906,"meta":112,"style":112},[114,145664,145665,145671,145683],{"__ignoreMap":112},[128,145666,145667,145669],{"class":130,"line":131},[128,145668,54994],{"class":54685},[128,145670,1959],{"class":138},[128,145672,145673,145675,145677,145679,145681],{"class":130,"line":142},[128,145674,73845],{"class":166},[128,145676,1967],{"class":138},[128,145678,2452],{"class":166},[128,145680,54939],{"class":166},[128,145682,4905],{"class":138},[128,145684,145685],{"class":130,"line":156},[128,145686,2694],{"class":138},[72,145688,145690],{"id":145689},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[25485,145692,145694],{"id":145693},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,145696,145697],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[5074,145699],{"style":129760,"src":145700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[25485,145702,145704],{"id":145703},"_18122-旋转效果","18.1.2.2 旋转效果",[106,145706,145708],{"className":129904,"code":145707,"language":129906,"meta":112,"style":112},"div {\n  transform: rotate(45deg);\n}\n",[114,145709,145710,145716,145734],{"__ignoreMap":112},[128,145711,145712,145714],{"class":130,"line":131},[128,145713,54994],{"class":54685},[128,145715,1959],{"class":138},[128,145717,145718,145720,145722,145725,145727,145729,145732],{"class":130,"line":142},[128,145719,139888],{"class":166},[128,145721,1967],{"class":138},[128,145723,145724],{"class":166},"rotate",[128,145726,253],{"class":138},[128,145728,4278],{"class":166},[128,145730,145731],{"class":134},"deg",[128,145733,6292],{"class":138},[128,145735,145736],{"class":130,"line":156},[128,145737,2694],{"class":138},[25485,145739,145741],{"id":145740},"_18123-三角做法","18.1.2.3 三角做法",[19,145743,145744],{},"该下标当经过最外层大盒子时会实现向上反转",[5074,145746],{"style":129760,"src":145747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[106,145749,145750],{"className":129904,"code":138424,"language":129906,"meta":112,"style":112},[114,145751,145752,145756,145762,145772,145782,145798,145808],{"__ignoreMap":112},[128,145753,145754],{"class":130,"line":131},[128,145755,138431],{"class":3814},[128,145757,145758,145760],{"class":130,"line":142},[128,145759,138436],{"class":199},[128,145761,1959],{"class":138},[128,145763,145764,145766,145768,145770],{"class":130,"line":156},[128,145765,73943],{"class":166},[128,145767,1967],{"class":138},[128,145769,2452],{"class":166},[128,145771,4905],{"class":138},[128,145773,145774,145776,145778,145780],{"class":130,"line":163},[128,145775,74163],{"class":166},[128,145777,1967],{"class":138},[128,145779,2452],{"class":166},[128,145781,4905],{"class":138},[128,145783,145784,145786,145788,145790,145792,145794,145796],{"class":130,"line":183},[128,145785,74271],{"class":166},[128,145787,1967],{"class":138},[128,145789,4196],{"class":166},[128,145791,54875],{"class":134},[128,145793,54904],{"class":166},[128,145795,67369],{"class":166},[128,145797,4905],{"class":138},[128,145799,145800,145802,145804,145806],{"class":130,"line":188},[128,145801,138479],{"class":166},[128,145803,1967],{"class":138},[128,145805,65748],{"class":166},[128,145807,4905],{"class":138},[128,145809,145810],{"class":130,"line":193},[128,145811,2694],{"class":138},[72,145813,145815],{"id":145814},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[25485,145817,145819],{"id":145818},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,145821,145822],{},"设置中心点",[5074,145824],{"style":129760,"src":145825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,145827,145828],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[25485,145830,145832],{"id":145831},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[106,145834,145836],{"className":129904,"code":145835,"language":129906,"meta":112,"style":112},"\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",[114,145837,145838,145843,145849,145864,145869,145874],{"__ignoreMap":112},[128,145839,145840],{"class":130,"line":131},[128,145841,145842],{"class":3814},"\u002F* 转换中心点 *\u002F\n",[128,145844,145845,145847],{"class":130,"line":142},[128,145846,54994],{"class":54685},[128,145848,1959],{"class":138},[128,145850,145851,145854,145856,145858,145860,145862],{"class":130,"line":156},[128,145852,145853],{"class":166},"  transform-origin",[128,145855,1967],{"class":138},[128,145857,54975],{"class":166},[128,145859,20631],{"class":166},[128,145861,133767],{"class":138},[128,145863,138577],{"class":3814},[128,145865,145866],{"class":130,"line":163},[128,145867,145868],{"class":3814},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[128,145870,145871],{"class":130,"line":183},[128,145872,145873],{"class":3814},"  \u002F* transform-origin: left top; *\u002F\n",[128,145875,145876],{"class":130,"line":188},[128,145877,2694],{"class":138},[25485,145879,145881],{"id":145880},"_18133-旋转案例","18.1.3.3 旋转案例",[5074,145883],{"style":129760,"src":145884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[106,145886,145887],{"className":129904,"code":145707,"language":129906,"meta":112,"style":112},[114,145888,145889,145895,145911],{"__ignoreMap":112},[128,145890,145891,145893],{"class":130,"line":131},[128,145892,54994],{"class":54685},[128,145894,1959],{"class":138},[128,145896,145897,145899,145901,145903,145905,145907,145909],{"class":130,"line":142},[128,145898,139888],{"class":166},[128,145900,1967],{"class":138},[128,145902,145724],{"class":166},[128,145904,253],{"class":138},[128,145906,4278],{"class":166},[128,145908,145731],{"class":134},[128,145910,6292],{"class":138},[128,145912,145913],{"class":130,"line":156},[128,145914,2694],{"class":138},[72,145916,145918],{"id":145917},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[25485,145920,145922],{"id":145921},"_18141-scale介绍","18.1.4.1 scale介绍",[19,145924,145925],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[5074,145927],{"style":129760,"src":145928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[25485,145930,145932],{"id":145931},"_18142-分页按钮","18.1.4.2 分页按钮",[5074,145934],{"style":129760,"src":145935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[106,145937,145939],{"className":129904,"code":145938,"language":129906,"meta":112,"style":112},"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",[114,145940,145941,145947,145963,145967,145971,145976,145982,145996,146001],{"__ignoreMap":112},[128,145942,145943,145945],{"class":130,"line":131},[128,145944,54994],{"class":54685},[128,145946,1959],{"class":138},[128,145948,145949,145951,145953,145956,145958,145961],{"class":130,"line":142},[128,145950,139888],{"class":166},[128,145952,1967],{"class":138},[128,145954,145955],{"class":166},"scale",[128,145957,253],{"class":138},[128,145959,145960],{"class":166},"1.2",[128,145962,6292],{"class":138},[128,145964,145965],{"class":130,"line":156},[128,145966,2694],{"class":138},[128,145968,145969],{"class":130,"line":163},[128,145970,139365],{"class":138},[128,145972,145973],{"class":130,"line":183},[128,145974,145975],{"class":3814},"\u002F* 2D 缩放 *\u002F\n",[128,145977,145978,145980],{"class":130,"line":188},[128,145979,54994],{"class":54685},[128,145981,1959],{"class":138},[128,145983,145984,145986,145988,145990,145992,145994],{"class":130,"line":193},[128,145985,139888],{"class":166},[128,145987,1967],{"class":138},[128,145989,145955],{"class":166},[128,145991,253],{"class":138},[128,145993,145960],{"class":166},[128,145995,6292],{"class":138},[128,145997,145998],{"class":130,"line":206},[128,145999,146000],{"class":3814},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[128,146002,146003],{"class":130,"line":221},[128,146004,2694],{"class":138},[19,146006,146007],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[106,146009,146011],{"className":129904,"code":146010,"language":129906,"meta":112,"style":112},"\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",[114,146012,146013,146018,146028,146049,146070,146074,146079,146085,146112],{"__ignoreMap":112},[128,146014,146015],{"class":130,"line":131},[128,146016,146017],{"class":3814},"\u002F* 定义动画 *\u002F\n",[128,146019,146020,146023,146026],{"class":130,"line":142},[128,146021,146022],{"class":134},"@keyframes",[128,146024,146025],{"class":266}," move",[128,146027,1959],{"class":138},[128,146029,146030,146033,146035,146037,146039,146042,146044,146046],{"class":130,"line":156},[128,146031,146032],{"class":199},"  0%",[128,146034,83181],{"class":138},[128,146036,51519],{"class":166},[128,146038,1967],{"class":138},[128,146040,146041],{"class":166},"translateX",[128,146043,253],{"class":138},[128,146045,2452],{"class":166},[128,146047,146048],{"class":138},"); }\n",[128,146050,146051,146054,146056,146058,146060,146062,146064,146066,146068],{"class":130,"line":163},[128,146052,146053],{"class":199},"  100%",[128,146055,83181],{"class":138},[128,146057,51519],{"class":166},[128,146059,1967],{"class":138},[128,146061,146041],{"class":166},[128,146063,253],{"class":138},[128,146065,4061],{"class":166},[128,146067,54875],{"class":134},[128,146069,146048],{"class":138},[128,146071,146072],{"class":130,"line":183},[128,146073,2694],{"class":138},[128,146075,146076],{"class":130,"line":188},[128,146077,146078],{"class":3814},"\u002F* 调用动画 *\u002F\n",[128,146080,146081,146083],{"class":130,"line":193},[128,146082,54994],{"class":54685},[128,146084,1959],{"class":138},[128,146086,146087,146090,146092,146094,146096,146098,146100,146102,146104,146107,146110],{"class":130,"line":206},[128,146088,146089],{"class":166},"  animation",[128,146091,1967],{"class":138},[128,146093,138590],{"class":166},[128,146095,28605],{"class":166},[128,146097,4444],{"class":134},[128,146099,82054],{"class":166},[128,146101,7659],{"class":166},[128,146103,4444],{"class":134},[128,146105,146106],{"class":166}," infinite",[128,146108,146109],{"class":166}," alternate",[128,146111,4905],{"class":138},[128,146113,146114],{"class":130,"line":221},[128,146115,2694],{"class":138},[19,146117,146007],{},[106,146119,146122],{"className":146120,"code":146121,"language":111},[109],"\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",[114,146123,146121],{"__ignoreMap":112},[25485,146125,146127],{"id":146126},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,146129,146130],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[5074,146132],{"style":129760,"src":146133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[106,146135,146136],{"className":129904,"code":146010,"language":129906,"meta":112,"style":112},[114,146137,146138,146142,146150,146168,146188,146192,146196,146202,146226],{"__ignoreMap":112},[128,146139,146140],{"class":130,"line":131},[128,146141,146017],{"class":3814},[128,146143,146144,146146,146148],{"class":130,"line":142},[128,146145,146022],{"class":134},[128,146147,146025],{"class":266},[128,146149,1959],{"class":138},[128,146151,146152,146154,146156,146158,146160,146162,146164,146166],{"class":130,"line":156},[128,146153,146032],{"class":199},[128,146155,83181],{"class":138},[128,146157,51519],{"class":166},[128,146159,1967],{"class":138},[128,146161,146041],{"class":166},[128,146163,253],{"class":138},[128,146165,2452],{"class":166},[128,146167,146048],{"class":138},[128,146169,146170,146172,146174,146176,146178,146180,146182,146184,146186],{"class":130,"line":163},[128,146171,146053],{"class":199},[128,146173,83181],{"class":138},[128,146175,51519],{"class":166},[128,146177,1967],{"class":138},[128,146179,146041],{"class":166},[128,146181,253],{"class":138},[128,146183,4061],{"class":166},[128,146185,54875],{"class":134},[128,146187,146048],{"class":138},[128,146189,146190],{"class":130,"line":183},[128,146191,2694],{"class":138},[128,146193,146194],{"class":130,"line":188},[128,146195,146078],{"class":3814},[128,146197,146198,146200],{"class":130,"line":193},[128,146199,54994],{"class":54685},[128,146201,1959],{"class":138},[128,146203,146204,146206,146208,146210,146212,146214,146216,146218,146220,146222,146224],{"class":130,"line":206},[128,146205,146089],{"class":166},[128,146207,1967],{"class":138},[128,146209,138590],{"class":166},[128,146211,28605],{"class":166},[128,146213,4444],{"class":134},[128,146215,82054],{"class":166},[128,146217,7659],{"class":166},[128,146219,4444],{"class":134},[128,146221,146106],{"class":166},[128,146223,146109],{"class":166},[128,146225,4905],{"class":138},[128,146227,146228],{"class":130,"line":221},[128,146229,2694],{"class":138},[19,146231,146232],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[72,146234,146236],{"id":146235},"_1823-知识点回顾","18.2.3 知识点回顾",[106,146238,146239],{"className":129904,"code":132073,"language":129906,"meta":112,"style":112},[114,146240,146241,146247,146257],{"__ignoreMap":112},[128,146242,146243,146245],{"class":130,"line":131},[128,146244,54994],{"class":54685},[128,146246,1959],{"class":138},[128,146248,146249,146251,146253,146255],{"class":130,"line":142},[128,146250,132086],{"class":166},[128,146252,1967],{"class":138},[128,146254,65115],{"class":166},[128,146256,4905],{"class":138},[128,146258,146259],{"class":130,"line":156},[128,146260,2694],{"class":138},[14,146262,146264],{"id":146263},"_183-3d-转换","18.3 3D 转换",[19,146266,146267],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[72,146269,146271],{"id":146270},"_1831-坐标轴认识","18.3.1 坐标轴认识",[5074,146273],{"style":129760,"src":146274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[72,146276,146278],{"id":146277},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[5074,146280],{"style":129760,"src":146281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,146283,146284],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,146286,146287],{},"translate3d的效果需要搭配透视perspective来使用",[5074,146289],{"style":129760,"src":146290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[72,146292,146294],{"id":146293},"_1833-透视-perspective","18.3.3 透视 perspective",[5074,146296],{"style":129760,"src":146297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,146299,146300],{},"透视写在父盒子上，单位为像素",[72,146302,146304],{"id":146303},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[25485,146306,146308],{"id":146307},"_18341-分开解释","18.3.4.1 分开解释",[5074,146310],{"style":129760,"src":146311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[5074,146313],{"style":129760,"src":146314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[5074,146316],{"style":129760,"src":146317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,146319,146320],{},"总结来说就是左手原则",[25485,146322,146324],{"id":146323},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[5074,146326],{"style":129760,"src":146327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[72,146329,146331],{"id":146330},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[5074,146333],{"style":129760,"src":146334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[5074,146336],{"style":129760,"src":146337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[106,146339,146341],{"className":129904,"code":146340,"language":129906,"meta":112,"style":112},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[114,146342,146343,146349,146362,146379],{"__ignoreMap":112},[128,146344,146345,146347],{"class":130,"line":131},[128,146346,54994],{"class":54685},[128,146348,1959],{"class":138},[128,146350,146351,146354,146356,146358,146360],{"class":130,"line":142},[128,146352,146353],{"class":166},"  perspective",[128,146355,1967],{"class":138},[128,146357,68452],{"class":166},[128,146359,54875],{"class":134},[128,146361,4905],{"class":138},[128,146363,146364,146366,146368,146371,146373,146375,146377],{"class":130,"line":156},[128,146365,139888],{"class":166},[128,146367,1967],{"class":138},[128,146369,146370],{"class":166},"rotateX",[128,146372,253],{"class":138},[128,146374,4278],{"class":166},[128,146376,145731],{"class":134},[128,146378,6292],{"class":138},[128,146380,146381],{"class":130,"line":163},[128,146382,2694],{"class":138},[72,146384,146386],{"id":146385},"_1836-案例","18.3.6 案例",[25485,146388,146390],{"id":146389},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[5074,146392],{"style":129760,"src":146393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[5074,146395],{"style":129760,"src":146396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[5074,146398],{"style":129760,"src":146399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[106,146401,146403],{"className":129904,"code":146402,"language":129906,"meta":112,"style":112},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[114,146404,146405,146410,146416,146428],{"__ignoreMap":112},[128,146406,146407],{"class":130,"line":131},[128,146408,146409],{"class":3814},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[128,146411,146412,146414],{"class":130,"line":142},[128,146413,136901],{"class":199},[128,146415,1959],{"class":138},[128,146417,146418,146420,146422,146424,146426],{"class":130,"line":156},[128,146419,146353],{"class":166},[128,146421,1967],{"class":138},[128,146423,68452],{"class":166},[128,146425,54875],{"class":134},[128,146427,4905],{"class":138},[128,146429,146430],{"class":130,"line":163},[128,146431,2694],{"class":138},[25485,146433,146435],{"id":146434},"_18362-3d导航栏","18.3.6.2 3D导航栏",[5074,146437],{"style":129760,"src":146438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[106,146440,146441],{"className":130651,"code":134008,"language":130653,"meta":112,"style":112},[114,146442,146443,146447,146461,146465],{"__ignoreMap":112},[128,146444,146445],{"class":130,"line":131},[128,146446,134015],{"class":3814},[128,146448,146449,146451,146453,146455,146457,146459],{"class":130,"line":142},[128,146450,4657],{"class":138},[128,146452,54994],{"class":54685},[128,146454,56868],{"class":199},[128,146456,270],{"class":138},[128,146458,134028],{"class":176},[128,146460,54692],{"class":138},[128,146462,146463],{"class":130,"line":156},[128,146464,134035],{"class":138},[128,146466,146467,146469,146471],{"class":130,"line":163},[128,146468,55168],{"class":138},[128,146470,54994],{"class":54685},[128,146472,54692],{"class":138},[25485,146474,146476],{"id":146475},"_18363-旋转木马","18.3.6.3 旋转木马",[5074,146478],{"style":129760,"src":146479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[106,146481,146482],{"className":129904,"code":145707,"language":129906,"meta":112,"style":112},[114,146483,146484,146490,146506],{"__ignoreMap":112},[128,146485,146486,146488],{"class":130,"line":131},[128,146487,54994],{"class":54685},[128,146489,1959],{"class":138},[128,146491,146492,146494,146496,146498,146500,146502,146504],{"class":130,"line":142},[128,146493,139888],{"class":166},[128,146495,1967],{"class":138},[128,146497,145724],{"class":166},[128,146499,253],{"class":138},[128,146501,4278],{"class":166},[128,146503,145731],{"class":134},[128,146505,6292],{"class":138},[128,146507,146508],{"class":130,"line":156},[128,146509,2694],{"class":138},[3659,146511,146512],{},"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":112,"searchDepth":142,"depth":142,"links":146514},[146515,146522],{"id":145610,"depth":142,"text":145611,"children":146516},[146517,146518,146519,146520,146521],{"id":145634,"depth":156,"text":145635},{"id":145689,"depth":156,"text":145690},{"id":145814,"depth":156,"text":145815},{"id":145917,"depth":156,"text":145918},{"id":146235,"depth":156,"text":146236},{"id":146263,"depth":142,"text":146264,"children":146523},[146524,146525,146526,146527,146528,146529],{"id":146270,"depth":156,"text":146271},{"id":146277,"depth":156,"text":146278},{"id":146293,"depth":156,"text":146294},{"id":146303,"depth":156,"text":146304},{"id":146330,"depth":156,"text":146331},{"id":146385,"depth":156,"text":146386},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":145602,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":146536,"title":146537,"body":146538,"description":3686,"extension":3687,"meta":146741,"navigation":159,"path":146742,"seo":146743,"stem":146744,"__hash__":146745},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":146539,"toc":146730},[146540,146543,146547,146550,146553,146557,146560,146563,146566,146570,146573,146577,146580,146584,146587,146591,146605,146609,146634,146637,146640,146657,146661,146665,146668,146671,146675,146678,146681,146699,146703,146706,146720,146724,146727],[10,146541,146537],{"id":146542},"_19-移动端基础-前缀现状与视口",[14,146544,146546],{"id":146545},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[5074,146548],{"style":129760,"src":146549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,146551,146552],{},"意思就是加个前缀，增加兼容性",[14,146554,146556],{"id":146555},"_192-移动端现状认识","19.2 移动端现状认识",[5074,146558],{"style":129760,"src":146559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,146561,146562],{},"调试方法：",[5074,146564],{"style":129760,"src":146565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,146567,146569],{"id":146568},"_193-视口","19.3 视口",[19,146571,146572],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[72,146574,146576],{"id":146575},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[5074,146578],{"style":129760,"src":146579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[72,146581,146583],{"id":146582},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[5074,146585],{"style":129760,"src":146586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[72,146588,146590],{"id":146589},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[4752,146592,146593,146596,146599,146602],{},[29,146594,146595],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[29,146597,146598],{},"理想视口，对设备来讲，是最理想的视口尺寸",[29,146600,146601],{},"需要手动添写meta视口标签通知浏览器操作",[29,146603,146604],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[72,146606,146608],{"id":146607},"_1934-meta视口标签","19.3.4 meta视口标签",[106,146610,146612],{"className":130651,"code":146611,"language":130653,"meta":112,"style":112},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[114,146613,146614],{"__ignoreMap":112},[128,146615,146616,146618,146620,146622,146624,146626,146628,146630,146632],{"class":130,"line":131},[128,146617,4657],{"class":138},[128,146619,54729],{"class":54685},[128,146621,18442],{"class":199},[128,146623,270],{"class":138},[128,146625,54776],{"class":176},[128,146627,54756],{"class":199},[128,146629,270],{"class":138},[128,146631,54783],{"class":176},[128,146633,54692],{"class":138},[5074,146635],{"style":129760,"src":146636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,146638,146639],{},"标准视口设置：",[26,146641,146642,146645,146648,146651,146654],{},[29,146643,146644],{},"视口宽度和设备保持一致",[29,146646,146647],{},"视口的默认缩放比例1.0",[29,146649,146650],{},"不允许用户自行缩放",[29,146652,146653],{},"最大允许的缩放比例1.0",[29,146655,146656],{},"最小允许的缩放比例1.0",[72,146658,146660],{"id":146659},"_1935-二倍图","19.3.5 二倍图",[25485,146662,146664],{"id":146663},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[5074,146666],{"style":129760,"src":146667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[5074,146669],{"style":129760,"src":146670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[25485,146672,146674],{"id":146673},"_19352-多倍图","19.3.5.2 多倍图",[5074,146676],{"style":129760,"src":146677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,146679,146680],{},"二倍图法，代码如下：",[106,146682,146684],{"className":129904,"code":146683,"language":129906,"meta":112,"style":112},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[114,146685,146686,146691],{"__ignoreMap":112},[128,146687,146688],{"class":130,"line":131},[128,146689,146690],{"class":3814},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[128,146692,146693,146696],{"class":130,"line":142},[128,146694,146695],{"class":54685},"background-size",[128,146697,146698],{"class":138},": 50% 50%;\n",[25485,146700,146702],{"id":146701},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[5074,146704],{"style":129760,"src":146705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[26,146707,146708,146711,146714,146717],{},[29,146709,146710],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[29,146712,146713],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[29,146715,146716],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[29,146718,146719],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[25485,146721,146723],{"id":146722},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[5074,146725],{"style":129760,"src":146726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[3659,146728,146729],{},"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":112,"searchDepth":142,"depth":142,"links":146731},[146732,146733,146734],{"id":146545,"depth":142,"text":146546},{"id":146555,"depth":142,"text":146556},{"id":146568,"depth":142,"text":146569,"children":146735},[146736,146737,146738,146739,146740],{"id":146575,"depth":156,"text":146576},{"id":146582,"depth":156,"text":146583},{"id":146589,"depth":156,"text":146590},{"id":146607,"depth":156,"text":146608},{"id":146659,"depth":156,"text":146660},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":146537,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":146747,"title":146748,"body":146749,"description":3686,"extension":3687,"meta":147626,"navigation":159,"path":147627,"seo":147628,"stem":147629,"__hash__":147630},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":146750,"toc":147610},[146751,146754,146758,146765,146768,146775,146778,146783,146786,146790,146794,146801,146804,146807,146811,146814,146817,146820,146823,146826,146830,146833,146837,146839,146842,146845,146848,146851,146853,146856,146858,146888,146890,146920,146924,146927,146931,146934,146951,146954,146957,147033,147035,147038,147041,147044,147047,147049,147052,147055,147059,147081,147084,147087,147091,147094,147100,147103,147107,147110,147113,147117,147120,147123,147126,147130,147133,147136,147139,147142,147146,147149,147153,147160,147163,147166,147169,147172,147182,147185,147188,147195,147198,147202,147205,147208,147212,147215,147218,147221,147266,147269,147272,147275,147277,147406,147408,147446,147449,147452,147454,147572,147574,147608],[10,146752,146748],{"id":146753},"_20-移动端布局实战上篇",[14,146755,146757],{"id":146756},"_201-移动端主流方案","20.1 移动端主流方案",[26,146759,146760],{},[29,146761,146762],{},[3903,146763,146764],{},"单独移动端页面（主流）",[5074,146766],{"style":129760,"src":146767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[26,146769,146770],{"start":142},[29,146771,146772],{},[3903,146773,146774],{},"响应式兼容PC移动端",[5074,146776],{"style":129760,"src":146777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[26,146779,146780],{"start":156},[29,146781,146782],{},"两种页面选型布局方式",[5074,146784],{"style":129760,"src":146785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,146787,146789],{"id":146788},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[72,146791,146793],{"id":146792},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,146795,146796,146797],{},"官网地址： ",[3989,146798,146799],{"href":146799,"rel":146800},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[27352],[5074,146802],{"style":129760,"src":146803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[5074,146805],{"style":129760,"src":146806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[72,146808,146810],{"id":146809},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[5074,146812],{"style":129760,"src":146813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[5074,146815],{"style":129760,"src":146816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,146818,146819],{},"去除高亮：",[19,146821,146822],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,146824,146825],{},"-webkit- tap-highlight-color: transparent;",[14,146827,146829],{"id":146828},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[5074,146831],{"style":129760,"src":146832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,146834,146836],{"id":146835},"_204-流式布局案例","20.4 流式布局案例",[19,146838,3788],{},[19,146840,146841],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,146843,146844],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,146846,146847],{},"图片格式：",[5074,146849],{"style":129760,"src":146850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,146852,138947],{},[5074,146854],{"style":129760,"src":146855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,146857,143274],{},[106,146859,146860],{"className":130651,"code":137406,"language":130653,"meta":112,"style":112},[114,146861,146862],{"__ignoreMap":112},[128,146863,146864,146866,146868,146870,146872,146874,146876,146878,146880,146882,146884,146886],{"class":130,"line":131},[128,146865,4657],{"class":138},[128,146867,5074],{"class":54685},[128,146869,58620],{"class":199},[128,146871,270],{"class":138},[128,146873,137421],{"class":176},[128,146875,58628],{"class":199},[128,146877,270],{"class":138},[128,146879,137428],{"class":176},[128,146881,137431],{"class":199},[128,146883,270],{"class":138},[128,146885,137436],{"class":176},[128,146887,54692],{"class":138},[19,146889,143363],{},[106,146891,146892],{"className":130651,"code":137406,"language":130653,"meta":112,"style":112},[114,146893,146894],{"__ignoreMap":112},[128,146895,146896,146898,146900,146902,146904,146906,146908,146910,146912,146914,146916,146918],{"class":130,"line":131},[128,146897,4657],{"class":138},[128,146899,5074],{"class":54685},[128,146901,58620],{"class":199},[128,146903,270],{"class":138},[128,146905,137421],{"class":176},[128,146907,58628],{"class":199},[128,146909,270],{"class":138},[128,146911,137428],{"class":176},[128,146913,137431],{"class":199},[128,146915,270],{"class":138},[128,146917,137436],{"class":176},[128,146919,54692],{"class":138},[14,146921,146923],{"id":146922},"_205-flex布局","20.5 flex布局",[5074,146925],{"style":129760,"src":146926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[72,146928,146930],{"id":146929},"_2051-布局原理","20.5.1 布局原理",[19,146932,146933],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[4752,146935,146936,146939,146942,146945,146948],{},[29,146937,146938],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[29,146940,146941],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[29,146943,146944],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[29,146946,146947],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[29,146949,146950],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,146952,146953],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,146955,146956],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[106,146958,146960],{"className":129904,"code":146959,"language":129906,"meta":112,"style":112},"\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",[114,146961,146962,146967,146974,146984,146996,147007,147018,147029],{"__ignoreMap":112},[128,146963,146964],{"class":130,"line":131},[128,146965,146966],{"class":3814},"\u002F* Flex 弹性布局 *\u002F\n",[128,146968,146969,146972],{"class":130,"line":142},[128,146970,146971],{"class":199},".container",[128,146973,1959],{"class":138},[128,146975,146976,146978,146980,146982],{"class":130,"line":156},[128,146977,131520],{"class":166},[128,146979,1967],{"class":138},[128,146981,54860],{"class":166},[128,146983,4905],{"class":138},[128,146985,146986,146989,146991,146994],{"class":130,"line":163},[128,146987,146988],{"class":166},"  flex-direction",[128,146990,1967],{"class":138},[128,146992,146993],{"class":166},"row",[128,146995,4905],{"class":138},[128,146997,146998,147001,147003,147005],{"class":130,"line":183},[128,146999,147000],{"class":166},"  justify-content",[128,147002,1967],{"class":138},[128,147004,55051],{"class":166},[128,147006,4905],{"class":138},[128,147008,147009,147012,147014,147016],{"class":130,"line":188},[128,147010,147011],{"class":166},"  align-items",[128,147013,1967],{"class":138},[128,147015,54975],{"class":166},[128,147017,4905],{"class":138},[128,147019,147020,147023,147025,147027],{"class":130,"line":193},[128,147021,147022],{"class":166},"  flex-wrap",[128,147024,1967],{"class":138},[128,147026,81984],{"class":166},[128,147028,4905],{"class":138},[128,147030,147031],{"class":130,"line":206},[128,147032,2694],{"class":138},[19,147034,73828],{},[19,147036,147037],{},".form-item .male-label {",[19,147039,147040],{},"   margin-right: 20px;",[19,147042,147043],{},"   display: inline-flex;",[19,147045,147046],{},"   align-items: center;",[19,147048,1453],{},[5074,147050],{"style":129760,"src":147051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[5074,147053],{"style":129760,"src":147054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[72,147056,147058],{"id":147057},"_2052-常见父项属性","20.5.2 常见父项属性",[26,147060,147061,147064,147067,147070,147073,147076,147079],{},[29,147062,147063],{},"flex-direction：设置主轴的方向",[29,147065,147066],{},"justify-content：设置主轴上的子元素排列方式",[29,147068,147069],{},"flex-wrap：设置子元素是否换行",[29,147071,147072],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[29,147074,147075],{},"align-items：设置侧轴上的子元素排列方式（单行）",[29,147077,147078],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[29,147080,147063],{},[5074,147082],{"style":129760,"src":147083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[5074,147085],{"style":129760,"src":147086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[26,147088,147089],{"start":142},[29,147090,147066],{},[5074,147092],{"style":129760,"src":147093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,147095,147096,147099],{},[114,147097,147098],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,147101,147102],{},"跟着主轴走",[26,147104,147105],{"start":156},[29,147106,147069],{},[5074,147108],{"style":129760,"src":147109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,147111,147112],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[26,147114,147115],{"start":163},[29,147116,147072],{},[5074,147118],{"style":129760,"src":147119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,147121,147122],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,147124,147125],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[26,147127,147128],{"start":183},[29,147129,147075],{},[5074,147131],{"style":129760,"src":147132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,147134,147135],{},"align-items与align-content之间的区别：",[19,147137,147138],{},"单找items，多找content",[5074,147140],{"style":129760,"src":147141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[26,147143,147144],{"start":188},[29,147145,147078],{},[5074,147147],{"style":129760,"src":147148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[72,147150,147152],{"id":147151},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[26,147154,147155],{},[29,147156,147157],{},[3903,147158,147159],{},"flex 属性",[19,147161,147162],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[5074,147164],{"style":129760,"src":147165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,147167,147168],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,147170,147171],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[26,147173,147174],{"start":142},[29,147175,147176,17319,147179],{},[3903,147177,147178],{},"align-self",[3903,147180,147181],{},"控制子项自己在侧轴上的排列方式",[5074,147183],{"style":129760,"src":147184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,147186,147187],{},"单个子盒子在父盒子侧轴上的排列方式",[26,147189,147190],{"start":156},[29,147191,147192,147194],{},[3903,147193,98666],{}," 属性定义项目的排列顺序",[5074,147196],{"style":129760,"src":147197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[72,147199,147201],{"id":147200},"_2054-背景线性渐变","20.5.4 背景线性渐变",[5074,147203],{"style":129760,"src":147204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,147206,147207],{},"必须要添加浏览器的私有前缀",[72,147209,147211],{"id":147210},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,147213,147214],{},"学到最重要的知识：",[19,147216,147217],{},"flex处理这样的布局思路",[5074,147219],{"style":129760,"src":147220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[106,147222,147224],{"className":129904,"code":147223,"language":129906,"meta":112,"style":112},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[114,147225,147226,147232,147242,147252,147262],{"__ignoreMap":112},[128,147227,147228,147230],{"class":130,"line":131},[128,147229,146971],{"class":199},[128,147231,1959],{"class":138},[128,147233,147234,147236,147238,147240],{"class":130,"line":142},[128,147235,131520],{"class":166},[128,147237,1967],{"class":138},[128,147239,54860],{"class":166},[128,147241,4905],{"class":138},[128,147243,147244,147246,147248,147250],{"class":130,"line":156},[128,147245,147000],{"class":166},[128,147247,1967],{"class":138},[128,147249,54975],{"class":166},[128,147251,4905],{"class":138},[128,147253,147254,147256,147258,147260],{"class":130,"line":163},[128,147255,147011],{"class":166},[128,147257,1967],{"class":138},[128,147259,54975],{"class":166},[128,147261,4905],{"class":138},[128,147263,147264],{"class":130,"line":183},[128,147265,2694],{"class":138},[19,147267,147268],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,147270,147271],{},"使用属性选择器",[5074,147273],{"style":129760,"src":147274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,147276,72267],{},[106,147278,147280],{"className":130651,"code":147279,"language":130653,"meta":112,"style":112},"\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",[114,147281,147282,147287,147301,147306,147326,147331,147350,147355,147374,147379,147398],{"__ignoreMap":112},[128,147283,147284],{"class":130,"line":131},[128,147285,147286],{"class":3814},"\u003C!-- 携程网移动端案例结构 -->\n",[128,147288,147289,147291,147293,147295,147297,147299],{"class":130,"line":142},[128,147290,4657],{"class":138},[128,147292,54994],{"class":54685},[128,147294,56868],{"class":199},[128,147296,270],{"class":138},[128,147298,95693],{"class":176},[128,147300,54692],{"class":138},[128,147302,147303],{"class":130,"line":156},[128,147304,147305],{"class":3814},"  \u003C!-- 搜索栏 -->\n",[128,147307,147308,147310,147312,147314,147316,147319,147322,147324],{"class":130,"line":163},[128,147309,55526],{"class":138},[128,147311,54994],{"class":54685},[128,147313,56868],{"class":199},[128,147315,270],{"class":138},[128,147317,147318],{"class":176},"\"search-index\"",[128,147320,147321],{"class":138},">...\u003C\u002F",[128,147323,54994],{"class":54685},[128,147325,54692],{"class":138},[128,147327,147328],{"class":130,"line":183},[128,147329,147330],{"class":3814},"  \u003C!-- 焦点图 -->\n",[128,147332,147333,147335,147337,147339,147341,147344,147346,147348],{"class":130,"line":188},[128,147334,55526],{"class":138},[128,147336,54994],{"class":54685},[128,147338,56868],{"class":199},[128,147340,270],{"class":138},[128,147342,147343],{"class":176},"\"focus\"",[128,147345,147321],{"class":138},[128,147347,54994],{"class":54685},[128,147349,54692],{"class":138},[128,147351,147352],{"class":130,"line":193},[128,147353,147354],{"class":3814},"  \u003C!-- 主导航 -->\n",[128,147356,147357,147359,147361,147363,147365,147368,147370,147372],{"class":130,"line":206},[128,147358,55526],{"class":138},[128,147360,54994],{"class":54685},[128,147362,56868],{"class":199},[128,147364,270],{"class":138},[128,147366,147367],{"class":176},"\"local-nav\"",[128,147369,147321],{"class":138},[128,147371,54994],{"class":54685},[128,147373,54692],{"class":138},[128,147375,147376],{"class":130,"line":221},[128,147377,147378],{"class":3814},"  \u003C!-- 子导航 -->\n",[128,147380,147381,147383,147385,147387,147389,147392,147394,147396],{"class":130,"line":230},[128,147382,55526],{"class":138},[128,147384,54994],{"class":54685},[128,147386,56868],{"class":199},[128,147388,270],{"class":138},[128,147390,147391],{"class":176},"\"nav-common\"",[128,147393,147321],{"class":138},[128,147395,54994],{"class":54685},[128,147397,54692],{"class":138},[128,147399,147400,147402,147404],{"class":130,"line":235},[128,147401,55168],{"class":138},[128,147403,54994],{"class":54685},[128,147405,54692],{"class":138},[19,147407,73828],{},[106,147409,147410],{"className":129904,"code":140356,"language":129906,"meta":112,"style":112},[114,147411,147412,147426,147442],{"__ignoreMap":112},[128,147413,147414,147416,147418,147420,147422,147424],{"class":130,"line":131},[128,147415,643],{"class":54685},[128,147417,4638],{"class":138},[128,147419,106470],{"class":199},[128,147421,270],{"class":134},[128,147423,66077],{"class":176},[128,147425,140373],{"class":138},[128,147427,147428,147430,147432,147434,147436,147438,147440],{"class":130,"line":142},[128,147429,74271],{"class":166},[128,147431,1967],{"class":138},[128,147433,2592],{"class":166},[128,147435,54875],{"class":134},[128,147437,54904],{"class":166},[128,147439,133484],{"class":166},[128,147441,4905],{"class":138},[128,147443,147444],{"class":130,"line":156},[128,147445,2694],{"class":138},[19,147447,147448],{},"总代码和效果展示：",[5074,147450],{"style":129760,"src":147451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,147453,72267],{},[106,147455,147456],{"className":130651,"code":147279,"language":130653,"meta":112,"style":112},[114,147457,147458,147462,147476,147480,147498,147502,147520,147524,147542,147546,147564],{"__ignoreMap":112},[128,147459,147460],{"class":130,"line":131},[128,147461,147286],{"class":3814},[128,147463,147464,147466,147468,147470,147472,147474],{"class":130,"line":142},[128,147465,4657],{"class":138},[128,147467,54994],{"class":54685},[128,147469,56868],{"class":199},[128,147471,270],{"class":138},[128,147473,95693],{"class":176},[128,147475,54692],{"class":138},[128,147477,147478],{"class":130,"line":156},[128,147479,147305],{"class":3814},[128,147481,147482,147484,147486,147488,147490,147492,147494,147496],{"class":130,"line":163},[128,147483,55526],{"class":138},[128,147485,54994],{"class":54685},[128,147487,56868],{"class":199},[128,147489,270],{"class":138},[128,147491,147318],{"class":176},[128,147493,147321],{"class":138},[128,147495,54994],{"class":54685},[128,147497,54692],{"class":138},[128,147499,147500],{"class":130,"line":183},[128,147501,147330],{"class":3814},[128,147503,147504,147506,147508,147510,147512,147514,147516,147518],{"class":130,"line":188},[128,147505,55526],{"class":138},[128,147507,54994],{"class":54685},[128,147509,56868],{"class":199},[128,147511,270],{"class":138},[128,147513,147343],{"class":176},[128,147515,147321],{"class":138},[128,147517,54994],{"class":54685},[128,147519,54692],{"class":138},[128,147521,147522],{"class":130,"line":193},[128,147523,147354],{"class":3814},[128,147525,147526,147528,147530,147532,147534,147536,147538,147540],{"class":130,"line":206},[128,147527,55526],{"class":138},[128,147529,54994],{"class":54685},[128,147531,56868],{"class":199},[128,147533,270],{"class":138},[128,147535,147367],{"class":176},[128,147537,147321],{"class":138},[128,147539,54994],{"class":54685},[128,147541,54692],{"class":138},[128,147543,147544],{"class":130,"line":221},[128,147545,147378],{"class":3814},[128,147547,147548,147550,147552,147554,147556,147558,147560,147562],{"class":130,"line":230},[128,147549,55526],{"class":138},[128,147551,54994],{"class":54685},[128,147553,56868],{"class":199},[128,147555,270],{"class":138},[128,147557,147391],{"class":176},[128,147559,147321],{"class":138},[128,147561,54994],{"class":54685},[128,147563,54692],{"class":138},[128,147565,147566,147568,147570],{"class":130,"line":235},[128,147567,55168],{"class":138},[128,147569,54994],{"class":54685},[128,147571,54692],{"class":138},[19,147573,73828],{},[106,147575,147576],{"className":130651,"code":134008,"language":130653,"meta":112,"style":112},[114,147577,147578,147582,147596,147600],{"__ignoreMap":112},[128,147579,147580],{"class":130,"line":131},[128,147581,134015],{"class":3814},[128,147583,147584,147586,147588,147590,147592,147594],{"class":130,"line":142},[128,147585,4657],{"class":138},[128,147587,54994],{"class":54685},[128,147589,56868],{"class":199},[128,147591,270],{"class":138},[128,147593,134028],{"class":176},[128,147595,54692],{"class":138},[128,147597,147598],{"class":130,"line":156},[128,147599,134035],{"class":138},[128,147601,147602,147604,147606],{"class":130,"line":163},[128,147603,55168],{"class":138},[128,147605,54994],{"class":54685},[128,147607,54692],{"class":138},[3659,147609,141305],{},{"title":112,"searchDepth":142,"depth":142,"links":147611},[147612,147613,147617,147618,147619],{"id":146756,"depth":142,"text":146757},{"id":146788,"depth":142,"text":146789,"children":147614},[147615,147616],{"id":146792,"depth":156,"text":146793},{"id":146809,"depth":156,"text":146810},{"id":146828,"depth":142,"text":146829},{"id":146835,"depth":142,"text":146836},{"id":146922,"depth":142,"text":146923,"children":147620},[147621,147622,147623,147624,147625],{"id":146929,"depth":156,"text":146930},{"id":147057,"depth":156,"text":147058},{"id":147151,"depth":156,"text":147152},{"id":147200,"depth":156,"text":147201},{"id":147210,"depth":156,"text":147211},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":146748,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":147632,"title":147633,"body":147634,"description":3686,"extension":3687,"meta":148861,"navigation":159,"path":148862,"seo":148863,"stem":148864,"__hash__":148865},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":147635,"toc":148839},[147636,147639,147643,147647,147650,147653,147657,147662,147665,147668,147671,147674,147677,147734,147737,147742,147745,147748,147752,147763,147767,147770,147773,147780,147785,147789,147792,147798,147801,147805,147808,147815,147818,147821,147828,147831,147838,147841,147844,147851,147854,147857,147859,147876,147880,147883,147886,147889,147893,147896,147899,147902,147905,147908,147911,147913,147916,147919,147981,147984,148094,148101,148107,148110,148113,148117,148120,148124,148129,148132,148139,148142,148148,148153,148156,148159,148162,148165,148168,148171,148174,148177,148233,148235,148261,148265,148268,148271,148274,148282,148285,148288,148292,148348,148351,148355,148361,148372,148375,148380,148383,148386,148392,148395,148398,148401,148404,148407,148410,148413,148416,148441,148447,148450,148453,148456,148459,148462,148465,148470,148473,148476,148479,148487,148490,148497,148500,148503,148505,148529,148531,148534,148537,148540,148543,148546,148549,148552,148586,148589,148592,148626,148633,148636,148639,148642,148645,148648,148651,148658,148661,148664,148667,148670,148677,148680,148683,148690,148693,148696,148700,148703,148706,148709,148712,148715,148718,148721,148724,148726,148750,148752,148776,148780,148791,148794,148797,148800,148803,148806,148809,148812,148815,148818,148821,148824,148827,148830,148833,148836],[10,147637,147633],{"id":147638},"_21-移动端布局实战下篇",[14,147640,147642],{"id":147641},"_211-rem适配布局","21.1 rem适配布局",[72,147644,147646],{"id":147645},"_2111-rem单位","21.1.1 rem单位",[5074,147648],{"style":129760,"src":147649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,147651,147652],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[72,147654,147656],{"id":147655},"_2112-媒体查询","21.1.2 媒体查询",[26,147658,147659],{},[29,147660,147661],{},"参数介绍",[5074,147663],{"style":129760,"src":147664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[5074,147666],{"style":129760,"src":147667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[5074,147669],{"style":129760,"src":147670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[5074,147672],{"style":129760,"src":147673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[5074,147675],{"style":129760,"src":147676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[106,147678,147680],{"className":129904,"code":147679,"language":129906,"meta":112,"style":112},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[114,147681,147682,147687,147706,147713,147726,147730],{"__ignoreMap":112},[128,147683,147684],{"class":130,"line":131},[128,147685,147686],{"class":3814},"\u002F* 媒体查询 *\u002F\n",[128,147688,147689,147692,147694,147697,147699,147702,147704],{"class":130,"line":142},[128,147690,147691],{"class":134},"@media",[128,147693,5260],{"class":138},[128,147695,147696],{"class":166},"max-width",[128,147698,1967],{"class":138},[128,147700,147701],{"class":166},"768",[128,147703,54875],{"class":134},[128,147705,15968],{"class":138},[128,147707,147708,147711],{"class":130,"line":156},[128,147709,147710],{"class":199},"  .container",[128,147712,1959],{"class":138},[128,147714,147715,147718,147720,147722,147724],{"class":130,"line":163},[128,147716,147717],{"class":166},"    width",[128,147719,1967],{"class":138},[128,147721,4061],{"class":166},[128,147723,4078],{"class":134},[128,147725,4905],{"class":138},[128,147727,147728],{"class":130,"line":183},[128,147729,130700],{"class":138},[128,147731,147732],{"class":130,"line":188},[128,147733,2694],{"class":138},[19,147735,147736],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[26,147738,147739],{"start":142},[29,147740,147741],{},"引入资源",[5074,147743],{"style":129760,"src":147744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,147746,147747],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[72,147749,147751],{"id":147750},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[4752,147753,147754,147757,147760],{},[29,147755,147756],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[29,147758,147759],{},"媒体查询可以根据不同设备宽度来修改样式",[29,147761,147762],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,147764,147766],{"id":147765},"_212-less基础","21.2 Less基础",[19,147768,147769],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,147771,147772],{},"Less可以解决该问题，它是css的扩展语言",[19,147774,147775,147776],{},"Less中文网址： ",[3989,147777,147778],{"href":147778,"rel":147779},"http:\u002F\u002Flesscss.cn\u002F",[27352],[19,147781,147782],{},[3903,147783,147784],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[72,147786,147788],{"id":147787},"_2121-less安装","21.2.1 less安装",[19,147790,147791],{},"如果使用vscode，则无需进行下方安装步骤",[19,147793,147794],{},[3989,147795,147796],{"href":147796,"rel":147797},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[27352],[5074,147799],{"style":129760,"src":147800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[72,147802,147804],{"id":147803},"_2122-less使用","21.2.2 less使用",[19,147806,147807],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[26,147809,147810],{},[29,147811,147812],{},[3903,147813,147814],{},"Less 变量",[5074,147816],{"style":129760,"src":147817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[5074,147819],{"style":129760,"src":147820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[26,147822,147823],{"start":142},[29,147824,147825],{},[3903,147826,147827],{},"Less 编译",[5074,147829],{"style":129760,"src":147830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[26,147832,147833],{"start":156},[29,147834,147835],{},[3903,147836,147837],{},"Less 嵌套",[5074,147839],{"style":129760,"src":147840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[5074,147842],{"style":129760,"src":147843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[26,147845,147846],{"start":163},[29,147847,147848],{},[3903,147849,147850],{},"Less 运算",[5074,147852],{"style":129760,"src":147853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,147855,147856],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,147858,3788],{},[4752,147860,147861,147864,147867,147870,147873],{},[29,147862,147863],{},"乘号（*）和除号（\u002F）的写法",[29,147865,147866],{},"运算符中间左右有个空格隔开 1px + 5",[29,147868,147869],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[29,147871,147872],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[29,147874,147875],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,147877,147879],{"id":147878},"_213-rem-适配方案","21.3 rem 适配方案",[19,147881,147882],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,147884,147885],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[5074,147887],{"style":129760,"src":147888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[72,147890,147892],{"id":147891},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,147894,147895],{},"rem + 媒体查询 + less 技术",[5074,147897],{"style":129760,"src":147898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,147900,147901],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,147903,147904],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[5074,147906],{"style":129760,"src":147907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,147909,147910],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,147912,18157],{},[5074,147914],{"style":129760,"src":147915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,147917,147918],{},"index.html:",[106,147920,147922],{"className":129904,"code":147921,"language":129906,"meta":112,"style":112},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[114,147923,147924,147929,147935,147951,147955,147961,147977],{"__ignoreMap":112},[128,147925,147926],{"class":130,"line":131},[128,147927,147928],{"class":3814},"\u002F* rem 适配方案 *\u002F\n",[128,147930,147931,147933],{"class":130,"line":142},[128,147932,54020],{"class":54685},[128,147934,1959],{"class":138},[128,147936,147937,147939,147941,147944,147946,147948],{"class":130,"line":156},[128,147938,74001],{"class":166},[128,147940,1967],{"class":138},[128,147942,147943],{"class":166},"62.5",[128,147945,4078],{"class":134},[128,147947,133767],{"class":138},[128,147949,147950],{"class":3814},"\u002F* 1rem = 10px *\u002F\n",[128,147952,147953],{"class":130,"line":163},[128,147954,2694],{"class":138},[128,147956,147957,147959],{"class":130,"line":183},[128,147958,133752],{"class":199},[128,147960,1959],{"class":138},[128,147962,147963,147965,147967,147969,147972,147974],{"class":130,"line":188},[128,147964,73943],{"class":166},[128,147966,1967],{"class":138},[128,147968,4196],{"class":166},[128,147970,147971],{"class":134},"rem",[128,147973,133767],{"class":138},[128,147975,147976],{"class":3814},"\u002F* 100px *\u002F\n",[128,147978,147979],{"class":130,"line":193},[128,147980,2694],{"class":138},[19,147982,147983],{},"common.less",[106,147985,147987],{"className":129904,"code":147986,"language":129906,"meta":112,"style":112},"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",[114,147988,147989,147995,148010,148014,148020,148034,148038,148042,148046,148052,148066,148070,148076,148090],{"__ignoreMap":112},[128,147990,147991,147993],{"class":130,"line":131},[128,147992,54020],{"class":54685},[128,147994,1959],{"class":138},[128,147996,147997,147999,148001,148003,148005,148007],{"class":130,"line":142},[128,147998,74001],{"class":166},[128,148000,1967],{"class":138},[128,148002,147943],{"class":166},[128,148004,4078],{"class":134},[128,148006,29552],{"class":138},[128,148008,148009],{"class":3814},"\u002F* 10px *\u002F\n",[128,148011,148012],{"class":130,"line":156},[128,148013,2694],{"class":138},[128,148015,148016,148018],{"class":130,"line":163},[128,148017,54994],{"class":54685},[128,148019,1959],{"class":138},[128,148021,148022,148024,148026,148028,148030,148032],{"class":130,"line":183},[128,148023,73943],{"class":166},[128,148025,1967],{"class":138},[128,148027,4196],{"class":166},[128,148029,147971],{"class":134},[128,148031,29552],{"class":138},[128,148033,147976],{"class":3814},[128,148035,148036],{"class":130,"line":188},[128,148037,2694],{"class":138},[128,148039,148040],{"class":130,"line":193},[128,148041,139365],{"class":138},[128,148043,148044],{"class":130,"line":206},[128,148045,147928],{"class":3814},[128,148047,148048,148050],{"class":130,"line":221},[128,148049,54020],{"class":54685},[128,148051,1959],{"class":138},[128,148053,148054,148056,148058,148060,148062,148064],{"class":130,"line":230},[128,148055,74001],{"class":166},[128,148057,1967],{"class":138},[128,148059,147943],{"class":166},[128,148061,4078],{"class":134},[128,148063,133767],{"class":138},[128,148065,147950],{"class":3814},[128,148067,148068],{"class":130,"line":235},[128,148069,2694],{"class":138},[128,148071,148072,148074],{"class":130,"line":244},[128,148073,133752],{"class":199},[128,148075,1959],{"class":138},[128,148077,148078,148080,148082,148084,148086,148088],{"class":130,"line":287},[128,148079,73943],{"class":166},[128,148081,1967],{"class":138},[128,148083,4196],{"class":166},[128,148085,147971],{"class":134},[128,148087,133767],{"class":138},[128,148089,147976],{"class":3814},[128,148091,148092],{"class":130,"line":301},[128,148093,2694],{"class":138},[19,148095,148096,148097,148100],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[27040,148098,148099],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[106,148102,148105],{"className":148103,"code":148104,"language":111},[109],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[114,148106,148104],{"__ignoreMap":112},[19,148108,148109],{},"less保存时会自动变成.css文件",[19,148111,148112],{},"好好搞懂上述代码写法",[72,148114,148116],{"id":148115},"_2132-样式导入样式","21.3.2 样式导入样式",[5074,148118],{"style":129760,"src":148119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[72,148121,148123],{"id":148122},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[26,148125,148126],{},[29,148127,148128],{},"准备工作",[5074,148130],{"style":129760,"src":148131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,148133,148134,148135],{},"github地址：",[3989,148136,148137],{"href":148137,"rel":148138},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[27352],[19,148140,148141],{},"下载之后，将index.js文件拖到项目中就可以了",[19,148143,148144,148145],{},"js文件引入到index.html中使用的是",[114,148146,148147],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[26,148149,148150],{"start":142},[29,148151,148152],{},"vscode插件",[5074,148154],{"style":129760,"src":148155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,148157,148158],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,148160,148161],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[5074,148163],{"style":129760,"src":148164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,148166,148167],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[5074,148169],{"style":129760,"src":148170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,148172,148173],{},"修改成75就可以，alt+z为快捷键",[19,148175,148176],{},"index.css：",[106,148178,148179],{"className":129904,"code":147921,"language":129906,"meta":112,"style":112},[114,148180,148181,148185,148191,148205,148209,148215,148229],{"__ignoreMap":112},[128,148182,148183],{"class":130,"line":131},[128,148184,147928],{"class":3814},[128,148186,148187,148189],{"class":130,"line":142},[128,148188,54020],{"class":54685},[128,148190,1959],{"class":138},[128,148192,148193,148195,148197,148199,148201,148203],{"class":130,"line":156},[128,148194,74001],{"class":166},[128,148196,1967],{"class":138},[128,148198,147943],{"class":166},[128,148200,4078],{"class":134},[128,148202,133767],{"class":138},[128,148204,147950],{"class":3814},[128,148206,148207],{"class":130,"line":163},[128,148208,2694],{"class":138},[128,148210,148211,148213],{"class":130,"line":183},[128,148212,133752],{"class":199},[128,148214,1959],{"class":138},[128,148216,148217,148219,148221,148223,148225,148227],{"class":130,"line":188},[128,148218,73943],{"class":166},[128,148220,1967],{"class":138},[128,148222,4196],{"class":166},[128,148224,147971],{"class":134},[128,148226,133767],{"class":138},[128,148228,147976],{"class":3814},[128,148230,148231],{"class":130,"line":193},[128,148232,2694],{"class":138},[19,148234,147918],{},[106,148236,148237],{"className":129904,"code":130308,"language":129906,"meta":112,"style":112},[114,148238,148239,148245,148257],{"__ignoreMap":112},[128,148240,148241,148243],{"class":130,"line":131},[128,148242,55183],{"class":54685},[128,148244,1959],{"class":138},[128,148246,148247,148249,148251,148253,148255],{"class":130,"line":142},[128,148248,74001],{"class":166},[128,148250,1967],{"class":138},[128,148252,4350],{"class":166},[128,148254,54875],{"class":134},[128,148256,4905],{"class":138},[128,148258,148259],{"class":130,"line":156},[128,148260,2694],{"class":138},[14,148262,148264],{"id":148263},"_214-响应式开发","21.4 响应式开发",[19,148266,148267],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[5074,148269],{"style":129760,"src":148270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,148272,148273],{},"做法：",[4752,148275,148276,148279],{},[29,148277,148278],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[29,148280,148281],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[5074,148283],{"style":129760,"src":148284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,148286,148287],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[72,148289,148291],{"id":148290},"_2141-简单代码示范","21.4.1 简单代码示范",[106,148293,148294],{"className":129904,"code":147921,"language":129906,"meta":112,"style":112},[114,148295,148296,148300,148306,148320,148324,148330,148344],{"__ignoreMap":112},[128,148297,148298],{"class":130,"line":131},[128,148299,147928],{"class":3814},[128,148301,148302,148304],{"class":130,"line":142},[128,148303,54020],{"class":54685},[128,148305,1959],{"class":138},[128,148307,148308,148310,148312,148314,148316,148318],{"class":130,"line":156},[128,148309,74001],{"class":166},[128,148311,1967],{"class":138},[128,148313,147943],{"class":166},[128,148315,4078],{"class":134},[128,148317,133767],{"class":138},[128,148319,147950],{"class":3814},[128,148321,148322],{"class":130,"line":163},[128,148323,2694],{"class":138},[128,148325,148326,148328],{"class":130,"line":183},[128,148327,133752],{"class":199},[128,148329,1959],{"class":138},[128,148331,148332,148334,148336,148338,148340,148342],{"class":130,"line":188},[128,148333,73943],{"class":166},[128,148335,1967],{"class":138},[128,148337,4196],{"class":166},[128,148339,147971],{"class":134},[128,148341,133767],{"class":138},[128,148343,147976],{"class":3814},[128,148345,148346],{"class":130,"line":193},[128,148347,2694],{"class":138},[19,148349,148350],{},"父盒子一般命名为container",[72,148352,148354],{"id":148353},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,148356,148357,148358],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[3903,148359,148360],{},"使得 Web 开发更加快捷",[4752,148362,148363],{},[29,148364,148365,148366],{},"官网：",[3903,148367,148368],{},[3989,148369,148370],{"href":148370,"rel":148371},"http:\u002F\u002Fgetbootstrap.com\u002F",[27352],[19,148373,148374],{},"可以直接去官网拿现成的东西",[26,148376,148377],{},[29,148378,148379],{},"Bootstrap的使用",[19,148381,148382],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,148384,148385],{},"Bootstrap 使用四步曲：",[19,148387,148388,148391],{},[3903,148389,148390],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[5074,148393],{"style":129760,"src":148394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,148396,148397],{},"打开Bootstrap官网，然后下载",[5074,148399],{"style":129760,"src":148400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[5074,148402],{"style":129760,"src":148403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,148405,148406],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,148408,148409],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,148411,148412],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[5074,148414],{"style":129760,"src":148415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[106,148417,148419],{"className":129904,"code":148418,"language":129906,"meta":112,"style":112},".center {\n  color: red;\n}\n",[114,148420,148421,148427,148437],{"__ignoreMap":112},[128,148422,148423,148425],{"class":130,"line":131},[128,148424,130195],{"class":199},[128,148426,1959],{"class":138},[128,148428,148429,148431,148433,148435],{"class":130,"line":142},[128,148430,74280],{"class":166},[128,148432,1967],{"class":138},[128,148434,60801],{"class":166},[128,148436,4905],{"class":138},[128,148438,148439],{"class":130,"line":156},[128,148440,2694],{"class":138},[19,148442,148443,148446],{},[114,148444,148445],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[5074,148448],{"style":129760,"src":148449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[5074,148451],{"style":129760,"src":148452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[5074,148454],{"style":129760,"src":148455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,148457,148458],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[5074,148460],{"style":129760,"src":148461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,148463,148464],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[26,148466,148467],{"start":142},[29,148468,148469],{},"布局容器",[5074,148471],{"style":129760,"src":148472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,148474,148475],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,148477,148478],{},"container-fluid用于移动式布局比较方便",[26,148480,148481],{"start":156},[29,148482,148483,148484],{},"bootstrap ",[3903,148485,148486],{},"栅格系统原理",[5074,148488],{"style":129760,"src":148489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[26,148491,148492],{"start":163},[29,148493,148494],{},[3903,148495,148496],{},"栅格选项参数",[5074,148498],{"style":129760,"src":148499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,148501,148502],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,148504,18157],{},[106,148506,148507],{"className":129904,"code":148418,"language":129906,"meta":112,"style":112},[114,148508,148509,148515,148525],{"__ignoreMap":112},[128,148510,148511,148513],{"class":130,"line":131},[128,148512,130195],{"class":199},[128,148514,1959],{"class":138},[128,148516,148517,148519,148521,148523],{"class":130,"line":142},[128,148518,74280],{"class":166},[128,148520,1967],{"class":138},[128,148522,60801],{"class":166},[128,148524,4905],{"class":138},[128,148526,148527],{"class":130,"line":156},[128,148528,2694],{"class":138},[19,148530,138947],{},[5074,148532],{"style":129760,"src":148533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,148535,148536],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,148538,148539],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,148541,148542],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,148544,148545],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,148547,148548],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,148550,148551],{},"汇总展示说明：",[106,148553,148554],{"className":130651,"code":134008,"language":130653,"meta":112,"style":112},[114,148555,148556,148560,148574,148578],{"__ignoreMap":112},[128,148557,148558],{"class":130,"line":131},[128,148559,134015],{"class":3814},[128,148561,148562,148564,148566,148568,148570,148572],{"class":130,"line":142},[128,148563,4657],{"class":138},[128,148565,54994],{"class":54685},[128,148567,56868],{"class":199},[128,148569,270],{"class":138},[128,148571,134028],{"class":176},[128,148573,54692],{"class":138},[128,148575,148576],{"class":130,"line":156},[128,148577,134035],{"class":138},[128,148579,148580,148582,148584],{"class":130,"line":163},[128,148581,55168],{"class":138},[128,148583,54994],{"class":54685},[128,148585,54692],{"class":138},[5074,148587],{"style":129760,"src":148588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,148590,148591],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[106,148593,148594],{"className":130651,"code":134008,"language":130653,"meta":112,"style":112},[114,148595,148596,148600,148614,148618],{"__ignoreMap":112},[128,148597,148598],{"class":130,"line":131},[128,148599,134015],{"class":3814},[128,148601,148602,148604,148606,148608,148610,148612],{"class":130,"line":142},[128,148603,4657],{"class":138},[128,148605,54994],{"class":54685},[128,148607,56868],{"class":199},[128,148609,270],{"class":138},[128,148611,134028],{"class":176},[128,148613,54692],{"class":138},[128,148615,148616],{"class":130,"line":156},[128,148617,134035],{"class":138},[128,148619,148620,148622,148624],{"class":130,"line":163},[128,148621,55168],{"class":138},[128,148623,54994],{"class":54685},[128,148625,54692],{"class":138},[26,148627,148628],{"start":183},[29,148629,148630],{},[3903,148631,148632],{},"列嵌套",[5074,148634],{"style":129760,"src":148635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,148637,148638],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,148640,148641],{},"没加row内部这样：",[5074,148643],{"style":129760,"src":148644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,148646,148647],{},"加上row之后内部为：",[5074,148649],{"style":129760,"src":148650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[26,148652,148653],{"start":188},[29,148654,148655],{},[3903,148656,148657],{},"列偏移",[5074,148659],{"style":129760,"src":148660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,148662,148663],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,148665,148666],{},"要加偏移量，即偏移份数",[19,148668,148669],{},"偏移的份数=12-两个盒子的份数",[26,148671,148672],{"start":193},[29,148673,148674],{},[3903,148675,148676],{},"列排序",[5074,148678],{"style":129760,"src":148679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,148681,148682],{},"pull拉左；push推右",[26,148684,148685],{"start":206},[29,148686,148687],{},[3903,148688,148689],{},"响应式工具",[5074,148691],{"style":129760,"src":148692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,148694,148695],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[72,148697,148699],{"id":148698},"_2143-响应式小项目","21.4.3 响应式小项目",[19,148701,148702],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,148704,148705],{},"ul {",[19,148707,148708],{},"list-style: none;",[19,148710,148711],{},"margin:0;",[19,148713,148714],{},"padding:0; }",[5074,148716],{"style":129760,"src":148717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[5074,148719],{"style":129760,"src":148720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,148722,148723],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,148725,72267],{},[106,148727,148728],{"className":129904,"code":142574,"language":129906,"meta":112,"style":112},[114,148729,148730,148736,148746],{"__ignoreMap":112},[128,148731,148732,148734],{"class":130,"line":131},[128,148733,133752],{"class":199},[128,148735,1959],{"class":138},[128,148737,148738,148740,148742,148744],{"class":130,"line":142},[128,148739,134384],{"class":166},[128,148741,1967],{"class":138},[128,148743,27223],{"class":166},[128,148745,4905],{"class":138},[128,148747,148748],{"class":130,"line":156},[128,148749,2694],{"class":138},[19,148751,73828],{},[106,148753,148754],{"className":129904,"code":142574,"language":129906,"meta":112,"style":112},[114,148755,148756,148762,148772],{"__ignoreMap":112},[128,148757,148758,148760],{"class":130,"line":131},[128,148759,133752],{"class":199},[128,148761,1959],{"class":138},[128,148763,148764,148766,148768,148770],{"class":130,"line":142},[128,148765,134384],{"class":166},[128,148767,1967],{"class":138},[128,148769,27223],{"class":166},[128,148771,4905],{"class":138},[128,148773,148774],{"class":130,"line":156},[128,148775,2694],{"class":138},[14,148777,148779],{"id":148778},"_215-swiper-插件使用","21.5 swiper 插件使用",[4752,148781,148782,148785,148788],{},[29,148783,148784],{},"下载需要的css和js文件html页面中 引入相关文件",[29,148786,148787],{},"官网找到类似案例，复制html结构，css样式 js 语法",[29,148789,148790],{},"根据需求定制修改模块",[5074,148792],{"style":129760,"src":148793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,148795,148796],{},"解压后将这两部分放到项目中",[5074,148798],{"style":129760,"src":148799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,148801,148802],{},"这个插件可以帮助我们实现轮播图效果",[19,148804,148805],{},"用法：",[5074,148807],{"style":129760,"src":148808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,148810,148811],{},"找到自己喜欢的",[5074,148813],{"style":129760,"src":148814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,148816,148817],{},"右键，查看网页源代码",[5074,148819],{"style":129760,"src":148820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,148822,148823],{},"复制人家的结构内容",[19,148825,148826],{},"然后去看API文档：",[5074,148828],{"style":129760,"src":148829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,148831,148832],{},"可以看看如何修改样式",[19,148834,148835],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[3659,148837,148838],{},"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":112,"searchDepth":142,"depth":142,"links":148840},[148841,148846,148850,148855,148860],{"id":147641,"depth":142,"text":147642,"children":148842},[148843,148844,148845],{"id":147645,"depth":156,"text":147646},{"id":147655,"depth":156,"text":147656},{"id":147750,"depth":156,"text":147751},{"id":147765,"depth":142,"text":147766,"children":148847},[148848,148849],{"id":147787,"depth":156,"text":147788},{"id":147803,"depth":156,"text":147804},{"id":147878,"depth":142,"text":147879,"children":148851},[148852,148853,148854],{"id":147891,"depth":156,"text":147892},{"id":148115,"depth":156,"text":148116},{"id":148122,"depth":156,"text":148123},{"id":148263,"depth":142,"text":148264,"children":148856},[148857,148858,148859],{"id":148290,"depth":156,"text":148291},{"id":148353,"depth":156,"text":148354},{"id":148698,"depth":156,"text":148699},{"id":148778,"depth":142,"text":148779},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":147633,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":148867,"title":148868,"body":148869,"description":3686,"extension":3687,"meta":149089,"navigation":159,"path":149090,"seo":149091,"stem":149092,"__hash__":149093},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":148870,"toc":149085},[148871,148874,148878,148881,148896,148901,148904,148909,148944,148949,148961,148966,148979,148984,149001,149006,149026,149031,149049,149052,149055,149058,149061,149065,149068,149071,149074,149077,149080,149083],[10,148872,148868],{"id":148873},"_22-代码提交与新型相对单位",[14,148875,148877],{"id":148876},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,148879,148880],{},"法1：",[26,148882,148883,148890,148893],{},[29,148884,148885,148886],{},"登录网站注册：",[3989,148887,148888],{"href":148888,"rel":148889},"https:\u002F\u002Fgitee.com\u002F",[27352],[29,148891,148892],{},"码云创建新的仓库",[29,148894,148895],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[4752,148897,148898],{},[29,148899,148900],{},"在网站根目录右键-- Git Bash Here",[5074,148902],{"style":129760,"src":148903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[4752,148905,148906],{},[29,148907,148908],{},"如果是第一次利用git提交，请配置好全局选项",[106,148910,148912],{"className":120652,"code":148911,"language":120654,"meta":112,"style":112},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[114,148913,148914,148930],{"__ignoreMap":112},[128,148915,148916,148919,148921,148924,148927],{"class":130,"line":131},[128,148917,148918],{"class":199},"git",[128,148920,123075],{"class":176},[128,148922,148923],{"class":166}," --global",[128,148925,148926],{"class":176}," user.name",[128,148928,148929],{"class":176}," \"你的名字\"\n",[128,148931,148932,148934,148936,148938,148941],{"class":130,"line":142},[128,148933,148918],{"class":199},[128,148935,123075],{"class":176},[128,148937,148923],{"class":166},[128,148939,148940],{"class":176}," user.email",[128,148942,148943],{"class":176}," \"你的邮箱\"\n",[4752,148945,148946],{},[29,148947,148948],{},"初始化仓库",[106,148950,148952],{"className":120652,"code":148951,"language":120654,"meta":112,"style":112},"git init\n",[114,148953,148954],{"__ignoreMap":112},[128,148955,148956,148958],{"class":130,"line":131},[128,148957,148918],{"class":199},[128,148959,148960],{"class":176}," init\n",[4752,148962,148963],{},[29,148964,148965],{},"把本地文件放到暂存区",[106,148967,148969],{"className":120652,"code":148968,"language":120654,"meta":112,"style":112},"git add .\n",[114,148970,148971],{"__ignoreMap":112},[128,148972,148973,148975,148977],{"class":130,"line":131},[128,148974,148918],{"class":199},[128,148976,2187],{"class":176},[128,148978,32225],{"class":176},[4752,148980,148981],{},[29,148982,148983],{},"把本地文件放到本地仓库里面",[106,148985,148987],{"className":120652,"code":148986,"language":120654,"meta":112,"style":112},"git commit -m \"first commit\"\n",[114,148988,148989],{"__ignoreMap":112},[128,148990,148991,148993,148996,148998],{"class":130,"line":131},[128,148992,148918],{"class":199},[128,148994,148995],{"class":176}," commit",[128,148997,104250],{"class":166},[128,148999,149000],{"class":176}," \"first commit\"\n",[4752,149002,149003],{},[29,149004,149005],{},"链接远程仓库",[106,149007,149009],{"className":120652,"code":149008,"language":120654,"meta":112,"style":112},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[114,149010,149011],{"__ignoreMap":112},[128,149012,149013,149015,149018,149020,149023],{"class":130,"line":131},[128,149014,148918],{"class":199},[128,149016,149017],{"class":176}," remote",[128,149019,2187],{"class":176},[128,149021,149022],{"class":176}," origin",[128,149024,149025],{"class":176}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[4752,149027,149028],{},[29,149029,149030],{},"把本地仓库的文件推送到远程仓库 push",[106,149032,149034],{"className":120652,"code":149033,"language":120654,"meta":112,"style":112},"git push -u origin master\n",[114,149035,149036],{"__ignoreMap":112},[128,149037,149038,149040,149042,149044,149046],{"class":130,"line":131},[128,149039,148918],{"class":199},[128,149041,32500],{"class":176},[128,149043,31775],{"class":166},[128,149045,149022],{"class":176},[128,149047,149048],{"class":176}," master\n",[5074,149050],{"style":129760,"src":149051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,149053,149054],{},"上方方法暂未实现，后边学完git后在整",[19,149056,149057],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[5074,149059],{"style":129760,"src":149060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,149062,149064],{"id":149063},"_222-新型相对单位","22.2 新型相对单位",[5074,149066],{"style":129760,"src":149067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[5074,149069],{"style":129760,"src":149070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,149072,149073],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,149075,149076],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[5074,149078],{"style":129760,"src":149079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,149081,149082],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[3659,149084,27445],{},{"title":112,"searchDepth":142,"depth":142,"links":149086},[149087,149088],{"id":148876,"depth":142,"text":148877},{"id":149063,"depth":142,"text":149064},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":148868,"description":3686},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":149095,"title":149096,"body":149097,"description":149101,"extension":3687,"meta":149102,"navigation":159,"path":149103,"seo":149104,"stem":149105,"__hash__":149106},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":149098,"toc":149099},[],{"title":112,"searchDepth":142,"depth":142,"links":149100},[],"自己正经开始学编程的第一门语言！",{"category":96209},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":149096,"description":149101},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":149108,"title":149109,"body":149110,"description":3686,"extension":3687,"meta":150248,"navigation":159,"path":150249,"seo":150250,"stem":150251,"__hash__":150252},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":149111,"toc":150224},[149112,149115,149119,149122,149125,149149,149152,149158,149162,149165,149192,149195,149235,149238,149250,149253,149259,149263,149267,149294,149311,149318,149322,149325,149351,149354,149358,149361,149401,149404,149421,149427,149431,149436,149480,149483,149501,149504,149568,149572,149579,149582,149597,149600,149609,149612,149623,149626,149635,149638,149655,149658,149673,149677,149681,149684,149686,149706,149710,149713,149716,149727,149730,149736,149740,149746,149773,149776,149788,149791,149802,149805,149811,149815,149821,149871,149874,149916,149919,149952,149955,149989,149993,149996,150016,150019,150055,150058,150071,150075,150079,150085,150088,150101,150105,150108,150114,150117,150121,150124,150127,150172,150176,150192,150198,150205,150211,150221],[10,149113,149109],{"id":149114},"_1-python环境与第一个程序",[14,149116,149118],{"id":149117},"_11-什么是python","1.1 什么是Python",[19,149120,149121],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,149123,149124],{},"理解 Python 时抓住三个关键词：",[26,149126,149127,149130,149133],{},[29,149128,149129],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[29,149131,149132],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[29,149134,149135,149136,3550,149138,3550,149141,3550,149144,3550,149146,1842],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[114,149137,3618],{},[114,149139,149140],{},"sys",[114,149142,149143],{},"json",[114,149145,61240],{},[114,149147,149148],{},"datetime",[19,149150,149151],{},"Python 程序的运行链路：",[106,149153,149156],{"className":149154,"code":149155,"language":111,"meta":112},[109],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[114,149157,149155],{"__ignoreMap":112},[14,149159,149161],{"id":149160},"_12-python解释器","1.2 Python解释器",[19,149163,149164],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[106,149166,149168],{"className":27309,"code":149167,"language":27311,"meta":112,"style":112},"python --version\npython3 --version\npython\npython3\n",[114,149169,149170,149176,149182,149187],{"__ignoreMap":112},[128,149171,149172,149174],{"class":130,"line":131},[128,149173,124],{"class":199},[128,149175,29778],{"class":166},[128,149177,149178,149180],{"class":130,"line":142},[128,149179,104247],{"class":199},[128,149181,29778],{"class":166},[128,149183,149184],{"class":130,"line":156},[128,149185,149186],{"class":199},"python\n",[128,149188,149189],{"class":130,"line":163},[128,149190,149191],{"class":199},"python3\n",[19,149193,149194],{},"进入交互模式后，可以直接输入表达式：",[106,149196,149198],{"className":122,"code":149197,"language":124,"meta":112,"style":112},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[114,149199,149200,149211,149216,149230],{"__ignoreMap":112},[128,149201,149202,149205,149207,149209],{"class":130,"line":131},[128,149203,149204],{"class":134},">>>",[128,149206,28605],{"class":166},[128,149208,48951],{"class":134},[128,149210,51108],{"class":166},[128,149212,149213],{"class":130,"line":142},[128,149214,149215],{"class":166},"3\n",[128,149217,149218,149220,149223,149225,149228],{"class":130,"line":156},[128,149219,149204],{"class":134},[128,149221,149222],{"class":166}," print",[128,149224,253],{"class":138},[128,149226,149227],{"class":176},"\"hello python\"",[128,149229,180],{"class":138},[128,149231,149232],{"class":130,"line":163},[128,149233,149234],{"class":138},"hello python\n",[19,149236,149237],{},"退出交互模式：",[106,149239,149241],{"className":122,"code":149240,"language":124,"meta":112,"style":112},"exit()\n",[114,149242,149243],{"__ignoreMap":112},[128,149244,149245,149248],{"class":130,"line":131},[128,149246,149247],{"class":166},"exit",[128,149249,5563],{"class":138},[19,149251,149252],{},"或使用快捷键：",[106,149254,149257],{"className":149255,"code":149256,"language":111,"meta":112},[109],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[114,149258,149256],{"__ignoreMap":112},[14,149260,149262],{"id":149261},"_13-安装python","1.3 安装Python",[72,149264,149266],{"id":149265},"_131-windows安装","1.3.1 Windows安装",[26,149268,149269,149276,149279,149285,149291],{},[29,149270,149271,149272],{},"打开 Python 官网：",[3989,149273,149274],{"href":149274,"rel":149275},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[27352],[29,149277,149278],{},"下载 Windows Installer。",[29,149280,149281,149282,1842],{},"安装时勾选 ",[114,149283,149284],{},"Add Python to PATH",[29,149286,149287,149288,1842],{},"点击 ",[114,149289,149290],{},"Install Now",[29,149292,149293],{},"安装完成后打开命令提示符验证：",[106,149295,149297],{"className":27309,"code":149296,"language":27311,"meta":112,"style":112},"python --version\npip --version\n",[114,149298,149299,149305],{"__ignoreMap":112},[128,149300,149301,149303],{"class":130,"line":131},[128,149302,124],{"class":199},[128,149304,29778],{"class":166},[128,149306,149307,149309],{"class":130,"line":142},[128,149308,27318],{"class":199},[128,149310,29778],{"class":166},[19,149312,149313,149314,149317],{},"如果提示 ",[114,149315,149316],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[72,149319,149321],{"id":149320},"_132-macos安装","1.3.2 macOS安装",[19,149323,149324],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[106,149326,149328],{"className":27309,"code":149327,"language":27311,"meta":112,"style":112},"brew install python\npython3 --version\npip3 --version\n",[114,149329,149330,149339,149345],{"__ignoreMap":112},[128,149331,149332,149335,149337],{"class":130,"line":131},[128,149333,149334],{"class":199},"brew",[128,149336,27321],{"class":176},[128,149338,127674],{"class":176},[128,149340,149341,149343],{"class":130,"line":142},[128,149342,104247],{"class":199},[128,149344,29778],{"class":166},[128,149346,149347,149349],{"class":130,"line":156},[128,149348,123056],{"class":199},[128,149350,29778],{"class":166},[19,149352,149353],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[72,149355,149357],{"id":149356},"_133-linux安装","1.3.3 Linux安装",[19,149359,149360],{},"Ubuntu\u002FDebian：",[106,149362,149364],{"className":27309,"code":149363,"language":27311,"meta":112,"style":112},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[114,149365,149366,149374,149389,149395],{"__ignoreMap":112},[128,149367,149368,149370,149372],{"class":130,"line":131},[128,149369,28064],{"class":199},[128,149371,120673],{"class":176},[128,149373,29727],{"class":176},[128,149375,149376,149378,149380,149382,149384,149386],{"class":130,"line":142},[128,149377,28064],{"class":199},[128,149379,120673],{"class":176},[128,149381,27321],{"class":176},[128,149383,107766],{"class":176},[128,149385,104166],{"class":176},[128,149387,149388],{"class":176}," python3-venv\n",[128,149390,149391,149393],{"class":130,"line":156},[128,149392,104247],{"class":199},[128,149394,29778],{"class":166},[128,149396,149397,149399],{"class":130,"line":163},[128,149398,123056],{"class":199},[128,149400,29778],{"class":166},[19,149402,149403],{},"Fedora：",[106,149405,149407],{"className":27309,"code":149406,"language":27311,"meta":112,"style":112},"sudo dnf install python3 python3-pip\n",[114,149408,149409],{"__ignoreMap":112},[128,149410,149411,149413,149415,149417,149419],{"class":130,"line":131},[128,149412,28064],{"class":199},[128,149414,29800],{"class":176},[128,149416,27321],{"class":176},[128,149418,107766],{"class":176},[128,149420,123121],{"class":176},[19,149422,149423,149424,149426],{},"Linux 上通常使用 ",[114,149425,104247],{}," 命令，避免和系统旧版本 Python 冲突。",[14,149428,149430],{"id":149429},"_14-pip包管理器","1.4 pip包管理器",[19,149432,149433,149435],{},[114,149434,27318],{}," 用来安装第三方库。",[106,149437,149439],{"className":27309,"code":149438,"language":27311,"meta":112,"style":112},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[114,149440,149441,149450,149459,149467,149473],{"__ignoreMap":112},[128,149442,149443,149445,149447],{"class":130,"line":131},[128,149444,27318],{"class":199},[128,149446,27321],{"class":176},[128,149448,149449],{"class":176}," requests\n",[128,149451,149452,149454,149457],{"class":130,"line":142},[128,149453,27318],{"class":199},[128,149455,149456],{"class":176}," uninstall",[128,149458,149449],{"class":176},[128,149460,149461,149463,149465],{"class":130,"line":156},[128,149462,27318],{"class":199},[128,149464,120930],{"class":176},[128,149466,149449],{"class":176},[128,149468,149469,149471],{"class":130,"line":163},[128,149470,27318],{"class":199},[128,149472,122311],{"class":176},[128,149474,149475,149477],{"class":130,"line":183},[128,149476,27318],{"class":199},[128,149478,149479],{"class":176}," freeze\n",[19,149481,149482],{},"国内网络较慢时可以临时使用镜像：",[106,149484,149486],{"className":27309,"code":149485,"language":27311,"meta":112,"style":112},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[114,149487,149488],{"__ignoreMap":112},[128,149489,149490,149492,149494,149497,149499],{"class":130,"line":131},[128,149491,27318],{"class":199},[128,149493,27321],{"class":176},[128,149495,149496],{"class":176}," requests",[128,149498,29915],{"class":166},[128,149500,123084],{"class":176},[19,149502,149503],{},"常见第三方库：",[3891,149505,149506,149515],{},[3894,149507,149508],{},[3897,149509,149510,149513],{},[3900,149511,149512],{},"库",[3900,149514,106059],{},[3938,149516,149517,149524,149531,149538,149545,149553,149561],{},[3897,149518,149519,149521],{},[3943,149520,3586],{},[3943,149522,149523],{},"网络请求",[3897,149525,149526,149528],{},[3943,149527,3562],{},[3943,149529,149530],{},"数值计算",[3897,149532,149533,149535],{},[3943,149534,3565],{},[3943,149536,149537],{},"表格数据处理",[3897,149539,149540,149542],{},[3943,149541,3568],{},[3943,149543,149544],{},"绘图",[3897,149546,149547,149550],{},[3943,149548,149549],{},"pyecharts",[3943,149551,149552],{},"ECharts 图表",[3897,149554,149555,149558],{},[3943,149556,149557],{},"flask",[3943,149559,149560],{},"Web 后端",[3897,149562,149563,149565],{},[3943,149564,3598],{},[3943,149566,149567],{},"自动化测试",[14,149569,149571],{"id":149570},"_15-虚拟环境","1.5 虚拟环境",[19,149573,149574,149575,149578],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[114,149576,149577],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,149580,149581],{},"创建虚拟环境：",[106,149583,149585],{"className":27309,"code":149584,"language":27311,"meta":112,"style":112},"python -m venv .venv\n",[114,149586,149587],{"__ignoreMap":112},[128,149588,149589,149591,149593,149595],{"class":130,"line":131},[128,149590,124],{"class":199},[128,149592,104250],{"class":166},[128,149594,104253],{"class":176},[128,149596,104256],{"class":176},[19,149598,149599],{},"Windows 激活：",[106,149601,149603],{"className":27309,"code":149602,"language":27311,"meta":112,"style":112},".venv\\Scripts\\activate\n",[114,149604,149605],{"__ignoreMap":112},[128,149606,149607],{"class":130,"line":131},[128,149608,149602],{"class":199},[19,149610,149611],{},"macOS\u002FLinux 激活：",[106,149613,149615],{"className":27309,"code":149614,"language":27311,"meta":112,"style":112},"source .venv\u002Fbin\u002Factivate\n",[114,149616,149617],{"__ignoreMap":112},[128,149618,149619,149621],{"class":130,"line":131},[128,149620,104261],{"class":166},[128,149622,104264],{"class":176},[19,149624,149625],{},"退出虚拟环境：",[106,149627,149629],{"className":27309,"code":149628,"language":27311,"meta":112,"style":112},"deactivate\n",[114,149630,149631],{"__ignoreMap":112},[128,149632,149633],{"class":130,"line":131},[128,149634,149628],{"class":199},[19,149636,149637],{},"保存依赖：",[106,149639,149641],{"className":27309,"code":149640,"language":27311,"meta":112,"style":112},"pip freeze > requirements.txt\n",[114,149642,149643],{"__ignoreMap":112},[128,149644,149645,149647,149650,149652],{"class":130,"line":131},[128,149646,27318],{"class":199},[128,149648,149649],{"class":176}," freeze",[128,149651,29707],{"class":134},[128,149653,149654],{"class":176}," requirements.txt\n",[19,149656,149657],{},"安装依赖：",[106,149659,149661],{"className":27309,"code":149660,"language":27311,"meta":112,"style":112},"pip install -r requirements.txt\n",[114,149662,149663],{"__ignoreMap":112},[128,149664,149665,149667,149669,149671],{"class":130,"line":131},[128,149666,27318],{"class":199},[128,149668,27321],{"class":176},[128,149670,122995],{"class":166},[128,149672,149654],{"class":176},[14,149674,149676],{"id":149675},"_16-开发工具","1.6 开发工具",[72,149678,149680],{"id":149679},"_161-pycharm","1.6.1 PyCharm",[19,149682,149683],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,149685,125418],{},[26,149687,149688,149691,149694,149700,149703],{},[29,149689,149690],{},"New Project：创建项目。",[29,149692,149693],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[29,149695,149696,149697,129335],{},"New Python File：创建 ",[114,149698,149699],{},".py",[29,149701,149702],{},"Run：运行当前文件。",[29,149704,149705],{},"Debug：断点调试。",[72,149707,149709],{"id":149708},"_162-vs-code","1.6.2 VS Code",[19,149711,149712],{},"VS Code 轻量，适合后续多语言开发。",[19,149714,149715],{},"建议安装插件：",[26,149717,149718,149721,149724],{},[29,149719,149720],{},"Python。",[29,149722,149723],{},"Pylance。",[29,149725,149726],{},"Jupyter。",[19,149728,149729],{},"选择解释器：",[106,149731,149734],{"className":149732,"code":149733,"language":111,"meta":112},[109],"Ctrl + Shift + P -> Python: Select Interpreter\n",[114,149735,149733],{"__ignoreMap":112},[14,149737,149739],{"id":149738},"_17-第一个python程序","1.7 第一个Python程序",[19,149741,149742,149743,28105],{},"创建文件 ",[114,149744,149745],{},"hello.py",[106,149747,149749],{"className":122,"code":149748,"language":124,"meta":112,"style":112},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[114,149750,149751,149762],{"__ignoreMap":112},[128,149752,149753,149755,149757,149760],{"class":130,"line":131},[128,149754,2469],{"class":166},[128,149756,253],{"class":138},[128,149758,149759],{"class":176},"\"Hello World\"",[128,149761,180],{"class":138},[128,149763,149764,149766,149768,149771],{"class":130,"line":142},[128,149765,2469],{"class":166},[128,149767,253],{"class":138},[128,149769,149770],{"class":176},"\"你好，Python\"",[128,149772,180],{"class":138},[19,149774,149775],{},"在终端运行：",[106,149777,149779],{"className":27309,"code":149778,"language":27311,"meta":112,"style":112},"python hello.py\n",[114,149780,149781],{"__ignoreMap":112},[128,149782,149783,149785],{"class":130,"line":131},[128,149784,124],{"class":199},[128,149786,149787],{"class":176}," hello.py\n",[19,149789,149790],{},"或：",[106,149792,149794],{"className":27309,"code":149793,"language":27311,"meta":112,"style":112},"python3 hello.py\n",[114,149795,149796],{"__ignoreMap":112},[128,149797,149798,149800],{"class":130,"line":131},[128,149799,104247],{"class":199},[128,149801,149787],{"class":176},[19,149803,149804],{},"输出：",[106,149806,149809],{"className":149807,"code":149808,"language":111,"meta":112},[109],"Hello World\n你好，Python\n",[114,149810,149808],{"__ignoreMap":112},[14,149812,149814],{"id":149813},"_18-print函数","1.8 print函数",[19,149816,149817,149820],{},[114,149818,149819],{},"print()"," 用来输出内容。",[106,149822,149824],{"className":122,"code":149823,"language":124,"meta":112,"style":112},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[114,149825,149826,149836,149846,149856],{"__ignoreMap":112},[128,149827,149828,149830,149832,149834],{"class":130,"line":131},[128,149829,2469],{"class":166},[128,149831,253],{"class":138},[128,149833,9402],{"class":176},[128,149835,180],{"class":138},[128,149837,149838,149840,149842,149844],{"class":130,"line":142},[128,149839,2469],{"class":166},[128,149841,253],{"class":138},[128,149843,4061],{"class":166},[128,149845,180],{"class":138},[128,149847,149848,149850,149852,149854],{"class":130,"line":156},[128,149849,2469],{"class":166},[128,149851,253],{"class":138},[128,149853,3806],{"class":166},[128,149855,180],{"class":138},[128,149857,149858,149860,149862,149865,149867,149869],{"class":130,"line":163},[128,149859,2469],{"class":166},[128,149861,253],{"class":138},[128,149863,149864],{"class":176},"\"年龄:\"",[128,149866,258],{"class":138},[128,149868,4399],{"class":166},[128,149870,180],{"class":138},[19,149872,149873],{},"多个内容用逗号隔开，默认中间加空格：",[106,149875,149877],{"className":122,"code":149876,"language":124,"meta":112,"style":112},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[114,149878,149879,149889,149899],{"__ignoreMap":112},[128,149880,149881,149884,149886],{"class":130,"line":131},[128,149882,149883],{"class":138},"name ",[128,149885,270],{"class":134},[128,149887,149888],{"class":176}," \"张三\"\n",[128,149890,149891,149894,149896],{"class":130,"line":142},[128,149892,149893],{"class":138},"age ",[128,149895,270],{"class":134},[128,149897,149898],{"class":166}," 18\n",[128,149900,149901,149903,149905,149908,149911,149913],{"class":130,"line":156},[128,149902,2469],{"class":166},[128,149904,253],{"class":138},[128,149906,149907],{"class":176},"\"姓名:\"",[128,149909,149910],{"class":138},", name, ",[128,149912,149864],{"class":176},[128,149914,149915],{"class":138},", age)\n",[19,149917,149918],{},"修改分隔符：",[106,149920,149922],{"className":122,"code":149921,"language":124,"meta":112,"style":112},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[114,149923,149924],{"__ignoreMap":112},[128,149925,149926,149928,149930,149933,149935,149937,149939,149941,149943,149946,149948,149950],{"class":130,"line":131},[128,149927,2469],{"class":166},[128,149929,253],{"class":138},[128,149931,149932],{"class":176},"\"2024\"",[128,149934,258],{"class":138},[128,149936,57697],{"class":176},[128,149938,258],{"class":138},[128,149940,57697],{"class":176},[128,149942,258],{"class":138},[128,149944,149945],{"class":266},"sep",[128,149947,270],{"class":134},[128,149949,35949],{"class":176},[128,149951,180],{"class":138},[19,149953,149954],{},"修改结尾符：",[106,149956,149958],{"className":122,"code":149957,"language":124,"meta":112,"style":112},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[114,149959,149960,149978],{"__ignoreMap":112},[128,149961,149962,149964,149966,149968,149970,149972,149974,149976],{"class":130,"line":131},[128,149963,2469],{"class":166},[128,149965,253],{"class":138},[128,149967,9402],{"class":176},[128,149969,258],{"class":138},[128,149971,49186],{"class":266},[128,149973,270],{"class":134},[128,149975,7925],{"class":176},[128,149977,180],{"class":138},[128,149979,149980,149982,149984,149987],{"class":130,"line":142},[128,149981,2469],{"class":166},[128,149983,253],{"class":138},[128,149985,149986],{"class":176},"\"python\"",[128,149988,180],{"class":138},[14,149990,149992],{"id":149991},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,149994,149995],{},"交互运行适合临时验证：",[106,149997,149999],{"className":122,"code":149998,"language":124,"meta":112,"style":112},">>> 10 * 3\n30\n",[114,150000,150001,150011],{"__ignoreMap":112},[128,150002,150003,150005,150007,150009],{"class":130,"line":131},[128,150004,149204],{"class":134},[128,150006,5625],{"class":166},[128,150008,10075],{"class":134},[128,150010,123392],{"class":166},[128,150012,150013],{"class":130,"line":142},[128,150014,150015],{"class":166},"30\n",[19,150017,150018],{},"脚本运行适合保存程序：",[106,150020,150022],{"className":122,"code":150021,"language":124,"meta":112,"style":112},"price = 8\ncount = 5\nprint(price * count)\n",[114,150023,150024,150034,150043],{"__ignoreMap":112},[128,150025,150026,150029,150031],{"class":130,"line":131},[128,150027,150028],{"class":138},"price ",[128,150030,270],{"class":134},[128,150032,150033],{"class":166}," 8\n",[128,150035,150036,150039,150041],{"class":130,"line":142},[128,150037,150038],{"class":138},"count ",[128,150040,270],{"class":134},[128,150042,57808],{"class":166},[128,150044,150045,150047,150050,150052],{"class":130,"line":156},[128,150046,2469],{"class":166},[128,150048,150049],{"class":138},"(price ",[128,150051,4205],{"class":134},[128,150053,150054],{"class":138}," count)\n",[19,150056,150057],{},"实际学习中推荐：",[26,150059,150060,150063,150068],{},[29,150061,150062],{},"临时试一个语法，用交互模式。",[29,150064,150065,150066,129335],{},"写完整练习，用 ",[114,150067,149699],{},[29,150069,150070],{},"写项目，用独立目录和虚拟环境。",[14,150072,150074],{"id":150073},"_110-常见错误","1.10 常见错误",[72,150076,150078],{"id":150077},"_1101-命令找不到","1.10.1 命令找不到",[106,150080,150083],{"className":150081,"code":150082,"language":111,"meta":112},[109],"python: command not found\n",[114,150084,150082],{"__ignoreMap":112},[19,150086,150087],{},"原因：",[26,150089,150090,150093,150096],{},[29,150091,150092],{},"没安装 Python。",[29,150094,150095],{},"PATH 没配置。",[29,150097,150098,150099,1842],{},"Linux\u002FmacOS 应该使用 ",[114,150100,104247],{},[72,150102,150104],{"id":150103},"_1102-文件名冲突","1.10.2 文件名冲突",[19,150106,150107],{},"不要把文件命名为：",[106,150109,150112],{"className":150110,"code":150111,"language":111,"meta":112},[109],"random.py\njson.py\ntime.py\nrequests.py\n",[114,150113,150111],{"__ignoreMap":112},[19,150115,150116],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[72,150118,150120],{"id":150119},"_1103-中文乱码","1.10.3 中文乱码",[19,150122,150123],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,150125,150126],{},"如果读写文件出现乱码，要明确指定编码：",[106,150128,150130],{"className":122,"code":150129,"language":124,"meta":112,"style":112},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[114,150131,150132,150162],{"__ignoreMap":112},[128,150133,150134,150136,150138,150140,150143,150145,150147,150149,150151,150153,150155,150157,150159],{"class":130,"line":131},[128,150135,111195],{"class":134},[128,150137,250],{"class":166},[128,150139,253],{"class":138},[128,150141,150142],{"class":176},"\"data.txt\"",[128,150144,258],{"class":138},[128,150146,261],{"class":176},[128,150148,258],{"class":138},[128,150150,267],{"class":266},[128,150152,270],{"class":134},[128,150154,273],{"class":176},[128,150156,276],{"class":138},[128,150158,279],{"class":134},[128,150160,150161],{"class":138}," f:\n",[128,150163,150164,150167,150169],{"class":130,"line":142},[128,150165,150166],{"class":138},"    content ",[128,150168,270],{"class":134},[128,150170,150171],{"class":138}," f.read()\n",[14,150173,150175],{"id":150174},"_111-本章练习","1.11 本章练习",[26,150177,150178,150181,150187],{},[29,150179,150180],{},"安装 Python，并在终端输出版本号。",[29,150182,150183,150184,150186],{},"新建 ",[114,150185,149745],{},"，输出自己的姓名、年龄、学习目标。",[29,150188,107729,150189,150191],{},[114,150190,149819],{}," 输出下面格式：",[106,150193,150196],{"className":150194,"code":150195,"language":111,"meta":112},[109],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[114,150197,150195],{"__ignoreMap":112},[26,150199,150200],{"start":163},[29,150201,107729,150202,150204],{},[114,150203,149945],{}," 输出日期：",[106,150206,150209],{"className":150207,"code":150208,"language":111,"meta":112},[109],"2024-10-10\n",[114,150210,150208],{"__ignoreMap":112},[26,150212,150213],{"start":183},[29,150214,107729,150215,150217,150218,150220],{},[114,150216,49186],{}," 让两次 ",[114,150219,149819],{}," 输出在同一行。",[3659,150222,150223],{},"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":112,"searchDepth":142,"depth":142,"links":150225},[150226,150227,150228,150233,150234,150235,150239,150240,150241,150242,150247],{"id":149117,"depth":142,"text":149118},{"id":149160,"depth":142,"text":149161},{"id":149261,"depth":142,"text":149262,"children":150229},[150230,150231,150232],{"id":149265,"depth":156,"text":149266},{"id":149320,"depth":156,"text":149321},{"id":149356,"depth":156,"text":149357},{"id":149429,"depth":142,"text":149430},{"id":149570,"depth":142,"text":149571},{"id":149675,"depth":142,"text":149676,"children":150236},[150237,150238],{"id":149679,"depth":156,"text":149680},{"id":149708,"depth":156,"text":149709},{"id":149738,"depth":142,"text":149739},{"id":149813,"depth":142,"text":149814},{"id":149991,"depth":142,"text":149992},{"id":150073,"depth":142,"text":150074,"children":150243},[150244,150245,150246],{"id":150077,"depth":156,"text":150078},{"id":150103,"depth":156,"text":150104},{"id":150119,"depth":156,"text":150120},{"id":150174,"depth":142,"text":150175},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":149109,"description":3686},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":150254,"title":150255,"body":150256,"description":3686,"extension":3687,"meta":152637,"navigation":159,"path":152638,"seo":152639,"stem":152640,"__hash__":152641},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":150257,"toc":152622},[150258,150261,150265,150268,150271,150288,150291,150333,150336,150340,150343,150346,150383,150386,150420,150423,150513,150517,150531,150534,150561,150564,150568,150667,150674,150677,150694,150698,150705,150886,150889,150962,150966,150969,151053,151056,151088,151092,151296,151299,151303,151309,151410,151413,151666,151670,151673,151676,151690,151692,151876,151880,152240,152246,152250,152253,152377,152380,152558,152561,152565,152598,152602,152619],[10,150259,150255],{"id":150260},"_10-json与pyecharts折线图",[14,150262,150264],{"id":150263},"_101-数据可视化","10.1 数据可视化",[19,150266,150267],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,150269,150270],{},"常见图表：",[26,150272,150273,150276,150279,150282,150285],{},[29,150274,150275],{},"折线图：看趋势。",[29,150277,150278],{},"柱状图：看分类对比。",[29,150280,150281],{},"饼图：看占比。",[29,150283,150284],{},"地图：看地域分布。",[29,150286,150287],{},"散点图：看两个变量之间的关系。",[19,150289,150290],{},"Python 可视化常用库：",[3891,150292,150293,150301],{},[3894,150294,150295],{},[3897,150296,150297,150299],{},[3900,150298,149512],{},[3900,150300,27227],{},[3938,150302,150303,150310,150318,150325],{},[3897,150304,150305,150307],{},[3943,150306,3568],{},[3943,150308,150309],{},"基础、经典、可定制",[3897,150311,150312,150315],{},[3943,150313,150314],{},"seaborn",[3943,150316,150317],{},"统计图表更美观",[3897,150319,150320,150322],{},[3943,150321,149549],{},[3943,150323,150324],{},"生成交互式网页图表",[3897,150326,150327,150330],{},[3943,150328,150329],{},"plotly",[3943,150331,150332],{},"交互图表能力强",[19,150334,150335],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,150337,150339],{"id":150338},"_102-json回顾","10.2 JSON回顾",[19,150341,150342],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,150344,150345],{},"Python 字典：",[106,150347,150349],{"className":122,"code":150348,"language":124,"meta":112,"style":112},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[114,150350,150351,150359,150370,150379],{"__ignoreMap":112},[128,150352,150353,150355,150357],{"class":130,"line":131},[128,150354,2857],{"class":138},[128,150356,270],{"class":134},[128,150358,1959],{"class":138},[128,150360,150361,150364,150366,150368],{"class":130,"line":142},[128,150362,150363],{"class":176},"    \"name\"",[128,150365,1967],{"class":138},[128,150367,3110],{"class":176},[128,150369,2665],{"class":138},[128,150371,150372,150375,150377],{"class":130,"line":156},[128,150373,150374],{"class":176},"    \"value\"",[128,150376,1967],{"class":138},[128,150378,100827],{"class":166},[128,150380,150381],{"class":130,"line":163},[128,150382,2694],{"class":138},[19,150384,150385],{},"JSON 字符串：",[106,150387,150390],{"className":150388,"code":150389,"language":149143,"meta":112,"style":112},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[114,150391,150392,150396,150407,150416],{"__ignoreMap":112},[128,150393,150394],{"class":130,"line":131},[128,150395,5157],{"class":138},[128,150397,150398,150401,150403,150405],{"class":130,"line":142},[128,150399,150400],{"class":166},"  \"name\"",[128,150402,1967],{"class":138},[128,150404,3110],{"class":176},[128,150406,2665],{"class":138},[128,150408,150409,150412,150414],{"class":130,"line":156},[128,150410,150411],{"class":166},"  \"value\"",[128,150413,1967],{"class":138},[128,150415,100827],{"class":166},[128,150417,150418],{"class":130,"line":163},[128,150419,2694],{"class":138},[19,150421,150422],{},"Python 与 JSON 的转换：",[106,150424,150426],{"className":122,"code":150425,"language":124,"meta":112,"style":112},"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",[114,150427,150428,150434,150438,150463,150467,150485,150492,150496,150506],{"__ignoreMap":112},[128,150429,150430,150432],{"class":130,"line":131},[128,150431,135],{"class":134},[128,150433,139],{"class":138},[128,150435,150436],{"class":130,"line":142},[128,150437,160],{"emptyLinePlaceholder":159},[128,150439,150440,150442,150444,150446,150448,150450,150452,150454,150457,150459,150461],{"class":130,"line":156},[128,150441,2857],{"class":138},[128,150443,270],{"class":134},[128,150445,8013],{"class":138},[128,150447,1189],{"class":176},[128,150449,1967],{"class":138},[128,150451,3110],{"class":176},[128,150453,258],{"class":138},[128,150455,150456],{"class":176},"\"value\"",[128,150458,1967],{"class":138},[128,150460,4061],{"class":166},[128,150462,2694],{"class":138},[128,150464,150465],{"class":130,"line":163},[128,150466,160],{"emptyLinePlaceholder":159},[128,150468,150469,150472,150474,150477,150479,150481,150483],{"class":130,"line":183},[128,150470,150471],{"class":138},"json_text ",[128,150473,270],{"class":134},[128,150475,150476],{"class":138}," json.dumps(data, ",[128,150478,394],{"class":266},[128,150480,270],{"class":134},[128,150482,399],{"class":166},[128,150484,180],{"class":138},[128,150486,150487,150489],{"class":130,"line":188},[128,150488,2469],{"class":166},[128,150490,150491],{"class":138},"(json_text)\n",[128,150493,150494],{"class":130,"line":193},[128,150495,160],{"emptyLinePlaceholder":159},[128,150497,150498,150501,150503],{"class":130,"line":206},[128,150499,150500],{"class":138},"new_data ",[128,150502,270],{"class":134},[128,150504,150505],{"class":138}," json.loads(json_text)\n",[128,150507,150508,150510],{"class":130,"line":221},[128,150509,2469],{"class":166},[128,150511,150512],{"class":138},"(new_data)\n",[14,150514,150516],{"id":150515},"_103-安装pyecharts","10.3 安装pyecharts",[106,150518,150520],{"className":27309,"code":150519,"language":27311,"meta":112,"style":112},"pip install pyecharts\n",[114,150521,150522],{"__ignoreMap":112},[128,150523,150524,150526,150528],{"class":130,"line":131},[128,150525,27318],{"class":199},[128,150527,27321],{"class":176},[128,150529,150530],{"class":176}," pyecharts\n",[19,150532,150533],{},"验证：",[106,150535,150537],{"className":122,"code":150536,"language":124,"meta":112,"style":112},"import pyecharts\n\nprint(pyecharts.__version__)\n",[114,150538,150539,150545,150549],{"__ignoreMap":112},[128,150540,150541,150543],{"class":130,"line":131},[128,150542,135],{"class":134},[128,150544,150530],{"class":138},[128,150546,150547],{"class":130,"line":142},[128,150548,160],{"emptyLinePlaceholder":159},[128,150550,150551,150553,150556,150559],{"class":130,"line":156},[128,150552,2469],{"class":166},[128,150554,150555],{"class":138},"(pyecharts.",[128,150557,150558],{"class":166},"__version__",[128,150560,180],{"class":138},[19,150562,150563],{},"如果使用虚拟环境，要先激活环境再安装。",[14,150565,150567],{"id":150566},"_104-第一个折线图","10.4 第一个折线图",[106,150569,150571],{"className":122,"code":150570,"language":124,"meta":112,"style":112},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[114,150572,150573,150584,150588,150598,150628,150657],{"__ignoreMap":112},[128,150574,150575,150577,150579,150581],{"class":130,"line":131},[128,150576,145],{"class":134},[128,150578,2635],{"class":138},[128,150580,135],{"class":134},[128,150582,150583],{"class":138}," Line\n",[128,150585,150586],{"class":130,"line":142},[128,150587,160],{"emptyLinePlaceholder":159},[128,150589,150590,150593,150595],{"class":130,"line":156},[128,150591,150592],{"class":138},"line ",[128,150594,270],{"class":134},[128,150596,150597],{"class":138}," Line()\n",[128,150599,150600,150603,150606,150608,150611,150613,150616,150618,150621,150623,150626],{"class":130,"line":163},[128,150601,150602],{"class":138},"line.add_xaxis([",[128,150604,150605],{"class":176},"\"周一\"",[128,150607,258],{"class":138},[128,150609,150610],{"class":176},"\"周二\"",[128,150612,258],{"class":138},[128,150614,150615],{"class":176},"\"周三\"",[128,150617,258],{"class":138},[128,150619,150620],{"class":176},"\"周四\"",[128,150622,258],{"class":138},[128,150624,150625],{"class":176},"\"周五\"",[128,150627,2595],{"class":138},[128,150629,150630,150633,150635,150637,150639,150641,150643,150645,150647,150649,150651,150653,150655],{"class":130,"line":183},[128,150631,150632],{"class":138},"line.add_yaxis(",[128,150634,2727],{"class":176},[128,150636,80892],{"class":138},[128,150638,4061],{"class":166},[128,150640,258],{"class":138},[128,150642,3115],{"class":166},[128,150644,258],{"class":138},[128,150646,4610],{"class":166},[128,150648,258],{"class":138},[128,150650,3129],{"class":166},[128,150652,258],{"class":138},[128,150654,3157],{"class":166},[128,150656,2595],{"class":138},[128,150658,150659,150662,150665],{"class":130,"line":188},[128,150660,150661],{"class":138},"line.render(",[128,150663,150664],{"class":176},"\"line.html\"",[128,150666,180],{"class":138},[19,150668,150669,150670,150673],{},"运行后会生成 ",[114,150671,150672],{},"line.html","，用浏览器打开即可看到图表。",[19,150675,150676],{},"核心步骤：",[26,150678,150679,150682,150685,150688,150691],{},[29,150680,150681],{},"导入图表类。",[29,150683,150684],{},"创建图表对象。",[29,150686,150687],{},"添加 x 轴数据。",[29,150689,150690],{},"添加 y 轴数据。",[29,150692,150693],{},"渲染为 HTML。",[14,150695,150697],{"id":150696},"_105-全局配置","10.5 全局配置",[19,150699,150700,150701,150704],{},"常用配置在 ",[114,150702,150703],{},"pyecharts.options"," 中。",[106,150706,150708],{"className":122,"code":150707,"language":124,"meta":112,"style":112},"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",[114,150709,150710,150724,150734,150738,150746,150770,150798,150803,150820,150837,150854,150874,150878],{"__ignoreMap":112},[128,150711,150712,150714,150716,150718,150720,150722],{"class":130,"line":131},[128,150713,145],{"class":134},[128,150715,2618],{"class":138},[128,150717,135],{"class":134},[128,150719,2623],{"class":138},[128,150721,279],{"class":134},[128,150723,2628],{"class":138},[128,150725,150726,150728,150730,150732],{"class":130,"line":142},[128,150727,145],{"class":134},[128,150729,2635],{"class":138},[128,150731,135],{"class":134},[128,150733,150583],{"class":138},[128,150735,150736],{"class":130,"line":156},[128,150737,160],{"emptyLinePlaceholder":159},[128,150739,150740,150742,150744],{"class":130,"line":163},[128,150741,150592],{"class":138},[128,150743,270],{"class":134},[128,150745,150597],{"class":138},[128,150747,150748,150750,150752,150754,150756,150758,150760,150762,150764,150766,150768],{"class":130,"line":183},[128,150749,150602],{"class":138},[128,150751,150605],{"class":176},[128,150753,258],{"class":138},[128,150755,150610],{"class":176},[128,150757,258],{"class":138},[128,150759,150615],{"class":176},[128,150761,258],{"class":138},[128,150763,150620],{"class":176},[128,150765,258],{"class":138},[128,150767,150625],{"class":176},[128,150769,2595],{"class":138},[128,150771,150772,150774,150776,150778,150780,150782,150784,150786,150788,150790,150792,150794,150796],{"class":130,"line":188},[128,150773,150632],{"class":138},[128,150775,2727],{"class":176},[128,150777,80892],{"class":138},[128,150779,4061],{"class":166},[128,150781,258],{"class":138},[128,150783,3115],{"class":166},[128,150785,258],{"class":138},[128,150787,4610],{"class":166},[128,150789,258],{"class":138},[128,150791,3129],{"class":166},[128,150793,258],{"class":138},[128,150795,3157],{"class":166},[128,150797,2595],{"class":138},[128,150799,150800],{"class":130,"line":193},[128,150801,150802],{"class":138},"line.set_global_opts(\n",[128,150804,150805,150807,150809,150811,150813,150815,150818],{"class":130,"line":206},[128,150806,2744],{"class":266},[128,150808,270],{"class":134},[128,150810,2749],{"class":138},[128,150812,2752],{"class":266},[128,150814,270],{"class":134},[128,150816,150817],{"class":176},"\"一周销售额\"",[128,150819,2760],{"class":138},[128,150821,150822,150824,150826,150828,150830,150832,150835],{"class":130,"line":221},[128,150823,2765],{"class":266},[128,150825,270],{"class":134},[128,150827,2770],{"class":138},[128,150829,2773],{"class":266},[128,150831,270],{"class":134},[128,150833,150834],{"class":176},"\"日期\"",[128,150836,2760],{"class":138},[128,150838,150839,150841,150843,150845,150847,150849,150852],{"class":130,"line":230},[128,150840,2785],{"class":266},[128,150842,270],{"class":134},[128,150844,2770],{"class":138},[128,150846,2773],{"class":266},[128,150848,270],{"class":134},[128,150850,150851],{"class":176},"\"金额\"",[128,150853,2760],{"class":138},[128,150855,150856,150859,150861,150864,150867,150869,150872],{"class":130,"line":235},[128,150857,150858],{"class":266},"    tooltip_opts",[128,150860,270],{"class":134},[128,150862,150863],{"class":138},"opts.TooltipOpts(",[128,150865,150866],{"class":266},"trigger",[128,150868,270],{"class":134},[128,150870,150871],{"class":176},"\"axis\"",[128,150873,2760],{"class":138},[128,150875,150876],{"class":130,"line":244},[128,150877,180],{"class":138},[128,150879,150880,150882,150884],{"class":130,"line":287},[128,150881,150661],{"class":138},[128,150883,150664],{"class":176},[128,150885,180],{"class":138},[19,150887,150888],{},"常见全局配置：",[3891,150890,150891,150900],{},[3894,150892,150893],{},[3897,150894,150895,150898],{},[3900,150896,150897],{},"配置",[3900,150899,106059],{},[3938,150901,150902,150912,150922,150932,150942,150952],{},[3897,150903,150904,150909],{},[3943,150905,150906],{},[114,150907,150908],{},"TitleOpts",[3943,150910,150911],{},"标题",[3897,150913,150914,150919],{},[3943,150915,150916],{},[114,150917,150918],{},"LegendOpts",[3943,150920,150921],{},"图例",[3897,150923,150924,150929],{},[3943,150925,150926],{},[114,150927,150928],{},"TooltipOpts",[3943,150930,150931],{},"提示框",[3897,150933,150934,150939],{},[3943,150935,150936],{},[114,150937,150938],{},"AxisOpts",[3943,150940,150941],{},"坐标轴",[3897,150943,150944,150949],{},[3943,150945,150946],{},[114,150947,150948],{},"VisualMapOpts",[3943,150950,150951],{},"视觉映射",[3897,150953,150954,150959],{},[3943,150955,150956],{},[114,150957,150958],{},"DataZoomOpts",[3943,150960,150961],{},"区域缩放",[14,150963,150965],{"id":150964},"_106-系列配置","10.6 系列配置",[19,150967,150968],{},"系列配置作用于某一组数据。",[106,150970,150972],{"className":122,"code":150971,"language":124,"meta":112,"style":112},"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",[114,150973,150974,150979,150990,151019,151030,151049],{"__ignoreMap":112},[128,150975,150976],{"class":130,"line":131},[128,150977,150978],{"class":138},"line.add_yaxis(\n",[128,150980,150981,150984,150986,150988],{"class":130,"line":142},[128,150982,150983],{"class":266},"    series_name",[128,150985,270],{"class":134},[128,150987,2727],{"class":176},[128,150989,2665],{"class":138},[128,150991,150992,150995,150997,150999,151001,151003,151005,151007,151009,151011,151013,151015,151017],{"class":130,"line":156},[128,150993,150994],{"class":266},"    y_axis",[128,150996,270],{"class":134},[128,150998,4638],{"class":138},[128,151000,4061],{"class":166},[128,151002,258],{"class":138},[128,151004,3115],{"class":166},[128,151006,258],{"class":138},[128,151008,4610],{"class":166},[128,151010,258],{"class":138},[128,151012,3129],{"class":166},[128,151014,258],{"class":138},[128,151016,3157],{"class":166},[128,151018,2055],{"class":138},[128,151020,151021,151024,151026,151028],{"class":130,"line":163},[128,151022,151023],{"class":266},"    is_smooth",[128,151025,270],{"class":134},[128,151027,34945],{"class":166},[128,151029,2665],{"class":138},[128,151031,151032,151035,151037,151040,151043,151045,151047],{"class":130,"line":183},[128,151033,151034],{"class":266},"    label_opts",[128,151036,270],{"class":134},[128,151038,151039],{"class":138},"opts.LabelOpts(",[128,151041,151042],{"class":266},"is_show",[128,151044,270],{"class":134},[128,151046,34945],{"class":166},[128,151048,2760],{"class":138},[128,151050,151051],{"class":130,"line":188},[128,151052,180],{"class":138},[19,151054,151055],{},"常用参数：",[26,151057,151058,151064,151070,151076,151082],{},[29,151059,151060,151063],{},[114,151061,151062],{},"series_name","：系列名称。",[29,151065,151066,151069],{},[114,151067,151068],{},"y_axis","：y 轴数据。",[29,151071,151072,151075],{},[114,151073,151074],{},"is_smooth","：是否平滑曲线。",[29,151077,151078,151081],{},[114,151079,151080],{},"label_opts","：标签配置。",[29,151083,151084,151087],{},[114,151085,151086],{},"symbol_size","：标记点大小。",[14,151089,151091],{"id":151090},"_107-多条折线","10.7 多条折线",[106,151093,151095],{"className":122,"code":151094,"language":124,"meta":112,"style":112},"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",[114,151096,151097,151111,151121,151125,151154,151158,151166,151171,151209,151246,151250,151267,151283,151287],{"__ignoreMap":112},[128,151098,151099,151101,151103,151105,151107,151109],{"class":130,"line":131},[128,151100,145],{"class":134},[128,151102,2618],{"class":138},[128,151104,135],{"class":134},[128,151106,2623],{"class":138},[128,151108,279],{"class":134},[128,151110,2628],{"class":138},[128,151112,151113,151115,151117,151119],{"class":130,"line":142},[128,151114,145],{"class":134},[128,151116,2635],{"class":138},[128,151118,135],{"class":134},[128,151120,150583],{"class":138},[128,151122,151123],{"class":130,"line":156},[128,151124,160],{"emptyLinePlaceholder":159},[128,151126,151127,151130,151132,151134,151136,151138,151140,151142,151144,151146,151148,151150,151152],{"class":130,"line":163},[128,151128,151129],{"class":138},"dates ",[128,151131,270],{"class":134},[128,151133,55608],{"class":138},[128,151135,150605],{"class":176},[128,151137,258],{"class":138},[128,151139,150610],{"class":176},[128,151141,258],{"class":138},[128,151143,150615],{"class":176},[128,151145,258],{"class":138},[128,151147,150620],{"class":176},[128,151149,258],{"class":138},[128,151151,150625],{"class":176},[128,151153,2376],{"class":138},[128,151155,151156],{"class":130,"line":183},[128,151157,160],{"emptyLinePlaceholder":159},[128,151159,151160,151162,151164],{"class":130,"line":188},[128,151161,150592],{"class":138},[128,151163,270],{"class":134},[128,151165,150597],{"class":138},[128,151167,151168],{"class":130,"line":193},[128,151169,151170],{"class":138},"line.add_xaxis(dates)\n",[128,151172,151173,151175,151178,151180,151182,151184,151187,151189,151191,151193,151195,151197,151199,151201,151203,151205,151207],{"class":130,"line":206},[128,151174,150632],{"class":138},[128,151176,151177],{"class":176},"\"线上销售\"",[128,151179,80892],{"class":138},[128,151181,4061],{"class":166},[128,151183,258],{"class":138},[128,151185,151186],{"class":166},"130",[128,151188,258],{"class":138},[128,151190,3115],{"class":166},[128,151192,258],{"class":138},[128,151194,24535],{"class":166},[128,151196,258],{"class":138},[128,151198,3143],{"class":166},[128,151200,115559],{"class":138},[128,151202,151074],{"class":266},[128,151204,270],{"class":134},[128,151206,34945],{"class":166},[128,151208,180],{"class":138},[128,151210,151211,151213,151216,151218,151220,151222,151224,151226,151228,151230,151232,151234,151236,151238,151240,151242,151244],{"class":130,"line":221},[128,151212,150632],{"class":138},[128,151214,151215],{"class":176},"\"线下销售\"",[128,151217,80892],{"class":138},[128,151219,4361],{"class":166},[128,151221,258],{"class":138},[128,151223,4610],{"class":166},[128,151225,258],{"class":138},[128,151227,4061],{"class":166},[128,151229,258],{"class":138},[128,151231,3115],{"class":166},[128,151233,258],{"class":138},[128,151235,3129],{"class":166},[128,151237,115559],{"class":138},[128,151239,151074],{"class":266},[128,151241,270],{"class":134},[128,151243,34945],{"class":166},[128,151245,180],{"class":138},[128,151247,151248],{"class":130,"line":230},[128,151249,150802],{"class":138},[128,151251,151252,151254,151256,151258,151260,151262,151265],{"class":130,"line":235},[128,151253,2744],{"class":266},[128,151255,270],{"class":134},[128,151257,2749],{"class":138},[128,151259,2752],{"class":266},[128,151261,270],{"class":134},[128,151263,151264],{"class":176},"\"线上线下销售趋势\"",[128,151266,2760],{"class":138},[128,151268,151269,151271,151273,151275,151277,151279,151281],{"class":130,"line":244},[128,151270,150858],{"class":266},[128,151272,270],{"class":134},[128,151274,150863],{"class":138},[128,151276,150866],{"class":266},[128,151278,270],{"class":134},[128,151280,150871],{"class":176},[128,151282,2760],{"class":138},[128,151284,151285],{"class":130,"line":287},[128,151286,180],{"class":138},[128,151288,151289,151291,151294],{"class":130,"line":301},[128,151290,150661],{"class":138},[128,151292,151293],{"class":176},"\"sales.html\"",[128,151295,180],{"class":138},[19,151297,151298],{},"多条折线适合比较不同指标或不同地区。",[14,151300,151302],{"id":151301},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,151304,151305,151306,28105],{},"假设 ",[114,151307,151308],{},"sales.json",[106,151310,151312],{"className":150388,"code":151311,"language":149143,"meta":112,"style":112},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[114,151313,151314,151319,151350,151378,151406],{"__ignoreMap":112},[128,151315,151316],{"class":130,"line":131},[128,151317,151318],{"class":138},"[\n",[128,151320,151321,151324,151326,151328,151330,151332,151335,151337,151339,151341,151344,151346,151348],{"class":130,"line":142},[128,151322,151323],{"class":138},"  {",[128,151325,2254],{"class":166},[128,151327,1967],{"class":138},[128,151329,150605],{"class":176},[128,151331,258],{"class":138},[128,151333,151334],{"class":166},"\"online\"",[128,151336,1967],{"class":138},[128,151338,4061],{"class":166},[128,151340,258],{"class":138},[128,151342,151343],{"class":166},"\"offline\"",[128,151345,1967],{"class":138},[128,151347,4361],{"class":166},[128,151349,2282],{"class":138},[128,151351,151352,151354,151356,151358,151360,151362,151364,151366,151368,151370,151372,151374,151376],{"class":130,"line":156},[128,151353,151323],{"class":138},[128,151355,2254],{"class":166},[128,151357,1967],{"class":138},[128,151359,150610],{"class":176},[128,151361,258],{"class":138},[128,151363,151334],{"class":166},[128,151365,1967],{"class":138},[128,151367,151186],{"class":166},[128,151369,258],{"class":138},[128,151371,151343],{"class":166},[128,151373,1967],{"class":138},[128,151375,4610],{"class":166},[128,151377,2282],{"class":138},[128,151379,151380,151382,151384,151386,151388,151390,151392,151394,151396,151398,151400,151402,151404],{"class":130,"line":163},[128,151381,151323],{"class":138},[128,151383,2254],{"class":166},[128,151385,1967],{"class":138},[128,151387,150615],{"class":176},[128,151389,258],{"class":138},[128,151391,151334],{"class":166},[128,151393,1967],{"class":138},[128,151395,3115],{"class":166},[128,151397,258],{"class":138},[128,151399,151343],{"class":166},[128,151401,1967],{"class":138},[128,151403,4061],{"class":166},[128,151405,2694],{"class":138},[128,151407,151408],{"class":130,"line":183},[128,151409,2376],{"class":138},[19,151411,151412],{},"读取并绘图：",[106,151414,151416],{"className":122,"code":151415,"language":124,"meta":112,"style":112},"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",[114,151417,151418,151424,151438,151448,151452,151483,151495,151499,151507,151516,151525,151529,151540,151549,151558,151567,151571,151579,151583,151600,151617,151621,151638,151654,151658],{"__ignoreMap":112},[128,151419,151420,151422],{"class":130,"line":131},[128,151421,135],{"class":134},[128,151423,139],{"class":138},[128,151425,151426,151428,151430,151432,151434,151436],{"class":130,"line":142},[128,151427,145],{"class":134},[128,151429,2618],{"class":138},[128,151431,135],{"class":134},[128,151433,2623],{"class":138},[128,151435,279],{"class":134},[128,151437,2628],{"class":138},[128,151439,151440,151442,151444,151446],{"class":130,"line":156},[128,151441,145],{"class":134},[128,151443,2635],{"class":138},[128,151445,135],{"class":134},[128,151447,150583],{"class":138},[128,151449,151450],{"class":130,"line":163},[128,151451,160],{"emptyLinePlaceholder":159},[128,151453,151454,151456,151458,151460,151463,151465,151467,151469,151471,151473,151475,151477,151479,151481],{"class":130,"line":183},[128,151455,111195],{"class":134},[128,151457,250],{"class":166},[128,151459,253],{"class":138},[128,151461,151462],{"class":176},"\"sales.json\"",[128,151464,258],{"class":138},[128,151466,261],{"class":176},[128,151468,258],{"class":138},[128,151470,267],{"class":266},[128,151472,270],{"class":134},[128,151474,273],{"class":176},[128,151476,276],{"class":138},[128,151478,279],{"class":134},[128,151480,282],{"class":266},[128,151482,241],{"class":138},[128,151484,151485,151487,151489,151491,151493],{"class":130,"line":188},[128,151486,104788],{"class":138},[128,151488,270],{"class":134},[128,151490,293],{"class":138},[128,151492,296],{"class":266},[128,151494,180],{"class":138},[128,151496,151497],{"class":130,"line":193},[128,151498,160],{"emptyLinePlaceholder":159},[128,151500,151501,151503,151505],{"class":130,"line":206},[128,151502,151129],{"class":138},[128,151504,270],{"class":134},[128,151506,227],{"class":138},[128,151508,151509,151512,151514],{"class":130,"line":221},[128,151510,151511],{"class":138},"online_sales ",[128,151513,270],{"class":134},[128,151515,227],{"class":138},[128,151517,151518,151521,151523],{"class":130,"line":230},[128,151519,151520],{"class":138},"offline_sales ",[128,151522,270],{"class":134},[128,151524,227],{"class":138},[128,151526,151527],{"class":130,"line":235},[128,151528,160],{"emptyLinePlaceholder":159},[128,151530,151531,151533,151535,151537],{"class":130,"line":244},[128,151532,2404],{"class":134},[128,151534,2407],{"class":138},[128,151536,549],{"class":134},[128,151538,151539],{"class":138}," data:\n",[128,151541,151542,151545,151547],{"class":130,"line":287},[128,151543,151544],{"class":138},"    dates.append(item[",[128,151546,2254],{"class":176},[128,151548,2595],{"class":138},[128,151550,151551,151554,151556],{"class":130,"line":301},[128,151552,151553],{"class":138},"    online_sales.append(item[",[128,151555,151334],{"class":176},[128,151557,2595],{"class":138},[128,151559,151560,151563,151565],{"class":130,"line":310},[128,151561,151562],{"class":138},"    offline_sales.append(item[",[128,151564,151343],{"class":176},[128,151566,2595],{"class":138},[128,151568,151569],{"class":130,"line":323},[128,151570,160],{"emptyLinePlaceholder":159},[128,151572,151573,151575,151577],{"class":130,"line":330},[128,151574,150592],{"class":138},[128,151576,270],{"class":134},[128,151578,150597],{"class":138},[128,151580,151581],{"class":130,"line":335},[128,151582,151170],{"class":138},[128,151584,151585,151587,151589,151592,151594,151596,151598],{"class":130,"line":340},[128,151586,150632],{"class":138},[128,151588,151177],{"class":176},[128,151590,151591],{"class":138},", online_sales, ",[128,151593,151074],{"class":266},[128,151595,270],{"class":134},[128,151597,34945],{"class":166},[128,151599,180],{"class":138},[128,151601,151602,151604,151606,151609,151611,151613,151615],{"class":130,"line":351},[128,151603,150632],{"class":138},[128,151605,151215],{"class":176},[128,151607,151608],{"class":138},", offline_sales, ",[128,151610,151074],{"class":266},[128,151612,270],{"class":134},[128,151614,34945],{"class":166},[128,151616,180],{"class":138},[128,151618,151619],{"class":130,"line":384},[128,151620,150802],{"class":138},[128,151622,151623,151625,151627,151629,151631,151633,151636],{"class":130,"line":414},[128,151624,2744],{"class":266},[128,151626,270],{"class":134},[128,151628,2749],{"class":138},[128,151630,2752],{"class":266},[128,151632,270],{"class":134},[128,151634,151635],{"class":176},"\"销售趋势\"",[128,151637,2760],{"class":138},[128,151639,151640,151642,151644,151646,151648,151650,151652],{"class":130,"line":419},[128,151641,150858],{"class":266},[128,151643,270],{"class":134},[128,151645,150863],{"class":138},[128,151647,150866],{"class":266},[128,151649,270],{"class":134},[128,151651,150871],{"class":176},[128,151653,2760],{"class":138},[128,151655,151656],{"class":130,"line":424},[128,151657,180],{"class":138},[128,151659,151660,151662,151664],{"class":130,"line":434},[128,151661,150661],{"class":138},[128,151663,151293],{"class":176},[128,151665,180],{"class":138},[14,151667,151669],{"id":151668},"_109-数据清洗","10.9 数据清洗",[19,151671,151672],{},"真实数据经常不整齐，需要清洗。",[19,151674,151675],{},"常见问题：",[26,151677,151678,151681,151684,151687],{},[29,151679,151680],{},"数字是字符串。",[29,151682,151683],{},"字段缺失。",[29,151685,151686],{},"空值。",[29,151688,151689],{},"日期格式不统一。",[19,151691,3488],{},[106,151693,151695],{"className":122,"code":151694,"language":124,"meta":112,"style":112},"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",[114,151696,151697,151706,151728,151748,151769,151773,151777,151785,151793,151797,151808,151822,151831,151836,151840,151848,151858,151862,151869],{"__ignoreMap":112},[128,151698,151699,151702,151704],{"class":130,"line":131},[128,151700,151701],{"class":138},"raw_data ",[128,151703,270],{"class":134},[128,151705,2246],{"class":138},[128,151707,151708,151710,151712,151714,151716,151718,151721,151723,151726],{"class":130,"line":142},[128,151709,2251],{"class":138},[128,151711,2254],{"class":176},[128,151713,1967],{"class":138},[128,151715,150605],{"class":176},[128,151717,258],{"class":138},[128,151719,151720],{"class":176},"\"sales\"",[128,151722,1967],{"class":138},[128,151724,151725],{"class":176},"\"100\"",[128,151727,2282],{"class":138},[128,151729,151730,151732,151734,151736,151738,151740,151742,151744,151746],{"class":130,"line":156},[128,151731,2251],{"class":138},[128,151733,2254],{"class":176},[128,151735,1967],{"class":138},[128,151737,150610],{"class":176},[128,151739,258],{"class":138},[128,151741,151720],{"class":176},[128,151743,1967],{"class":138},[128,151745,11209],{"class":176},[128,151747,2282],{"class":138},[128,151749,151750,151752,151754,151756,151758,151760,151762,151764,151767],{"class":130,"line":163},[128,151751,2251],{"class":138},[128,151753,2254],{"class":176},[128,151755,1967],{"class":138},[128,151757,150615],{"class":176},[128,151759,258],{"class":138},[128,151761,151720],{"class":176},[128,151763,1967],{"class":138},[128,151765,151766],{"class":176},"\"120\"",[128,151768,2282],{"class":138},[128,151770,151771],{"class":130,"line":183},[128,151772,2376],{"class":138},[128,151774,151775],{"class":130,"line":188},[128,151776,160],{"emptyLinePlaceholder":159},[128,151778,151779,151781,151783],{"class":130,"line":193},[128,151780,151129],{"class":138},[128,151782,270],{"class":134},[128,151784,227],{"class":138},[128,151786,151787,151789,151791],{"class":130,"line":206},[128,151788,2241],{"class":138},[128,151790,270],{"class":134},[128,151792,227],{"class":138},[128,151794,151795],{"class":130,"line":221},[128,151796,160],{"emptyLinePlaceholder":159},[128,151798,151799,151801,151803,151805],{"class":130,"line":230},[128,151800,2404],{"class":134},[128,151802,2407],{"class":138},[128,151804,549],{"class":134},[128,151806,151807],{"class":138}," raw_data:\n",[128,151809,151810,151813,151815,151818,151820],{"class":130,"line":235},[128,151811,151812],{"class":138},"    value ",[128,151814,270],{"class":134},[128,151816,151817],{"class":138}," item.get(",[128,151819,151720],{"class":176},[128,151821,180],{"class":138},[128,151823,151824,151826,151828],{"class":130,"line":244},[128,151825,209],{"class":134},[128,151827,212],{"class":134},[128,151829,151830],{"class":138}," value:\n",[128,151832,151833],{"class":130,"line":287},[128,151834,151835],{"class":134},"        continue\n",[128,151837,151838],{"class":130,"line":301},[128,151839,160],{"emptyLinePlaceholder":159},[128,151841,151842,151844,151846],{"class":130,"line":310},[128,151843,151544],{"class":138},[128,151845,2254],{"class":176},[128,151847,2595],{"class":138},[128,151849,151850,151853,151855],{"class":130,"line":323},[128,151851,151852],{"class":138},"    sales.append(",[128,151854,3763],{"class":166},[128,151856,151857],{"class":138},"(value))\n",[128,151859,151860],{"class":130,"line":330},[128,151861,160],{"emptyLinePlaceholder":159},[128,151863,151864,151866],{"class":130,"line":335},[128,151865,2469],{"class":166},[128,151867,151868],{"class":138},"(dates)\n",[128,151870,151871,151873],{"class":130,"line":340},[128,151872,2469],{"class":166},[128,151874,151875],{"class":138},"(sales)\n",[14,151877,151879],{"id":151878},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[106,151881,151883],{"className":122,"code":151882,"language":124,"meta":112,"style":112},"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",[114,151884,151885,151899,151909,151913,151921,151941,151962,151984,152006,152028,152032,152036,152058,152079,152083,152091,152095,152099,152109,152118,152128,152144,152148,152152,152169,152185,152201,152217,152227,152231],{"__ignoreMap":112},[128,151886,151887,151889,151891,151893,151895,151897],{"class":130,"line":131},[128,151888,145],{"class":134},[128,151890,2618],{"class":138},[128,151892,135],{"class":134},[128,151894,2623],{"class":138},[128,151896,279],{"class":134},[128,151898,2628],{"class":138},[128,151900,151901,151903,151905,151907],{"class":130,"line":142},[128,151902,145],{"class":134},[128,151904,2635],{"class":138},[128,151906,135],{"class":134},[128,151908,150583],{"class":138},[128,151910,151911],{"class":130,"line":156},[128,151912,160],{"emptyLinePlaceholder":159},[128,151914,151915,151917,151919],{"class":130,"line":163},[128,151916,2241],{"class":138},[128,151918,270],{"class":134},[128,151920,2246],{"class":138},[128,151922,151923,151925,151927,151929,151931,151933,151935,151937,151939],{"class":130,"line":183},[128,151924,2251],{"class":138},[128,151926,2254],{"class":176},[128,151928,1967],{"class":138},[128,151930,2259],{"class":176},[128,151932,258],{"class":138},[128,151934,2274],{"class":176},[128,151936,1967],{"class":138},[128,151938,95393],{"class":166},[128,151940,2282],{"class":138},[128,151942,151943,151945,151947,151949,151951,151953,151955,151957,151960],{"class":130,"line":188},[128,151944,2251],{"class":138},[128,151946,2254],{"class":176},[128,151948,1967],{"class":138},[128,151950,2323],{"class":176},[128,151952,258],{"class":138},[128,151954,2274],{"class":176},[128,151956,1967],{"class":138},[128,151958,151959],{"class":166},"1800",[128,151961,2282],{"class":138},[128,151963,151964,151966,151968,151970,151973,151975,151977,151979,151982],{"class":130,"line":193},[128,151965,2251],{"class":138},[128,151967,2254],{"class":176},[128,151969,1967],{"class":138},[128,151971,151972],{"class":176},"\"2024-10-03\"",[128,151974,258],{"class":138},[128,151976,2274],{"class":176},[128,151978,1967],{"class":138},[128,151980,151981],{"class":166},"1500",[128,151983,2282],{"class":138},[128,151985,151986,151988,151990,151992,151995,151997,151999,152001,152004],{"class":130,"line":206},[128,151987,2251],{"class":138},[128,151989,2254],{"class":176},[128,151991,1967],{"class":138},[128,151993,151994],{"class":176},"\"2024-10-04\"",[128,151996,258],{"class":138},[128,151998,2274],{"class":176},[128,152000,1967],{"class":138},[128,152002,152003],{"class":166},"2100",[128,152005,2282],{"class":138},[128,152007,152008,152010,152012,152014,152017,152019,152021,152023,152026],{"class":130,"line":221},[128,152009,2251],{"class":138},[128,152011,2254],{"class":176},[128,152013,1967],{"class":138},[128,152015,152016],{"class":176},"\"2024-10-05\"",[128,152018,258],{"class":138},[128,152020,2274],{"class":176},[128,152022,1967],{"class":138},[128,152024,152025],{"class":166},"2600",[128,152027,2282],{"class":138},[128,152029,152030],{"class":130,"line":230},[128,152031,2376],{"class":138},[128,152033,152034],{"class":130,"line":235},[128,152035,160],{"emptyLinePlaceholder":159},[128,152037,152038,152040,152042,152045,152047,152049,152051,152053,152055],{"class":130,"line":244},[128,152039,151129],{"class":138},[128,152041,270],{"class":134},[128,152043,152044],{"class":138}," [item[",[128,152046,2254],{"class":176},[128,152048,567],{"class":138},[128,152050,2404],{"class":134},[128,152052,2407],{"class":138},[128,152054,549],{"class":134},[128,152056,152057],{"class":138}," sales]\n",[128,152059,152060,152063,152065,152067,152069,152071,152073,152075,152077],{"class":130,"line":287},[128,152061,152062],{"class":138},"amounts ",[128,152064,270],{"class":134},[128,152066,152044],{"class":138},[128,152068,2274],{"class":176},[128,152070,567],{"class":138},[128,152072,2404],{"class":134},[128,152074,2407],{"class":138},[128,152076,549],{"class":134},[128,152078,152057],{"class":138},[128,152080,152081],{"class":130,"line":301},[128,152082,160],{"emptyLinePlaceholder":159},[128,152084,152085,152087,152089],{"class":130,"line":310},[128,152086,150592],{"class":138},[128,152088,270],{"class":134},[128,152090,150597],{"class":138},[128,152092,152093],{"class":130,"line":323},[128,152094,151170],{"class":138},[128,152096,152097],{"class":130,"line":330},[128,152098,150978],{"class":138},[128,152100,152101,152103,152105,152107],{"class":130,"line":335},[128,152102,150983],{"class":266},[128,152104,270],{"class":134},[128,152106,2727],{"class":176},[128,152108,2665],{"class":138},[128,152110,152111,152113,152115],{"class":130,"line":340},[128,152112,150994],{"class":266},[128,152114,270],{"class":134},[128,152116,152117],{"class":138},"amounts,\n",[128,152119,152120,152122,152124,152126],{"class":130,"line":351},[128,152121,151023],{"class":266},[128,152123,270],{"class":134},[128,152125,34945],{"class":166},[128,152127,2665],{"class":138},[128,152129,152130,152132,152134,152136,152138,152140,152142],{"class":130,"line":384},[128,152131,151034],{"class":266},[128,152133,270],{"class":134},[128,152135,151039],{"class":138},[128,152137,151042],{"class":266},[128,152139,270],{"class":134},[128,152141,34945],{"class":166},[128,152143,2760],{"class":138},[128,152145,152146],{"class":130,"line":414},[128,152147,180],{"class":138},[128,152149,152150],{"class":130,"line":419},[128,152151,150802],{"class":138},[128,152153,152154,152156,152158,152160,152162,152164,152167],{"class":130,"line":424},[128,152155,2744],{"class":266},[128,152157,270],{"class":134},[128,152159,2749],{"class":138},[128,152161,2752],{"class":266},[128,152163,270],{"class":134},[128,152165,152166],{"class":176},"\"每日销售额\"",[128,152168,2760],{"class":138},[128,152170,152171,152173,152175,152177,152179,152181,152183],{"class":130,"line":434},[128,152172,2765],{"class":266},[128,152174,270],{"class":134},[128,152176,2770],{"class":138},[128,152178,2773],{"class":266},[128,152180,270],{"class":134},[128,152182,150834],{"class":176},[128,152184,2760],{"class":138},[128,152186,152187,152189,152191,152193,152195,152197,152199],{"class":130,"line":447},[128,152188,2785],{"class":266},[128,152190,270],{"class":134},[128,152192,2770],{"class":138},[128,152194,2773],{"class":266},[128,152196,270],{"class":134},[128,152198,150851],{"class":176},[128,152200,2760],{"class":138},[128,152202,152203,152205,152207,152209,152211,152213,152215],{"class":130,"line":459},[128,152204,150858],{"class":266},[128,152206,270],{"class":134},[128,152208,150863],{"class":138},[128,152210,150866],{"class":266},[128,152212,270],{"class":134},[128,152214,150871],{"class":176},[128,152216,2760],{"class":138},[128,152218,152219,152222,152224],{"class":130,"line":471},[128,152220,152221],{"class":266},"    datazoom_opts",[128,152223,270],{"class":134},[128,152225,152226],{"class":138},"[opts.DataZoomOpts()],\n",[128,152228,152229],{"class":130,"line":483},[128,152230,180],{"class":138},[128,152232,152233,152235,152238],{"class":130,"line":495},[128,152234,150661],{"class":138},[128,152236,152237],{"class":176},"\"daily_sales.html\"",[128,152239,180],{"class":138},[19,152241,152242,152245],{},[114,152243,152244],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,152247,152249],{"id":152248},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,152251,152252],{},"如果数据结构如下：",[106,152254,152256],{"className":122,"code":152255,"language":124,"meta":112,"style":112},"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",[114,152257,152258,152266,152274,152296,152317,152322,152329,152349,152369,152373],{"__ignoreMap":112},[128,152259,152260,152262,152264],{"class":130,"line":131},[128,152261,2857],{"class":138},[128,152263,270],{"class":134},[128,152265,1959],{"class":138},[128,152267,152268,152271],{"class":130,"line":142},[128,152269,152270],{"class":176},"    \"北京\"",[128,152272,152273],{"class":138},": [\n",[128,152275,152276,152278,152280,152282,152285,152287,152290,152292,152294],{"class":130,"line":156},[128,152277,8480],{"class":138},[128,152279,2254],{"class":176},[128,152281,1967],{"class":138},[128,152283,152284],{"class":176},"\"2024-01-01\"",[128,152286,258],{"class":138},[128,152288,152289],{"class":176},"\"confirm\"",[128,152291,1967],{"class":138},[128,152293,4196],{"class":166},[128,152295,2282],{"class":138},[128,152297,152298,152300,152302,152304,152307,152309,152311,152313,152315],{"class":130,"line":163},[128,152299,8480],{"class":138},[128,152301,2254],{"class":176},[128,152303,1967],{"class":138},[128,152305,152306],{"class":176},"\"2024-01-02\"",[128,152308,258],{"class":138},[128,152310,152289],{"class":176},[128,152312,1967],{"class":138},[128,152314,4247],{"class":166},[128,152316,2282],{"class":138},[128,152318,152319],{"class":130,"line":183},[128,152320,152321],{"class":138},"    ],\n",[128,152323,152324,152327],{"class":130,"line":188},[128,152325,152326],{"class":176},"    \"上海\"",[128,152328,152273],{"class":138},[128,152330,152331,152333,152335,152337,152339,152341,152343,152345,152347],{"class":130,"line":193},[128,152332,8480],{"class":138},[128,152334,2254],{"class":176},[128,152336,1967],{"class":138},[128,152338,152284],{"class":176},[128,152340,258],{"class":138},[128,152342,152289],{"class":176},[128,152344,1967],{"class":138},[128,152346,4145],{"class":166},[128,152348,2282],{"class":138},[128,152350,152351,152353,152355,152357,152359,152361,152363,152365,152367],{"class":130,"line":206},[128,152352,8480],{"class":138},[128,152354,2254],{"class":176},[128,152356,1967],{"class":138},[128,152358,152306],{"class":176},[128,152360,258],{"class":138},[128,152362,152289],{"class":176},[128,152364,1967],{"class":138},[128,152366,4272],{"class":166},[128,152368,2282],{"class":138},[128,152370,152371],{"class":130,"line":221},[128,152372,152321],{"class":138},[128,152374,152375],{"class":130,"line":230},[128,152376,2694],{"class":138},[19,152378,152379],{},"绘制多地区趋势：",[106,152381,152383],{"className":122,"code":152382,"language":124,"meta":112,"style":112},"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",[114,152384,152385,152399,152409,152413,152438,152442,152450,152454,152458,152469,152491,152504,152508,152512,152529,152545,152549],{"__ignoreMap":112},[128,152386,152387,152389,152391,152393,152395,152397],{"class":130,"line":131},[128,152388,145],{"class":134},[128,152390,2618],{"class":138},[128,152392,135],{"class":134},[128,152394,2623],{"class":138},[128,152396,279],{"class":134},[128,152398,2628],{"class":138},[128,152400,152401,152403,152405,152407],{"class":130,"line":142},[128,152402,145],{"class":134},[128,152404,2635],{"class":138},[128,152406,135],{"class":134},[128,152408,150583],{"class":138},[128,152410,152411],{"class":130,"line":156},[128,152412,160],{"emptyLinePlaceholder":159},[128,152414,152415,152417,152419,152421,152423,152425,152427,152429,152431,152434,152436],{"class":130,"line":163},[128,152416,151129],{"class":138},[128,152418,270],{"class":134},[128,152420,152044],{"class":138},[128,152422,2254],{"class":176},[128,152424,567],{"class":138},[128,152426,2404],{"class":134},[128,152428,2407],{"class":138},[128,152430,549],{"class":134},[128,152432,152433],{"class":138}," data[",[128,152435,3110],{"class":176},[128,152437,80901],{"class":138},[128,152439,152440],{"class":130,"line":183},[128,152441,160],{"emptyLinePlaceholder":159},[128,152443,152444,152446,152448],{"class":130,"line":188},[128,152445,150592],{"class":138},[128,152447,270],{"class":134},[128,152449,150597],{"class":138},[128,152451,152452],{"class":130,"line":193},[128,152453,151170],{"class":138},[128,152455,152456],{"class":130,"line":206},[128,152457,160],{"emptyLinePlaceholder":159},[128,152459,152460,152462,152465,152467],{"class":130,"line":221},[128,152461,2404],{"class":134},[128,152463,152464],{"class":138}," city, records ",[128,152466,549],{"class":134},[128,152468,2967],{"class":138},[128,152470,152471,152474,152476,152478,152480,152482,152484,152486,152488],{"class":130,"line":230},[128,152472,152473],{"class":138},"    values ",[128,152475,270],{"class":134},[128,152477,152044],{"class":138},[128,152479,152289],{"class":176},[128,152481,567],{"class":138},[128,152483,2404],{"class":134},[128,152485,2407],{"class":138},[128,152487,549],{"class":134},[128,152489,152490],{"class":138}," records]\n",[128,152492,152493,152496,152498,152500,152502],{"class":130,"line":235},[128,152494,152495],{"class":138},"    line.add_yaxis(city, values, ",[128,152497,151074],{"class":266},[128,152499,270],{"class":134},[128,152501,34945],{"class":166},[128,152503,180],{"class":138},[128,152505,152506],{"class":130,"line":244},[128,152507,160],{"emptyLinePlaceholder":159},[128,152509,152510],{"class":130,"line":287},[128,152511,150802],{"class":138},[128,152513,152514,152516,152518,152520,152522,152524,152527],{"class":130,"line":301},[128,152515,2744],{"class":266},[128,152517,270],{"class":134},[128,152519,2749],{"class":138},[128,152521,2752],{"class":266},[128,152523,270],{"class":134},[128,152525,152526],{"class":176},"\"多地区趋势图\"",[128,152528,2760],{"class":138},[128,152530,152531,152533,152535,152537,152539,152541,152543],{"class":130,"line":310},[128,152532,150858],{"class":266},[128,152534,270],{"class":134},[128,152536,150863],{"class":138},[128,152538,150866],{"class":266},[128,152540,270],{"class":134},[128,152542,150871],{"class":176},[128,152544,2760],{"class":138},[128,152546,152547],{"class":130,"line":323},[128,152548,180],{"class":138},[128,152550,152551,152553,152556],{"class":130,"line":330},[128,152552,150661],{"class":138},[128,152554,152555],{"class":176},"\"trend.html\"",[128,152557,180],{"class":138},[19,152559,152560],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,152562,152564],{"id":152563},"_1012-易错点","10.12 易错点",[26,152566,152567,152573,152579,152589,152595],{},[29,152568,152569,152572],{},[114,152570,152571],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[29,152574,152575,152578],{},[114,152576,152577],{},"render()"," 生成的是 HTML，不是图片。",[29,152580,152581,152582,152585,152586,1842],{},"JSON 字符串用 ",[114,152583,152584],{},"json.loads()","，JSON 文件用 ",[114,152587,152588],{},"json.load()",[29,152590,152591,152592,1842],{},"中文 JSON 保存时加 ",[114,152593,152594],{},"ensure_ascii=False",[29,152596,152597],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,152599,152601],{"id":152600},"_1013-本章练习","10.13 本章练习",[26,152603,152604,152607,152610,152613,152616],{},[29,152605,152606],{},"安装 pyecharts 并生成第一个折线图。",[29,152608,152609],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[29,152611,152612],{},"绘制两条折线，对比线上和线下销售额。",[29,152614,152615],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[29,152617,152618],{},"对含有空值的销售数据进行清洗后再绘图。",[3659,152620,152621],{},"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":112,"searchDepth":142,"depth":142,"links":152623},[152624,152625,152626,152627,152628,152629,152630,152631,152632,152633,152634,152635,152636],{"id":150263,"depth":142,"text":150264},{"id":150338,"depth":142,"text":150339},{"id":150515,"depth":142,"text":150516},{"id":150566,"depth":142,"text":150567},{"id":150696,"depth":142,"text":150697},{"id":150964,"depth":142,"text":150965},{"id":151090,"depth":142,"text":151091},{"id":151301,"depth":142,"text":151302},{"id":151668,"depth":142,"text":151669},{"id":151878,"depth":142,"text":151879},{"id":152248,"depth":142,"text":152249},{"id":152563,"depth":142,"text":152564},{"id":152600,"depth":142,"text":152601},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":150255,"description":3686},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":152643,"title":152644,"body":152645,"description":3686,"extension":3687,"meta":154974,"navigation":159,"path":154975,"seo":154976,"stem":154977,"__hash__":154978},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":152646,"toc":154951},[152647,152650,152654,152657,152660,152736,152739,152830,152833,152837,152840,152884,152896,152900,152903,152970,152973,152977,152980,153064,153072,153076,153081,153220,153223,153234,153240,153246,153360,153364,153367,153370,153623,153626,153630,153633,153737,153740,153744,153895,153899,153906,154019,154023,154026,154132,154135,154139,154142,154173,154176,154281,154284,154288,154292,154302,154367,154371,154378,154442,154445,154449,154455,154542,154551,154555,154864,154873,154877,154904,154908,154948],[10,152648,152644],{"id":152649},"_11-面向对象基础",[14,152651,152653],{"id":152652},"_111-什么是面向对象","11.1 什么是面向对象",[19,152655,152656],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,152658,152659],{},"面向过程：",[106,152661,152663],{"className":122,"code":152662,"language":124,"meta":112,"style":112},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[114,152664,152665,152674,152682,152686,152696,152727,152731],{"__ignoreMap":112},[128,152666,152667,152669,152671],{"class":130,"line":131},[128,152668,149883],{"class":138},[128,152670,270],{"class":134},[128,152672,152673],{"class":176}," \"小明\"\n",[128,152675,152676,152678,152680],{"class":130,"line":142},[128,152677,149893],{"class":138},[128,152679,270],{"class":134},[128,152681,149898],{"class":166},[128,152683,152684],{"class":130,"line":156},[128,152685,160],{"emptyLinePlaceholder":159},[128,152687,152688,152690,152693],{"class":130,"line":163},[128,152689,196],{"class":134},[128,152691,152692],{"class":199}," introduce",[128,152694,152695],{"class":138},"(name, age):\n",[128,152697,152698,152700,152702,152704,152707,152709,152711,152713,152716,152718,152720,152722,152725],{"class":130,"line":183},[128,152699,437],{"class":166},[128,152701,253],{"class":138},[128,152703,3019],{"class":134},[128,152705,152706],{"class":176},"\"我叫",[128,152708,1379],{"class":166},[128,152710,2773],{"class":138},[128,152712,1453],{"class":166},[128,152714,152715],{"class":176},"，今年",[128,152717,1379],{"class":166},[128,152719,73596],{"class":138},[128,152721,1453],{"class":166},[128,152723,152724],{"class":176},"岁\"",[128,152726,180],{"class":138},[128,152728,152729],{"class":130,"line":188},[128,152730,160],{"emptyLinePlaceholder":159},[128,152732,152733],{"class":130,"line":193},[128,152734,152735],{"class":138},"introduce(name, age)\n",[19,152737,152738],{},"面向对象：",[106,152740,152742],{"className":122,"code":152741,"language":124,"meta":112,"style":112},"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",[114,152743,152744,152752,152760,152789,152793,152797,152807,152816,152825],{"__ignoreMap":112},[128,152745,152746,152748,152750],{"class":130,"line":131},[128,152747,1901],{"class":134},[128,152749,1904],{"class":199},[128,152751,241],{"class":138},[128,152753,152754,152756,152758],{"class":130,"line":142},[128,152755,1946],{"class":134},[128,152757,152692],{"class":199},[128,152759,1952],{"class":138},[128,152761,152762,152764,152766,152768,152770,152773,152775,152777,152779,152781,152783,152785,152787],{"class":130,"line":156},[128,152763,313],{"class":166},[128,152765,253],{"class":138},[128,152767,3019],{"class":134},[128,152769,152706],{"class":176},[128,152771,152772],{"class":166},"{self",[128,152774,83674],{"class":138},[128,152776,1453],{"class":166},[128,152778,152715],{"class":176},[128,152780,152772],{"class":166},[128,152782,83686],{"class":138},[128,152784,1453],{"class":166},[128,152786,152724],{"class":176},[128,152788,180],{"class":138},[128,152790,152791],{"class":130,"line":163},[128,152792,160],{"emptyLinePlaceholder":159},[128,152794,152795],{"class":130,"line":183},[128,152796,160],{"emptyLinePlaceholder":159},[128,152798,152799,152802,152804],{"class":130,"line":188},[128,152800,152801],{"class":138},"student ",[128,152803,270],{"class":134},[128,152805,152806],{"class":138}," Student()\n",[128,152808,152809,152812,152814],{"class":130,"line":193},[128,152810,152811],{"class":138},"student.name ",[128,152813,270],{"class":134},[128,152815,152673],{"class":176},[128,152817,152818,152821,152823],{"class":130,"line":206},[128,152819,152820],{"class":138},"student.age ",[128,152822,270],{"class":134},[128,152824,149898],{"class":166},[128,152826,152827],{"class":130,"line":221},[128,152828,152829],{"class":138},"student.introduce()\n",[19,152831,152832],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,152834,152836],{"id":152835},"_112-类和对象","11.2 类和对象",[19,152838,152839],{},"类是模板，对象是根据模板创建出来的具体实例。",[106,152841,152843],{"className":122,"code":152842,"language":124,"meta":112,"style":112},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[114,152844,152845,152853,152858,152862,152866,152875],{"__ignoreMap":112},[128,152846,152847,152849,152851],{"class":130,"line":131},[128,152848,1901],{"class":134},[128,152850,1904],{"class":199},[128,152852,241],{"class":138},[128,152854,152855],{"class":130,"line":142},[128,152856,152857],{"class":134},"    pass\n",[128,152859,152860],{"class":130,"line":156},[128,152861,160],{"emptyLinePlaceholder":159},[128,152863,152864],{"class":130,"line":163},[128,152865,160],{"emptyLinePlaceholder":159},[128,152867,152868,152871,152873],{"class":130,"line":183},[128,152869,152870],{"class":138},"student1 ",[128,152872,270],{"class":134},[128,152874,152806],{"class":138},[128,152876,152877,152880,152882],{"class":130,"line":188},[128,152878,152879],{"class":138},"student2 ",[128,152881,270],{"class":134},[128,152883,152806],{"class":138},[19,152885,152886,152888,152889,3330,152892,152895],{},[114,152887,1856],{}," 是类，",[114,152890,152891],{},"student1",[114,152893,152894],{},"student2"," 是对象。",[14,152897,152899],{"id":152898},"_113-属性","11.3 属性",[19,152901,152902],{},"属性是对象保存的数据。",[106,152904,152906],{"className":122,"code":152905,"language":124,"meta":112,"style":112},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[114,152907,152908,152916,152920,152924,152928,152936,152944,152952,152956,152963],{"__ignoreMap":112},[128,152909,152910,152912,152914],{"class":130,"line":131},[128,152911,1901],{"class":134},[128,152913,1904],{"class":199},[128,152915,241],{"class":138},[128,152917,152918],{"class":130,"line":142},[128,152919,152857],{"class":134},[128,152921,152922],{"class":130,"line":156},[128,152923,160],{"emptyLinePlaceholder":159},[128,152925,152926],{"class":130,"line":163},[128,152927,160],{"emptyLinePlaceholder":159},[128,152929,152930,152932,152934],{"class":130,"line":183},[128,152931,152801],{"class":138},[128,152933,270],{"class":134},[128,152935,152806],{"class":138},[128,152937,152938,152940,152942],{"class":130,"line":188},[128,152939,152811],{"class":138},[128,152941,270],{"class":134},[128,152943,152673],{"class":176},[128,152945,152946,152948,152950],{"class":130,"line":193},[128,152947,152820],{"class":138},[128,152949,270],{"class":134},[128,152951,149898],{"class":166},[128,152953,152954],{"class":130,"line":206},[128,152955,160],{"emptyLinePlaceholder":159},[128,152957,152958,152960],{"class":130,"line":221},[128,152959,2469],{"class":166},[128,152961,152962],{"class":138},"(student.name)\n",[128,152964,152965,152967],{"class":130,"line":230},[128,152966,2469],{"class":166},[128,152968,152969],{"class":138},"(student.age)\n",[19,152971,152972],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,152974,152976],{"id":152975},"_114-方法","11.4 方法",[19,152978,152979],{},"类中的函数叫方法。",[106,152981,152982],{"className":122,"code":152741,"language":124,"meta":112,"style":112},[114,152983,152984,152992,153000,153028,153032,153036,153044,153052,153060],{"__ignoreMap":112},[128,152985,152986,152988,152990],{"class":130,"line":131},[128,152987,1901],{"class":134},[128,152989,1904],{"class":199},[128,152991,241],{"class":138},[128,152993,152994,152996,152998],{"class":130,"line":142},[128,152995,1946],{"class":134},[128,152997,152692],{"class":199},[128,152999,1952],{"class":138},[128,153001,153002,153004,153006,153008,153010,153012,153014,153016,153018,153020,153022,153024,153026],{"class":130,"line":156},[128,153003,313],{"class":166},[128,153005,253],{"class":138},[128,153007,3019],{"class":134},[128,153009,152706],{"class":176},[128,153011,152772],{"class":166},[128,153013,83674],{"class":138},[128,153015,1453],{"class":166},[128,153017,152715],{"class":176},[128,153019,152772],{"class":166},[128,153021,83686],{"class":138},[128,153023,1453],{"class":166},[128,153025,152724],{"class":176},[128,153027,180],{"class":138},[128,153029,153030],{"class":130,"line":163},[128,153031,160],{"emptyLinePlaceholder":159},[128,153033,153034],{"class":130,"line":183},[128,153035,160],{"emptyLinePlaceholder":159},[128,153037,153038,153040,153042],{"class":130,"line":188},[128,153039,152801],{"class":138},[128,153041,270],{"class":134},[128,153043,152806],{"class":138},[128,153045,153046,153048,153050],{"class":130,"line":193},[128,153047,152811],{"class":138},[128,153049,270],{"class":134},[128,153051,152673],{"class":176},[128,153053,153054,153056,153058],{"class":130,"line":206},[128,153055,152820],{"class":138},[128,153057,270],{"class":134},[128,153059,149898],{"class":166},[128,153061,153062],{"class":130,"line":221},[128,153063,152829],{"class":138},[19,153065,153066,153068,153069,153071],{},[114,153067,1970],{}," 表示当前对象。调用方法时不需要手动传入 ",[114,153070,1970],{},"，Python 会自动传。",[14,153073,153075],{"id":153074},"_115-构造方法__init__","11.5 构造方法__init__",[19,153077,153078,153080],{},[114,153079,34303],{}," 在对象创建时自动执行，用于初始化属性。",[106,153082,153084],{"className":122,"code":153083,"language":124,"meta":112,"style":112},"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",[114,153085,153086,153094,153103,153114,153125,153136,153140,153148,153186,153190,153194,153216],{"__ignoreMap":112},[128,153087,153088,153090,153092],{"class":130,"line":131},[128,153089,1901],{"class":134},[128,153091,1904],{"class":199},[128,153093,241],{"class":138},[128,153095,153096,153098,153100],{"class":130,"line":142},[128,153097,1946],{"class":134},[128,153099,2108],{"class":166},[128,153101,153102],{"class":138},"(self, name, age, score):\n",[128,153104,153105,153107,153110,153112],{"class":130,"line":156},[128,153106,2115],{"class":166},[128,153108,153109],{"class":138},".name ",[128,153111,270],{"class":134},[128,153113,1196],{"class":138},[128,153115,153116,153118,153121,153123],{"class":130,"line":163},[128,153117,2115],{"class":166},[128,153119,153120],{"class":138},".age ",[128,153122,270],{"class":134},[128,153124,1211],{"class":138},[128,153126,153127,153129,153132,153134],{"class":130,"line":183},[128,153128,2115],{"class":166},[128,153130,153131],{"class":138},".score ",[128,153133,270],{"class":134},[128,153135,1226],{"class":138},[128,153137,153138],{"class":130,"line":188},[128,153139,160],{"emptyLinePlaceholder":159},[128,153141,153142,153144,153146],{"class":130,"line":193},[128,153143,1946],{"class":134},[128,153145,152692],{"class":199},[128,153147,1952],{"class":138},[128,153149,153150,153152,153154,153156,153158,153160,153162,153164,153166,153168,153170,153172,153175,153177,153180,153182,153184],{"class":130,"line":206},[128,153151,313],{"class":166},[128,153153,253],{"class":138},[128,153155,3019],{"class":134},[128,153157,152706],{"class":176},[128,153159,152772],{"class":166},[128,153161,83674],{"class":138},[128,153163,1453],{"class":166},[128,153165,152715],{"class":176},[128,153167,152772],{"class":166},[128,153169,83686],{"class":138},[128,153171,1453],{"class":166},[128,153173,153174],{"class":176},"岁，成绩",[128,153176,152772],{"class":166},[128,153178,153179],{"class":138},".score",[128,153181,1453],{"class":166},[128,153183,1376],{"class":176},[128,153185,180],{"class":138},[128,153187,153188],{"class":130,"line":221},[128,153189,160],{"emptyLinePlaceholder":159},[128,153191,153192],{"class":130,"line":230},[128,153193,160],{"emptyLinePlaceholder":159},[128,153195,153196,153198,153200,153203,153206,153208,153210,153212,153214],{"class":130,"line":235},[128,153197,152801],{"class":138},[128,153199,270],{"class":134},[128,153201,153202],{"class":138}," Student(",[128,153204,153205],{"class":176},"\"小明\"",[128,153207,258],{"class":138},[128,153209,4399],{"class":166},[128,153211,258],{"class":138},[128,153213,4734],{"class":166},[128,153215,180],{"class":138},[128,153217,153218],{"class":130,"line":244},[128,153219,152829],{"class":138},[19,153221,153222],{},"构造方法的好处：",[26,153224,153225,153228,153231],{},[29,153226,153227],{},"创建对象时必须提供必要数据。",[29,153229,153230],{},"属性初始化集中，不容易漏。",[29,153232,153233],{},"对象状态更完整。",[14,153235,153237,153238],{"id":153236},"_116-str","11.6 ",[3903,153239,4914],{},[19,153241,153242,153243,1842],{},"直接打印对象时，默认输出不直观。可以定义 ",[114,153244,153245],{},"__str__",[106,153247,153249],{"className":122,"code":153248,"language":124,"meta":112,"style":112},"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",[114,153250,153251,153259,153268,153278,153288,153292,153301,153329,153333,153337,153353],{"__ignoreMap":112},[128,153252,153253,153255,153257],{"class":130,"line":131},[128,153254,1901],{"class":134},[128,153256,1904],{"class":199},[128,153258,241],{"class":138},[128,153260,153261,153263,153265],{"class":130,"line":142},[128,153262,1946],{"class":134},[128,153264,2108],{"class":166},[128,153266,153267],{"class":138},"(self, name, age):\n",[128,153269,153270,153272,153274,153276],{"class":130,"line":156},[128,153271,2115],{"class":166},[128,153273,153109],{"class":138},[128,153275,270],{"class":134},[128,153277,1196],{"class":138},[128,153279,153280,153282,153284,153286],{"class":130,"line":163},[128,153281,2115],{"class":166},[128,153283,153120],{"class":138},[128,153285,270],{"class":134},[128,153287,1211],{"class":138},[128,153289,153290],{"class":130,"line":183},[128,153291,160],{"emptyLinePlaceholder":159},[128,153293,153294,153296,153299],{"class":130,"line":188},[128,153295,1946],{"class":134},[128,153297,153298],{"class":166}," __str__",[128,153300,1952],{"class":138},[128,153302,153303,153305,153308,153311,153313,153315,153317,153320,153322,153324,153326],{"class":130,"line":193},[128,153304,224],{"class":134},[128,153306,153307],{"class":134}," f",[128,153309,153310],{"class":176},"\"Student(name=",[128,153312,152772],{"class":166},[128,153314,83674],{"class":138},[128,153316,1453],{"class":166},[128,153318,153319],{"class":176},", age=",[128,153321,152772],{"class":166},[128,153323,83686],{"class":138},[128,153325,1453],{"class":166},[128,153327,153328],{"class":176},")\"\n",[128,153330,153331],{"class":130,"line":206},[128,153332,160],{"emptyLinePlaceholder":159},[128,153334,153335],{"class":130,"line":221},[128,153336,160],{"emptyLinePlaceholder":159},[128,153338,153339,153341,153343,153345,153347,153349,153351],{"class":130,"line":230},[128,153340,152801],{"class":138},[128,153342,270],{"class":134},[128,153344,153202],{"class":138},[128,153346,153205],{"class":176},[128,153348,258],{"class":138},[128,153350,4399],{"class":166},[128,153352,180],{"class":138},[128,153354,153355,153357],{"class":130,"line":235},[128,153356,2469],{"class":166},[128,153358,153359],{"class":138},"(student)\n",[14,153361,153363],{"id":153362},"_117-封装","11.7 封装",[19,153365,153366],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,153368,153369],{},"Python 中以双下划线开头的属性通常视为私有属性。",[106,153371,153373],{"className":122,"code":153372,"language":124,"meta":112,"style":112},"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",[114,153374,153375,153384,153393,153405,153417,153421,153430,153439,153443,153453,153466,153477,153482,153493,153497,153506,153518,153529,153533,153546,153557,153561,153572,153576,153580,153598,153607,153616],{"__ignoreMap":112},[128,153376,153377,153379,153382],{"class":130,"line":131},[128,153378,1901],{"class":134},[128,153380,153381],{"class":199}," Account",[128,153383,241],{"class":138},[128,153385,153386,153388,153390],{"class":130,"line":142},[128,153387,1946],{"class":134},[128,153389,2108],{"class":166},[128,153391,153392],{"class":138},"(self, owner, balance):\n",[128,153394,153395,153397,153400,153402],{"class":130,"line":156},[128,153396,2115],{"class":166},[128,153398,153399],{"class":138},".owner ",[128,153401,270],{"class":134},[128,153403,153404],{"class":138}," owner\n",[128,153406,153407,153409,153412,153414],{"class":130,"line":163},[128,153408,2115],{"class":166},[128,153410,153411],{"class":138},".__balance ",[128,153413,270],{"class":134},[128,153415,153416],{"class":138}," balance\n",[128,153418,153419],{"class":130,"line":183},[128,153420,160],{"emptyLinePlaceholder":159},[128,153422,153423,153425,153428],{"class":130,"line":188},[128,153424,1946],{"class":134},[128,153426,153427],{"class":199}," get_balance",[128,153429,1952],{"class":138},[128,153431,153432,153434,153436],{"class":130,"line":193},[128,153433,224],{"class":134},[128,153435,2148],{"class":166},[128,153437,153438],{"class":138},".__balance\n",[128,153440,153441],{"class":130,"line":206},[128,153442,160],{"emptyLinePlaceholder":159},[128,153444,153445,153447,153450],{"class":130,"line":221},[128,153446,1946],{"class":134},[128,153448,153449],{"class":199}," deposit",[128,153451,153452],{"class":138},"(self, money):\n",[128,153454,153455,153457,153460,153462,153464],{"class":130,"line":230},[128,153456,558],{"class":134},[128,153458,153459],{"class":138}," money ",[128,153461,5197],{"class":134},[128,153463,7659],{"class":166},[128,153465,241],{"class":138},[128,153467,153468,153470,153472,153475],{"class":130,"line":235},[128,153469,663],{"class":166},[128,153471,253],{"class":138},[128,153473,153474],{"class":176},"\"存款金额必须大于0\"",[128,153476,180],{"class":138},[128,153478,153479],{"class":130,"line":244},[128,153480,153481],{"class":134},"            return\n",[128,153483,153484,153486,153488,153490],{"class":130,"line":287},[128,153485,2115],{"class":166},[128,153487,153411],{"class":138},[128,153489,13023],{"class":134},[128,153491,153492],{"class":138}," money\n",[128,153494,153495],{"class":130,"line":301},[128,153496,160],{"emptyLinePlaceholder":159},[128,153498,153499,153501,153504],{"class":130,"line":310},[128,153500,1946],{"class":134},[128,153502,153503],{"class":199}," withdraw",[128,153505,153452],{"class":138},[128,153507,153508,153510,153512,153514,153516],{"class":130,"line":323},[128,153509,558],{"class":134},[128,153511,153459],{"class":138},[128,153513,5197],{"class":134},[128,153515,7659],{"class":166},[128,153517,241],{"class":138},[128,153519,153520,153522,153524,153527],{"class":130,"line":330},[128,153521,663],{"class":166},[128,153523,253],{"class":138},[128,153525,153526],{"class":176},"\"取款金额必须大于0\"",[128,153528,180],{"class":138},[128,153530,153531],{"class":130,"line":335},[128,153532,153481],{"class":134},[128,153534,153535,153537,153539,153541,153543],{"class":130,"line":340},[128,153536,558],{"class":134},[128,153538,153459],{"class":138},[128,153540,4705],{"class":134},[128,153542,2148],{"class":166},[128,153544,153545],{"class":138},".__balance:\n",[128,153547,153548,153550,153552,153555],{"class":130,"line":351},[128,153549,663],{"class":166},[128,153551,253],{"class":138},[128,153553,153554],{"class":176},"\"余额不足\"",[128,153556,180],{"class":138},[128,153558,153559],{"class":130,"line":384},[128,153560,153481],{"class":134},[128,153562,153563,153565,153567,153570],{"class":130,"line":414},[128,153564,2115],{"class":166},[128,153566,153411],{"class":138},[128,153568,153569],{"class":134},"-=",[128,153571,153492],{"class":138},[128,153573,153574],{"class":130,"line":419},[128,153575,160],{"emptyLinePlaceholder":159},[128,153577,153578],{"class":130,"line":424},[128,153579,160],{"emptyLinePlaceholder":159},[128,153581,153582,153585,153587,153590,153592,153594,153596],{"class":130,"line":434},[128,153583,153584],{"class":138},"account ",[128,153586,270],{"class":134},[128,153588,153589],{"class":138}," Account(",[128,153591,153205],{"class":176},[128,153593,258],{"class":138},[128,153595,9967],{"class":166},[128,153597,180],{"class":138},[128,153599,153600,153603,153605],{"class":130,"line":447},[128,153601,153602],{"class":138},"account.deposit(",[128,153604,3143],{"class":166},[128,153606,180],{"class":138},[128,153608,153609,153612,153614],{"class":130,"line":459},[128,153610,153611],{"class":138},"account.withdraw(",[128,153613,4061],{"class":166},[128,153615,180],{"class":138},[128,153617,153618,153620],{"class":130,"line":471},[128,153619,2469],{"class":166},[128,153621,153622],{"class":138},"(account.get_balance())\n",[19,153624,153625],{},"封装的意义是避免外部随意修改内部状态。",[14,153627,153629],{"id":153628},"_118-继承","11.8 继承",[19,153631,153632],{},"继承可以让子类复用父类的属性和方法。",[106,153634,153636],{"className":122,"code":153635,"language":124,"meta":112,"style":112},"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",[114,153637,153638,153647,153656,153667,153671,153675,153689,153698,153709,153713,153717,153727,153732],{"__ignoreMap":112},[128,153639,153640,153642,153645],{"class":130,"line":131},[128,153641,1901],{"class":134},[128,153643,153644],{"class":199}," Animal",[128,153646,241],{"class":138},[128,153648,153649,153651,153654],{"class":130,"line":142},[128,153650,1946],{"class":134},[128,153652,153653],{"class":199}," eat",[128,153655,1952],{"class":138},[128,153657,153658,153660,153662,153665],{"class":130,"line":156},[128,153659,313],{"class":166},[128,153661,253],{"class":138},[128,153663,153664],{"class":176},"\"吃东西\"",[128,153666,180],{"class":138},[128,153668,153669],{"class":130,"line":163},[128,153670,160],{"emptyLinePlaceholder":159},[128,153672,153673],{"class":130,"line":183},[128,153674,160],{"emptyLinePlaceholder":159},[128,153676,153677,153679,153682,153684,153687],{"class":130,"line":188},[128,153678,1901],{"class":134},[128,153680,153681],{"class":199}," Dog",[128,153683,253],{"class":138},[128,153685,153686],{"class":199},"Animal",[128,153688,34264],{"class":138},[128,153690,153691,153693,153696],{"class":130,"line":193},[128,153692,1946],{"class":134},[128,153694,153695],{"class":199}," bark",[128,153697,1952],{"class":138},[128,153699,153700,153702,153704,153707],{"class":130,"line":206},[128,153701,313],{"class":166},[128,153703,253],{"class":138},[128,153705,153706],{"class":176},"\"汪汪\"",[128,153708,180],{"class":138},[128,153710,153711],{"class":130,"line":221},[128,153712,160],{"emptyLinePlaceholder":159},[128,153714,153715],{"class":130,"line":230},[128,153716,160],{"emptyLinePlaceholder":159},[128,153718,153719,153722,153724],{"class":130,"line":235},[128,153720,153721],{"class":138},"dog ",[128,153723,270],{"class":134},[128,153725,153726],{"class":138}," Dog()\n",[128,153728,153729],{"class":130,"line":244},[128,153730,153731],{"class":138},"dog.eat()\n",[128,153733,153734],{"class":130,"line":287},[128,153735,153736],{"class":138},"dog.bark()\n",[19,153738,153739],{},"子类可以扩展新方法，也可以重写父类方法。",[14,153741,153743],{"id":153742},"_119-方法重写","11.9 方法重写",[106,153745,153747],{"className":122,"code":153746,"language":124,"meta":112,"style":112},"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",[114,153748,153749,153757,153766,153777,153781,153785,153797,153805,153815,153819,153823,153836,153844,153855,153859,153863,153871,153881,153885,153890],{"__ignoreMap":112},[128,153750,153751,153753,153755],{"class":130,"line":131},[128,153752,1901],{"class":134},[128,153754,153644],{"class":199},[128,153756,241],{"class":138},[128,153758,153759,153761,153764],{"class":130,"line":142},[128,153760,1946],{"class":134},[128,153762,153763],{"class":199}," speak",[128,153765,1952],{"class":138},[128,153767,153768,153770,153772,153775],{"class":130,"line":156},[128,153769,313],{"class":166},[128,153771,253],{"class":138},[128,153773,153774],{"class":176},"\"动物叫\"",[128,153776,180],{"class":138},[128,153778,153779],{"class":130,"line":163},[128,153780,160],{"emptyLinePlaceholder":159},[128,153782,153783],{"class":130,"line":183},[128,153784,160],{"emptyLinePlaceholder":159},[128,153786,153787,153789,153791,153793,153795],{"class":130,"line":188},[128,153788,1901],{"class":134},[128,153790,153681],{"class":199},[128,153792,253],{"class":138},[128,153794,153686],{"class":199},[128,153796,34264],{"class":138},[128,153798,153799,153801,153803],{"class":130,"line":193},[128,153800,1946],{"class":134},[128,153802,153763],{"class":199},[128,153804,1952],{"class":138},[128,153806,153807,153809,153811,153813],{"class":130,"line":206},[128,153808,313],{"class":166},[128,153810,253],{"class":138},[128,153812,153706],{"class":176},[128,153814,180],{"class":138},[128,153816,153817],{"class":130,"line":221},[128,153818,160],{"emptyLinePlaceholder":159},[128,153820,153821],{"class":130,"line":230},[128,153822,160],{"emptyLinePlaceholder":159},[128,153824,153825,153827,153830,153832,153834],{"class":130,"line":235},[128,153826,1901],{"class":134},[128,153828,153829],{"class":199}," Cat",[128,153831,253],{"class":138},[128,153833,153686],{"class":199},[128,153835,34264],{"class":138},[128,153837,153838,153840,153842],{"class":130,"line":244},[128,153839,1946],{"class":134},[128,153841,153763],{"class":199},[128,153843,1952],{"class":138},[128,153845,153846,153848,153850,153853],{"class":130,"line":287},[128,153847,313],{"class":166},[128,153849,253],{"class":138},[128,153851,153852],{"class":176},"\"喵喵\"",[128,153854,180],{"class":138},[128,153856,153857],{"class":130,"line":301},[128,153858,160],{"emptyLinePlaceholder":159},[128,153860,153861],{"class":130,"line":310},[128,153862,160],{"emptyLinePlaceholder":159},[128,153864,153865,153867,153869],{"class":130,"line":323},[128,153866,153721],{"class":138},[128,153868,270],{"class":134},[128,153870,153726],{"class":138},[128,153872,153873,153876,153878],{"class":130,"line":330},[128,153874,153875],{"class":138},"cat ",[128,153877,270],{"class":134},[128,153879,153880],{"class":138}," Cat()\n",[128,153882,153883],{"class":130,"line":335},[128,153884,160],{"emptyLinePlaceholder":159},[128,153886,153887],{"class":130,"line":340},[128,153888,153889],{"class":138},"dog.speak()\n",[128,153891,153892],{"class":130,"line":351},[128,153893,153894],{"class":138},"cat.speak()\n",[14,153896,153898],{"id":153897},"_1110-super","11.10 super",[19,153900,153901,153902,153905],{},"子类可以通过 ",[114,153903,153904],{},"super()"," 调用父类方法。",[106,153907,153909],{"className":122,"code":153908,"language":124,"meta":112,"style":112},"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",[114,153910,153911,153919,153928,153938,153942,153946,153958,153967,153978,153988,153992,153996,154012],{"__ignoreMap":112},[128,153912,153913,153915,153917],{"class":130,"line":131},[128,153914,1901],{"class":134},[128,153916,19090],{"class":199},[128,153918,241],{"class":138},[128,153920,153921,153923,153925],{"class":130,"line":142},[128,153922,1946],{"class":134},[128,153924,2108],{"class":166},[128,153926,153927],{"class":138},"(self, name):\n",[128,153929,153930,153932,153934,153936],{"class":130,"line":156},[128,153931,2115],{"class":166},[128,153933,153109],{"class":138},[128,153935,270],{"class":134},[128,153937,1196],{"class":138},[128,153939,153940],{"class":130,"line":163},[128,153941,160],{"emptyLinePlaceholder":159},[128,153943,153944],{"class":130,"line":183},[128,153945,160],{"emptyLinePlaceholder":159},[128,153947,153948,153950,153952,153954,153956],{"class":130,"line":188},[128,153949,1901],{"class":134},[128,153951,1904],{"class":199},[128,153953,253],{"class":138},[128,153955,22533],{"class":199},[128,153957,34264],{"class":138},[128,153959,153960,153962,153964],{"class":130,"line":193},[128,153961,1946],{"class":134},[128,153963,2108],{"class":166},[128,153965,153966],{"class":138},"(self, name, score):\n",[128,153968,153969,153971,153973,153975],{"class":130,"line":206},[128,153970,34292],{"class":166},[128,153972,20748],{"class":138},[128,153974,34303],{"class":166},[128,153976,153977],{"class":138},"(name)\n",[128,153979,153980,153982,153984,153986],{"class":130,"line":221},[128,153981,2115],{"class":166},[128,153983,153131],{"class":138},[128,153985,270],{"class":134},[128,153987,1226],{"class":138},[128,153989,153990],{"class":130,"line":230},[128,153991,160],{"emptyLinePlaceholder":159},[128,153993,153994],{"class":130,"line":235},[128,153995,160],{"emptyLinePlaceholder":159},[128,153997,153998,154000,154002,154004,154006,154008,154010],{"class":130,"line":244},[128,153999,152801],{"class":138},[128,154001,270],{"class":134},[128,154003,153202],{"class":138},[128,154005,153205],{"class":176},[128,154007,258],{"class":138},[128,154009,4734],{"class":166},[128,154011,180],{"class":138},[128,154013,154014,154016],{"class":130,"line":287},[128,154015,2469],{"class":166},[128,154017,154018],{"class":138},"(student.name, student.score)\n",[14,154020,154022],{"id":154021},"_1111-多态","11.11 多态",[19,154024,154025],{},"多态指不同对象响应同一个方法，表现出不同结果。",[106,154027,154029],{"className":122,"code":154028,"language":124,"meta":112,"style":112},"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",[114,154030,154031,154039,154047,154057,154061,154065,154073,154081,154091,154095,154099,154109,154114,154118,154122,154127],{"__ignoreMap":112},[128,154032,154033,154035,154037],{"class":130,"line":131},[128,154034,1901],{"class":134},[128,154036,153681],{"class":199},[128,154038,241],{"class":138},[128,154040,154041,154043,154045],{"class":130,"line":142},[128,154042,1946],{"class":134},[128,154044,153763],{"class":199},[128,154046,1952],{"class":138},[128,154048,154049,154051,154053,154055],{"class":130,"line":156},[128,154050,313],{"class":166},[128,154052,253],{"class":138},[128,154054,153706],{"class":176},[128,154056,180],{"class":138},[128,154058,154059],{"class":130,"line":163},[128,154060,160],{"emptyLinePlaceholder":159},[128,154062,154063],{"class":130,"line":183},[128,154064,160],{"emptyLinePlaceholder":159},[128,154066,154067,154069,154071],{"class":130,"line":188},[128,154068,1901],{"class":134},[128,154070,153829],{"class":199},[128,154072,241],{"class":138},[128,154074,154075,154077,154079],{"class":130,"line":193},[128,154076,1946],{"class":134},[128,154078,153763],{"class":199},[128,154080,1952],{"class":138},[128,154082,154083,154085,154087,154089],{"class":130,"line":206},[128,154084,313],{"class":166},[128,154086,253],{"class":138},[128,154088,153852],{"class":176},[128,154090,180],{"class":138},[128,154092,154093],{"class":130,"line":221},[128,154094,160],{"emptyLinePlaceholder":159},[128,154096,154097],{"class":130,"line":230},[128,154098,160],{"emptyLinePlaceholder":159},[128,154100,154101,154103,154106],{"class":130,"line":235},[128,154102,196],{"class":134},[128,154104,154105],{"class":199}," make_sound",[128,154107,154108],{"class":138},"(animal):\n",[128,154110,154111],{"class":130,"line":244},[128,154112,154113],{"class":138},"    animal.speak()\n",[128,154115,154116],{"class":130,"line":287},[128,154117,160],{"emptyLinePlaceholder":159},[128,154119,154120],{"class":130,"line":301},[128,154121,160],{"emptyLinePlaceholder":159},[128,154123,154124],{"class":130,"line":310},[128,154125,154126],{"class":138},"make_sound(Dog())\n",[128,154128,154129],{"class":130,"line":323},[128,154130,154131],{"class":138},"make_sound(Cat())\n",[19,154133,154134],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,154136,154138],{"id":154137},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,154140,154141],{},"实例属性属于对象：",[106,154143,154145],{"className":122,"code":154144,"language":124,"meta":112,"style":112},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[114,154146,154147,154155,154163],{"__ignoreMap":112},[128,154148,154149,154151,154153],{"class":130,"line":131},[128,154150,1901],{"class":134},[128,154152,1904],{"class":199},[128,154154,241],{"class":138},[128,154156,154157,154159,154161],{"class":130,"line":142},[128,154158,1946],{"class":134},[128,154160,2108],{"class":166},[128,154162,153927],{"class":138},[128,154164,154165,154167,154169,154171],{"class":130,"line":156},[128,154166,2115],{"class":166},[128,154168,153109],{"class":138},[128,154170,270],{"class":134},[128,154172,1196],{"class":138},[19,154174,154175],{},"类属性属于类，所有对象共享：",[106,154177,154179],{"className":122,"code":154178,"language":124,"meta":112,"style":112},"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",[114,154180,154181,154189,154199,154203,154211,154221,154225,154229,154242,154256,154260,154267,154274],{"__ignoreMap":112},[128,154182,154183,154185,154187],{"class":130,"line":131},[128,154184,1901],{"class":134},[128,154186,1904],{"class":199},[128,154188,241],{"class":138},[128,154190,154191,154194,154196],{"class":130,"line":142},[128,154192,154193],{"class":138},"    school ",[128,154195,270],{"class":134},[128,154197,154198],{"class":176}," \"黑马学校\"\n",[128,154200,154201],{"class":130,"line":156},[128,154202,160],{"emptyLinePlaceholder":159},[128,154204,154205,154207,154209],{"class":130,"line":163},[128,154206,1946],{"class":134},[128,154208,2108],{"class":166},[128,154210,153927],{"class":138},[128,154212,154213,154215,154217,154219],{"class":130,"line":183},[128,154214,2115],{"class":166},[128,154216,153109],{"class":138},[128,154218,270],{"class":134},[128,154220,1196],{"class":138},[128,154222,154223],{"class":130,"line":188},[128,154224,160],{"emptyLinePlaceholder":159},[128,154226,154227],{"class":130,"line":193},[128,154228,160],{"emptyLinePlaceholder":159},[128,154230,154231,154234,154236,154238,154240],{"class":130,"line":206},[128,154232,154233],{"class":138},"s1 ",[128,154235,270],{"class":134},[128,154237,153202],{"class":138},[128,154239,153205],{"class":176},[128,154241,180],{"class":138},[128,154243,154244,154247,154249,154251,154254],{"class":130,"line":221},[128,154245,154246],{"class":138},"s2 ",[128,154248,270],{"class":134},[128,154250,153202],{"class":138},[128,154252,154253],{"class":176},"\"小红\"",[128,154255,180],{"class":138},[128,154257,154258],{"class":130,"line":230},[128,154259,160],{"emptyLinePlaceholder":159},[128,154261,154262,154264],{"class":130,"line":235},[128,154263,2469],{"class":166},[128,154265,154266],{"class":138},"(s1.school)\n",[128,154268,154269,154271],{"class":130,"line":244},[128,154270,2469],{"class":166},[128,154272,154273],{"class":138},"(s2.school)\n",[128,154275,154276,154278],{"class":130,"line":287},[128,154277,2469],{"class":166},[128,154279,154280],{"class":138},"(Student.school)\n",[19,154282,154283],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,154285,154287],{"id":154286},"_1113-类方法和静态方法","11.13 类方法和静态方法",[72,154289,154291],{"id":154290},"_11131-类方法","11.13.1 类方法",[19,154293,154294,154295,154298,154299,1842],{},"类方法使用 ",[114,154296,154297],{},"@classmethod","，第一个参数通常是 ",[114,154300,154301],{},"cls",[106,154303,154305],{"className":122,"code":154304,"language":124,"meta":112,"style":112},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[114,154306,154307,154315,154323,154327,154333,154343,154352,154356,154360],{"__ignoreMap":112},[128,154308,154309,154311,154313],{"class":130,"line":131},[128,154310,1901],{"class":134},[128,154312,1904],{"class":199},[128,154314,241],{"class":138},[128,154316,154317,154319,154321],{"class":130,"line":142},[128,154318,154193],{"class":138},[128,154320,270],{"class":134},[128,154322,154198],{"class":176},[128,154324,154325],{"class":130,"line":156},[128,154326,160],{"emptyLinePlaceholder":159},[128,154328,154329,154331],{"class":130,"line":163},[128,154330,2023],{"class":199},[128,154332,2026],{"class":166},[128,154334,154335,154337,154340],{"class":130,"line":183},[128,154336,1946],{"class":134},[128,154338,154339],{"class":199}," get_school",[128,154341,154342],{"class":138},"(cls):\n",[128,154344,154345,154347,154349],{"class":130,"line":188},[128,154346,224],{"class":134},[128,154348,2043],{"class":166},[128,154350,154351],{"class":138},".school\n",[128,154353,154354],{"class":130,"line":193},[128,154355,160],{"emptyLinePlaceholder":159},[128,154357,154358],{"class":130,"line":206},[128,154359,160],{"emptyLinePlaceholder":159},[128,154361,154362,154364],{"class":130,"line":221},[128,154363,2469],{"class":166},[128,154365,154366],{"class":138},"(Student.get_school())\n",[72,154368,154370],{"id":154369},"_11132-静态方法","11.13.2 静态方法",[19,154372,154373,154374,154377],{},"静态方法使用 ",[114,154375,154376],{},"@staticmethod","，不需要访问实例和类。",[106,154379,154381],{"className":122,"code":154380,"language":124,"meta":112,"style":112},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[114,154382,154383,154392,154399,154408,154419,154423,154427],{"__ignoreMap":112},[128,154384,154385,154387,154390],{"class":130,"line":131},[128,154386,1901],{"class":134},[128,154388,154389],{"class":199}," MathUtils",[128,154391,241],{"class":138},[128,154393,154394,154396],{"class":130,"line":142},[128,154395,2023],{"class":199},[128,154397,154398],{"class":166},"staticmethod\n",[128,154400,154401,154403,154405],{"class":130,"line":156},[128,154402,1946],{"class":134},[128,154404,2187],{"class":199},[128,154406,154407],{"class":138},"(a, b):\n",[128,154409,154410,154412,154414,154416],{"class":130,"line":163},[128,154411,224],{"class":134},[128,154413,14396],{"class":138},[128,154415,2457],{"class":134},[128,154417,154418],{"class":138}," b\n",[128,154420,154421],{"class":130,"line":183},[128,154422,160],{"emptyLinePlaceholder":159},[128,154424,154425],{"class":130,"line":188},[128,154426,160],{"emptyLinePlaceholder":159},[128,154428,154429,154431,154434,154436,154438,154440],{"class":130,"line":193},[128,154430,2469],{"class":166},[128,154432,154433],{"class":138},"(MathUtils.add(",[128,154435,2592],{"class":166},[128,154437,258],{"class":138},[128,154439,409],{"class":166},[128,154441,3034],{"class":138},[19,154443,154444],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,154446,154448],{"id":154447},"_1114-dataclass","11.14 dataclass",[19,154450,154451,154454],{},[114,154452,154453],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[106,154456,154458],{"className":122,"code":154457,"language":124,"meta":112,"style":112},"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",[114,154459,154460,154470,154474,154478,154482,154490,154496,154502,154508,154512,154516,154536],{"__ignoreMap":112},[128,154461,154462,154464,154466,154468],{"class":130,"line":131},[128,154463,145],{"class":134},[128,154465,1878],{"class":138},[128,154467,135],{"class":134},[128,154469,1883],{"class":138},[128,154471,154472],{"class":130,"line":142},[128,154473,160],{"emptyLinePlaceholder":159},[128,154475,154476],{"class":130,"line":156},[128,154477,160],{"emptyLinePlaceholder":159},[128,154479,154480],{"class":130,"line":163},[128,154481,1896],{"class":199},[128,154483,154484,154486,154488],{"class":130,"line":183},[128,154485,1901],{"class":134},[128,154487,1904],{"class":199},[128,154489,241],{"class":138},[128,154491,154492,154494],{"class":130,"line":188},[128,154493,1919],{"class":138},[128,154495,1914],{"class":166},[128,154497,154498,154500],{"class":130,"line":193},[128,154499,1926],{"class":138},[128,154501,1929],{"class":166},[128,154503,154504,154506],{"class":130,"line":206},[128,154505,1934],{"class":138},[128,154507,1937],{"class":166},[128,154509,154510],{"class":130,"line":221},[128,154511,160],{"emptyLinePlaceholder":159},[128,154513,154514],{"class":130,"line":230},[128,154515,160],{"emptyLinePlaceholder":159},[128,154517,154518,154520,154522,154524,154526,154528,154530,154532,154534],{"class":130,"line":235},[128,154519,152801],{"class":138},[128,154521,270],{"class":134},[128,154523,153202],{"class":138},[128,154525,153205],{"class":176},[128,154527,258],{"class":138},[128,154529,4399],{"class":166},[128,154531,258],{"class":138},[128,154533,4734],{"class":166},[128,154535,180],{"class":138},[128,154537,154538,154540],{"class":130,"line":244},[128,154539,2469],{"class":166},[128,154541,153359],{"class":138},[19,154543,154544,154545,3550,154547,154550],{},"它会自动生成 ",[114,154546,34303],{},[114,154548,154549],{},"__repr__"," 等方法。适合数据模型类。",[14,154552,154554],{"id":154553},"_1115-小案例学生类","11.15 小案例：学生类",[106,154556,154558],{"className":122,"code":154557,"language":124,"meta":112,"style":112},"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",[114,154559,154560,154568,154577,154589,154599,154609,154619,154623,154632,154645,154649,154657,154663,154673,154683,154693,154703,154707,154711,154717,154725,154733,154741,154749,154757,154765,154769,154773,154781,154817,154821,154825,154850,154857],{"__ignoreMap":112},[128,154561,154562,154564,154566],{"class":130,"line":131},[128,154563,1901],{"class":134},[128,154565,1904],{"class":199},[128,154567,241],{"class":138},[128,154569,154570,154572,154574],{"class":130,"line":142},[128,154571,1946],{"class":134},[128,154573,2108],{"class":166},[128,154575,154576],{"class":138},"(self, student_id, name, age, score):\n",[128,154578,154579,154581,154584,154586],{"class":130,"line":156},[128,154580,2115],{"class":166},[128,154582,154583],{"class":138},".student_id ",[128,154585,270],{"class":134},[128,154587,154588],{"class":138}," student_id\n",[128,154590,154591,154593,154595,154597],{"class":130,"line":163},[128,154592,2115],{"class":166},[128,154594,153109],{"class":138},[128,154596,270],{"class":134},[128,154598,1196],{"class":138},[128,154600,154601,154603,154605,154607],{"class":130,"line":183},[128,154602,2115],{"class":166},[128,154604,153120],{"class":138},[128,154606,270],{"class":134},[128,154608,1211],{"class":138},[128,154610,154611,154613,154615,154617],{"class":130,"line":188},[128,154612,2115],{"class":166},[128,154614,153131],{"class":138},[128,154616,270],{"class":134},[128,154618,1226],{"class":138},[128,154620,154621],{"class":130,"line":193},[128,154622,160],{"emptyLinePlaceholder":159},[128,154624,154625,154627,154630],{"class":130,"line":206},[128,154626,1946],{"class":134},[128,154628,154629],{"class":199}," is_passed",[128,154631,1952],{"class":138},[128,154633,154634,154636,154638,154640,154642],{"class":130,"line":221},[128,154635,224],{"class":134},[128,154637,2148],{"class":166},[128,154639,153131],{"class":138},[128,154641,5308],{"class":134},[128,154643,154644],{"class":166}," 60\n",[128,154646,154647],{"class":130,"line":230},[128,154648,160],{"emptyLinePlaceholder":159},[128,154650,154651,154653,154655],{"class":130,"line":235},[128,154652,1946],{"class":134},[128,154654,1949],{"class":199},[128,154656,1952],{"class":138},[128,154658,154659,154661],{"class":130,"line":244},[128,154660,224],{"class":134},[128,154662,1959],{"class":138},[128,154664,154665,154667,154669,154671],{"class":130,"line":287},[128,154666,1964],{"class":176},[128,154668,1967],{"class":138},[128,154670,1970],{"class":166},[128,154672,1973],{"class":138},[128,154674,154675,154677,154679,154681],{"class":130,"line":301},[128,154676,1978],{"class":176},[128,154678,1967],{"class":138},[128,154680,1970],{"class":166},[128,154682,1985],{"class":138},[128,154684,154685,154687,154689,154691],{"class":130,"line":310},[128,154686,1990],{"class":176},[128,154688,1967],{"class":138},[128,154690,1970],{"class":166},[128,154692,1997],{"class":138},[128,154694,154695,154697,154699,154701],{"class":130,"line":323},[128,154696,2002],{"class":176},[128,154698,1967],{"class":138},[128,154700,1970],{"class":166},[128,154702,2009],{"class":138},[128,154704,154705],{"class":130,"line":330},[128,154706,2014],{"class":138},[128,154708,154709],{"class":130,"line":335},[128,154710,160],{"emptyLinePlaceholder":159},[128,154712,154713,154715],{"class":130,"line":340},[128,154714,2023],{"class":199},[128,154716,2026],{"class":166},[128,154718,154719,154721,154723],{"class":130,"line":351},[128,154720,1946],{"class":134},[128,154722,2033],{"class":199},[128,154724,2036],{"class":138},[128,154726,154727,154729,154731],{"class":130,"line":384},[128,154728,224],{"class":134},[128,154730,2043],{"class":166},[128,154732,1367],{"class":138},[128,154734,154735,154737,154739],{"class":130,"line":414},[128,154736,2050],{"class":138},[128,154738,564],{"class":176},[128,154740,2055],{"class":138},[128,154742,154743,154745,154747],{"class":130,"line":419},[128,154744,2050],{"class":138},[128,154746,1189],{"class":176},[128,154748,2055],{"class":138},[128,154750,154751,154753,154755],{"class":130,"line":424},[128,154752,2050],{"class":138},[128,154754,1204],{"class":176},[128,154756,2055],{"class":138},[128,154758,154759,154761,154763],{"class":130,"line":434},[128,154760,2050],{"class":138},[128,154762,1219],{"class":176},[128,154764,2055],{"class":138},[128,154766,154767],{"class":130,"line":447},[128,154768,2084],{"class":138},[128,154770,154771],{"class":130,"line":459},[128,154772,160],{"emptyLinePlaceholder":159},[128,154774,154775,154777,154779],{"class":130,"line":471},[128,154776,1946],{"class":134},[128,154778,153298],{"class":166},[128,154780,1952],{"class":138},[128,154782,154783,154785,154787,154789,154791,154794,154796,154799,154801,154803,154805,154807,154809,154811,154813,154815],{"class":130,"line":483},[128,154784,224],{"class":134},[128,154786,153307],{"class":134},[128,154788,1376],{"class":176},[128,154790,152772],{"class":166},[128,154792,154793],{"class":138},".student_id",[128,154795,1453],{"class":166},[128,154797,154798],{"class":166}," {self",[128,154800,83674],{"class":138},[128,154802,1453],{"class":166},[128,154804,154798],{"class":166},[128,154806,83686],{"class":138},[128,154808,1453],{"class":166},[128,154810,154798],{"class":166},[128,154812,153179],{"class":138},[128,154814,1453],{"class":166},[128,154816,1394],{"class":176},[128,154818,154819],{"class":130,"line":495},[128,154820,160],{"emptyLinePlaceholder":159},[128,154822,154823],{"class":130,"line":507},[128,154824,160],{"emptyLinePlaceholder":159},[128,154826,154827,154829,154831,154833,154836,154838,154840,154842,154844,154846,154848],{"class":130,"line":519},[128,154828,152801],{"class":138},[128,154830,270],{"class":134},[128,154832,153202],{"class":138},[128,154834,154835],{"class":176},"\"001\"",[128,154837,258],{"class":138},[128,154839,153205],{"class":176},[128,154841,258],{"class":138},[128,154843,4399],{"class":166},[128,154845,258],{"class":138},[128,154847,4734],{"class":166},[128,154849,180],{"class":138},[128,154851,154852,154854],{"class":130,"line":524},[128,154853,2469],{"class":166},[128,154855,154856],{"class":138},"(student.is_passed())\n",[128,154858,154859,154861],{"class":130,"line":529},[128,154860,2469],{"class":166},[128,154862,154863],{"class":138},"(student.to_dict())\n",[19,154865,154866,3330,154869,154872],{},[114,154867,154868],{},"to_dict()",[114,154870,154871],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,154874,154876],{"id":154875},"_1116-易错点","11.16 易错点",[26,154878,154879,154884,154890,154895,154898,154901],{},[29,154880,154881,154882,1842],{},"类名推荐使用大驼峰，如 ",[114,154883,1862],{},[29,154885,154886,154887,154889],{},"方法第一个参数必须写 ",[114,154888,1970],{},"，调用时不用传。",[29,154891,154892,154894],{},[114,154893,34303],{}," 不是普通方法，它在创建对象时自动执行。",[29,154896,154897],{},"私有属性不是绝对安全，只是约定和名称改写。",[29,154899,154900],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[29,154902,154903],{},"类中方法太多时，说明职责可能过重。",[14,154905,154907],{"id":154906},"_1117-本章练习","11.17 本章练习",[26,154909,154910,154916,154922,154927,154940],{},[29,154911,154912,154913,154915],{},"定义 ",[114,154914,1856],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[29,154917,154912,154918,154921],{},[114,154919,154920],{},"Account"," 类，实现存款、取款、查询余额。",[29,154923,154912,154924,154926],{},[114,154925,20713],{}," 类，计算圆的周长和面积。",[29,154928,154912,154929,3550,154932,154935,154936,154939],{},[114,154930,154931],{},"Dog",[114,154933,154934],{},"Cat"," 类，并用同一个函数调用它们的 ",[114,154937,154938],{},"speak()"," 方法。",[29,154941,107729,154942,154944,154945,1842],{},[114,154943,154453],{}," 定义一个商品类 ",[114,154946,154947],{},"Product",[3659,154949,154950],{},"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":112,"searchDepth":142,"depth":142,"links":154952},[154953,154954,154955,154956,154957,154958,154960,154961,154962,154963,154964,154965,154966,154970,154971,154972,154973],{"id":152652,"depth":142,"text":152653},{"id":152835,"depth":142,"text":152836},{"id":152898,"depth":142,"text":152899},{"id":152975,"depth":142,"text":152976},{"id":153074,"depth":142,"text":153075},{"id":153236,"depth":142,"text":154959},"11.6 str",{"id":153362,"depth":142,"text":153363},{"id":153628,"depth":142,"text":153629},{"id":153742,"depth":142,"text":153743},{"id":153897,"depth":142,"text":153898},{"id":154021,"depth":142,"text":154022},{"id":154137,"depth":142,"text":154138},{"id":154286,"depth":142,"text":154287,"children":154967},[154968,154969],{"id":154290,"depth":156,"text":154291},{"id":154369,"depth":156,"text":154370},{"id":154447,"depth":142,"text":154448},{"id":154553,"depth":142,"text":154554},{"id":154875,"depth":142,"text":154876},{"id":154906,"depth":142,"text":154907},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":152644,"description":3686},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":4,"title":5,"body":154980,"description":3686,"extension":3687,"meta":157888,"navigation":159,"path":3689,"seo":157889,"stem":3691,"__hash__":3692},{"type":7,"value":154981,"toc":157864},[154982,154984,154986,154988,154990,155010,155012,155018,155020,155022,155024,155040,155042,155047,155049,156377,156379,156395,156397,156399,156409,156411,156593,156595,156709,156711,156713,156715,156843,156845,156921,156923,156999,157001,157031,157033,157203,157205,157207,157415,157417,157419,157583,157585,157587,157589,157594,157596,157614,157616,157618,157628,157630,157650,157652,157662,157664,157676,157678,157690,157692,157704,157706,157724,157726,157742,157744,157746,157748,157753,157755,157769,157771,157776,157780,157782,157784,157840,157842,157844,157862],[10,154983,5],{"id":12},[14,154985,17],{"id":16},[19,154987,21],{},[19,154989,24],{},[26,154991,154992,154994,154996,154998,155000,155002,155004,155006,155008],{},[29,154993,31],{},[29,154995,34],{},[29,154997,37],{},[29,154999,40],{},[29,155001,43],{},[29,155003,46],{},[29,155005,49],{},[29,155007,52],{},[29,155009,55],{},[19,155011,58],{},[26,155013,155014,155016],{},[29,155015,63],{},[29,155017,66],{},[14,155019,70],{"id":69},[72,155021,75],{"id":74},[19,155023,78],{},[26,155025,155026,155028,155030,155032,155034,155036,155038],{},[29,155027,83],{},[29,155029,86],{},[29,155031,89],{},[29,155033,92],{},[29,155035,95],{},[29,155037,98],{},[29,155039,101],{},[19,155041,104],{},[106,155043,155045],{"className":155044,"code":110,"language":111,"meta":112},[109],[114,155046,110],{"__ignoreMap":112},[14,155048,119],{"id":118},[106,155050,155051],{"className":122,"code":123,"language":124,"meta":112,"style":112},[114,155052,155053,155059,155069,155073,155085,155089,155093,155101,155111,155117,155121,155127,155157,155167,155173,155183,155189,155193,155197,155205,155235,155259,155263,155267,155275,155285,155295,155305,155315,155325,155335,155345,155349,155353,155361,155371,155385,155391,155397,155401,155405,155413,155421,155427,155439,155447,155457,155461,155465,155473,155481,155487,155499,155507,155517,155521,155525,155533,155547,155551,155557,155567,155571,155575,155589,155601,155613,155617,155621,155627,155633,155639,155645,155649,155653,155663,155667,155671,155679,155693,155701,155705,155717,155727,155731,155735,155739,155743,155753,155757,155761,155769,155783,155791,155795,155807,155817,155821,155825,155839,155851,155863,155867,155879,155891,155903,155907,155911,155921,155925,155929,155937,155951,155959,155963,155975,155985,155989,155993,155997,156001,156005,156013,156019,156037,156055,156073,156091,156095,156099,156103,156111,156119,156129,156133,156137,156159,156169,156173,156177,156181,156189,156197,156201,156209,156213,156227,156231,156243,156247,156259,156263,156275,156279,156291,156295,156307,156311,156323,156333,156337,156343,156353,156357,156361,156373],{"__ignoreMap":112},[128,155054,155055,155057],{"class":130,"line":131},[128,155056,135],{"class":134},[128,155058,139],{"class":138},[128,155060,155061,155063,155065,155067],{"class":130,"line":142},[128,155062,145],{"class":134},[128,155064,148],{"class":138},[128,155066,135],{"class":134},[128,155068,153],{"class":138},[128,155070,155071],{"class":130,"line":156},[128,155072,160],{"emptyLinePlaceholder":159},[128,155074,155075,155077,155079,155081,155083],{"class":130,"line":163},[128,155076,167],{"class":166},[128,155078,170],{"class":134},[128,155080,173],{"class":138},[128,155082,177],{"class":176},[128,155084,180],{"class":138},[128,155086,155087],{"class":130,"line":183},[128,155088,160],{"emptyLinePlaceholder":159},[128,155090,155091],{"class":130,"line":188},[128,155092,160],{"emptyLinePlaceholder":159},[128,155094,155095,155097,155099],{"class":130,"line":193},[128,155096,196],{"class":134},[128,155098,200],{"class":199},[128,155100,203],{"class":138},[128,155102,155103,155105,155107,155109],{"class":130,"line":206},[128,155104,209],{"class":134},[128,155106,212],{"class":134},[128,155108,215],{"class":166},[128,155110,218],{"class":138},[128,155112,155113,155115],{"class":130,"line":221},[128,155114,224],{"class":134},[128,155116,227],{"class":138},[128,155118,155119],{"class":130,"line":230},[128,155120,160],{"emptyLinePlaceholder":159},[128,155122,155123,155125],{"class":130,"line":235},[128,155124,238],{"class":134},[128,155126,241],{"class":138},[128,155128,155129,155131,155133,155135,155137,155139,155141,155143,155145,155147,155149,155151,155153,155155],{"class":130,"line":244},[128,155130,247],{"class":134},[128,155132,250],{"class":166},[128,155134,253],{"class":138},[128,155136,167],{"class":166},[128,155138,258],{"class":138},[128,155140,261],{"class":176},[128,155142,258],{"class":138},[128,155144,267],{"class":266},[128,155146,270],{"class":134},[128,155148,273],{"class":176},[128,155150,276],{"class":138},[128,155152,279],{"class":134},[128,155154,282],{"class":266},[128,155156,241],{"class":138},[128,155158,155159,155161,155163,155165],{"class":130,"line":287},[128,155160,290],{"class":134},[128,155162,293],{"class":138},[128,155164,296],{"class":266},[128,155166,180],{"class":138},[128,155168,155169,155171],{"class":130,"line":301},[128,155170,304],{"class":134},[128,155172,307],{"class":138},[128,155174,155175,155177,155179,155181],{"class":130,"line":310},[128,155176,313],{"class":166},[128,155178,253],{"class":138},[128,155180,318],{"class":176},[128,155182,180],{"class":138},[128,155184,155185,155187],{"class":130,"line":323},[128,155186,224],{"class":134},[128,155188,227],{"class":138},[128,155190,155191],{"class":130,"line":330},[128,155192,160],{"emptyLinePlaceholder":159},[128,155194,155195],{"class":130,"line":335},[128,155196,160],{"emptyLinePlaceholder":159},[128,155198,155199,155201,155203],{"class":130,"line":340},[128,155200,196],{"class":134},[128,155202,345],{"class":199},[128,155204,348],{"class":138},[128,155206,155207,155209,155211,155213,155215,155217,155219,155221,155223,155225,155227,155229,155231,155233],{"class":130,"line":351},[128,155208,354],{"class":134},[128,155210,250],{"class":166},[128,155212,253],{"class":138},[128,155214,167],{"class":166},[128,155216,258],{"class":138},[128,155218,365],{"class":176},[128,155220,258],{"class":138},[128,155222,267],{"class":266},[128,155224,270],{"class":134},[128,155226,273],{"class":176},[128,155228,276],{"class":138},[128,155230,279],{"class":134},[128,155232,282],{"class":266},[128,155234,241],{"class":138},[128,155236,155237,155239,155241,155243,155245,155247,155249,155251,155253,155255,155257],{"class":130,"line":384},[128,155238,387],{"class":138},[128,155240,296],{"class":266},[128,155242,258],{"class":138},[128,155244,394],{"class":266},[128,155246,270],{"class":134},[128,155248,399],{"class":166},[128,155250,258],{"class":138},[128,155252,404],{"class":266},[128,155254,270],{"class":134},[128,155256,409],{"class":166},[128,155258,180],{"class":138},[128,155260,155261],{"class":130,"line":414},[128,155262,160],{"emptyLinePlaceholder":159},[128,155264,155265],{"class":130,"line":419},[128,155266,160],{"emptyLinePlaceholder":159},[128,155268,155269,155271,155273],{"class":130,"line":424},[128,155270,196],{"class":134},[128,155272,429],{"class":199},[128,155274,203],{"class":138},[128,155276,155277,155279,155281,155283],{"class":130,"line":434},[128,155278,437],{"class":166},[128,155280,253],{"class":138},[128,155282,442],{"class":176},[128,155284,180],{"class":138},[128,155286,155287,155289,155291,155293],{"class":130,"line":447},[128,155288,437],{"class":166},[128,155290,253],{"class":138},[128,155292,454],{"class":176},[128,155294,180],{"class":138},[128,155296,155297,155299,155301,155303],{"class":130,"line":459},[128,155298,437],{"class":166},[128,155300,253],{"class":138},[128,155302,466],{"class":176},[128,155304,180],{"class":138},[128,155306,155307,155309,155311,155313],{"class":130,"line":471},[128,155308,437],{"class":166},[128,155310,253],{"class":138},[128,155312,478],{"class":176},[128,155314,180],{"class":138},[128,155316,155317,155319,155321,155323],{"class":130,"line":483},[128,155318,437],{"class":166},[128,155320,253],{"class":138},[128,155322,490],{"class":176},[128,155324,180],{"class":138},[128,155326,155327,155329,155331,155333],{"class":130,"line":495},[128,155328,437],{"class":166},[128,155330,253],{"class":138},[128,155332,502],{"class":176},[128,155334,180],{"class":138},[128,155336,155337,155339,155341,155343],{"class":130,"line":507},[128,155338,437],{"class":166},[128,155340,253],{"class":138},[128,155342,514],{"class":176},[128,155344,180],{"class":138},[128,155346,155347],{"class":130,"line":519},[128,155348,160],{"emptyLinePlaceholder":159},[128,155350,155351],{"class":130,"line":524},[128,155352,160],{"emptyLinePlaceholder":159},[128,155354,155355,155357,155359],{"class":130,"line":529},[128,155356,196],{"class":134},[128,155358,534],{"class":199},[128,155360,537],{"class":138},[128,155362,155363,155365,155367,155369],{"class":130,"line":540},[128,155364,543],{"class":134},[128,155366,546],{"class":138},[128,155368,549],{"class":134},[128,155370,552],{"class":138},[128,155372,155373,155375,155377,155379,155381,155383],{"class":130,"line":555},[128,155374,558],{"class":134},[128,155376,561],{"class":138},[128,155378,564],{"class":176},[128,155380,567],{"class":138},[128,155382,570],{"class":134},[128,155384,573],{"class":138},[128,155386,155387,155389],{"class":130,"line":576},[128,155388,290],{"class":134},[128,155390,581],{"class":138},[128,155392,155393,155395],{"class":130,"line":584},[128,155394,587],{"class":134},[128,155396,590],{"class":166},[128,155398,155399],{"class":130,"line":593},[128,155400,160],{"emptyLinePlaceholder":159},[128,155402,155403],{"class":130,"line":598},[128,155404,160],{"emptyLinePlaceholder":159},[128,155406,155407,155409,155411],{"class":130,"line":603},[128,155408,196],{"class":134},[128,155410,608],{"class":199},[128,155412,611],{"class":138},[128,155414,155415,155417,155419],{"class":130,"line":614},[128,155416,617],{"class":134},[128,155418,620],{"class":166},[128,155420,241],{"class":138},[128,155422,155423,155425],{"class":130,"line":625},[128,155424,628],{"class":134},[128,155426,241],{"class":138},[128,155428,155429,155431,155433,155435,155437],{"class":130,"line":633},[128,155430,290],{"class":134},[128,155432,638],{"class":166},[128,155434,253],{"class":138},[128,155436,643],{"class":166},[128,155438,646],{"class":138},[128,155440,155441,155443,155445],{"class":130,"line":649},[128,155442,652],{"class":134},[128,155444,655],{"class":166},[128,155446,241],{"class":138},[128,155448,155449,155451,155453,155455],{"class":130,"line":660},[128,155450,663],{"class":166},[128,155452,253],{"class":138},[128,155454,668],{"class":176},[128,155456,180],{"class":138},[128,155458,155459],{"class":130,"line":673},[128,155460,160],{"emptyLinePlaceholder":159},[128,155462,155463],{"class":130,"line":678},[128,155464,160],{"emptyLinePlaceholder":159},[128,155466,155467,155469,155471],{"class":130,"line":683},[128,155468,196],{"class":134},[128,155470,688],{"class":199},[128,155472,611],{"class":138},[128,155474,155475,155477,155479],{"class":130,"line":693},[128,155476,617],{"class":134},[128,155478,620],{"class":166},[128,155480,241],{"class":138},[128,155482,155483,155485],{"class":130,"line":702},[128,155484,628],{"class":134},[128,155486,241],{"class":138},[128,155488,155489,155491,155493,155495,155497],{"class":130,"line":709},[128,155490,290],{"class":134},[128,155492,714],{"class":166},[128,155494,253],{"class":138},[128,155496,643],{"class":166},[128,155498,646],{"class":138},[128,155500,155501,155503,155505],{"class":130,"line":723},[128,155502,652],{"class":134},[128,155504,655],{"class":166},[128,155506,241],{"class":138},[128,155508,155509,155511,155513,155515],{"class":130,"line":732},[128,155510,663],{"class":166},[128,155512,253],{"class":138},[128,155514,739],{"class":176},[128,155516,180],{"class":138},[128,155518,155519],{"class":130,"line":744},[128,155520,160],{"emptyLinePlaceholder":159},[128,155522,155523],{"class":130,"line":749},[128,155524,160],{"emptyLinePlaceholder":159},[128,155526,155527,155529,155531],{"class":130,"line":754},[128,155528,196],{"class":134},[128,155530,759],{"class":199},[128,155532,348],{"class":138},[128,155534,155535,155537,155539,155541,155543,155545],{"class":130,"line":764},[128,155536,767],{"class":138},[128,155538,270],{"class":134},[128,155540,772],{"class":166},[128,155542,253],{"class":138},[128,155544,777],{"class":176},[128,155546,180],{"class":138},[128,155548,155549],{"class":130,"line":782},[128,155550,160],{"emptyLinePlaceholder":159},[128,155552,155553,155555],{"class":130,"line":787},[128,155554,209],{"class":134},[128,155556,792],{"class":138},[128,155558,155559,155561,155563,155565],{"class":130,"line":795},[128,155560,313],{"class":166},[128,155562,253],{"class":138},[128,155564,802],{"class":176},[128,155566,180],{"class":138},[128,155568,155569],{"class":130,"line":807},[128,155570,810],{"class":134},[128,155572,155573],{"class":130,"line":813},[128,155574,160],{"emptyLinePlaceholder":159},[128,155576,155577,155579,155581,155583,155585,155587],{"class":130,"line":818},[128,155578,821],{"class":138},[128,155580,270],{"class":134},[128,155582,772],{"class":166},[128,155584,253],{"class":138},[128,155586,830],{"class":176},[128,155588,180],{"class":138},[128,155590,155591,155593,155595,155597,155599],{"class":130,"line":835},[128,155592,838],{"class":138},[128,155594,270],{"class":134},[128,155596,843],{"class":138},[128,155598,846],{"class":176},[128,155600,180],{"class":138},[128,155602,155603,155605,155607,155609,155611],{"class":130,"line":851},[128,155604,854],{"class":138},[128,155606,270],{"class":134},[128,155608,859],{"class":138},[128,155610,862],{"class":176},[128,155612,180],{"class":138},[128,155614,155615],{"class":130,"line":867},[128,155616,160],{"emptyLinePlaceholder":159},[128,155618,155619],{"class":130,"line":872},[128,155620,875],{"class":138},[128,155622,155623,155625],{"class":130,"line":878},[128,155624,881],{"class":176},[128,155626,884],{"class":138},[128,155628,155629,155631],{"class":130,"line":887},[128,155630,890],{"class":176},[128,155632,893],{"class":138},[128,155634,155635,155637],{"class":130,"line":896},[128,155636,899],{"class":176},[128,155638,902],{"class":138},[128,155640,155641,155643],{"class":130,"line":905},[128,155642,908],{"class":176},[128,155644,911],{"class":138},[128,155646,155647],{"class":130,"line":914},[128,155648,917],{"class":138},[128,155650,155651],{"class":130,"line":920},[128,155652,923],{"class":138},[128,155654,155655,155657,155659,155661],{"class":130,"line":926},[128,155656,437],{"class":166},[128,155658,253],{"class":138},[128,155660,933],{"class":176},[128,155662,180],{"class":138},[128,155664,155665],{"class":130,"line":938},[128,155666,160],{"emptyLinePlaceholder":159},[128,155668,155669],{"class":130,"line":943},[128,155670,160],{"emptyLinePlaceholder":159},[128,155672,155673,155675,155677],{"class":130,"line":948},[128,155674,196],{"class":134},[128,155676,953],{"class":199},[128,155678,348],{"class":138},[128,155680,155681,155683,155685,155687,155689,155691],{"class":130,"line":958},[128,155682,767],{"class":138},[128,155684,270],{"class":134},[128,155686,772],{"class":166},[128,155688,253],{"class":138},[128,155690,969],{"class":176},[128,155692,180],{"class":138},[128,155694,155695,155697,155699],{"class":130,"line":974},[128,155696,977],{"class":138},[128,155698,270],{"class":134},[128,155700,982],{"class":138},[128,155702,155703],{"class":130,"line":985},[128,155704,160],{"emptyLinePlaceholder":159},[128,155706,155707,155709,155711,155713,155715],{"class":130,"line":990},[128,155708,209],{"class":134},[128,155710,546],{"class":138},[128,155712,997],{"class":134},[128,155714,1000],{"class":166},[128,155716,241],{"class":138},[128,155718,155719,155721,155723,155725],{"class":130,"line":1005},[128,155720,313],{"class":166},[128,155722,253],{"class":138},[128,155724,1012],{"class":176},[128,155726,180],{"class":138},[128,155728,155729],{"class":130,"line":1017},[128,155730,810],{"class":134},[128,155732,155733],{"class":130,"line":1022},[128,155734,160],{"emptyLinePlaceholder":159},[128,155736,155737],{"class":130,"line":1027},[128,155738,1030],{"class":138},[128,155740,155741],{"class":130,"line":1033},[128,155742,923],{"class":138},[128,155744,155745,155747,155749,155751],{"class":130,"line":1038},[128,155746,437],{"class":166},[128,155748,253],{"class":138},[128,155750,1045],{"class":176},[128,155752,180],{"class":138},[128,155754,155755],{"class":130,"line":1050},[128,155756,160],{"emptyLinePlaceholder":159},[128,155758,155759],{"class":130,"line":1055},[128,155760,160],{"emptyLinePlaceholder":159},[128,155762,155763,155765,155767],{"class":130,"line":1060},[128,155764,196],{"class":134},[128,155766,1065],{"class":199},[128,155768,348],{"class":138},[128,155770,155771,155773,155775,155777,155779,155781],{"class":130,"line":1070},[128,155772,767],{"class":138},[128,155774,270],{"class":134},[128,155776,772],{"class":166},[128,155778,253],{"class":138},[128,155780,1081],{"class":176},[128,155782,180],{"class":138},[128,155784,155785,155787,155789],{"class":130,"line":1086},[128,155786,977],{"class":138},[128,155788,270],{"class":134},[128,155790,982],{"class":138},[128,155792,155793],{"class":130,"line":1095},[128,155794,160],{"emptyLinePlaceholder":159},[128,155796,155797,155799,155801,155803,155805],{"class":130,"line":1100},[128,155798,209],{"class":134},[128,155800,546],{"class":138},[128,155802,997],{"class":134},[128,155804,1000],{"class":166},[128,155806,241],{"class":138},[128,155808,155809,155811,155813,155815],{"class":130,"line":1113},[128,155810,313],{"class":166},[128,155812,253],{"class":138},[128,155814,1012],{"class":176},[128,155816,180],{"class":138},[128,155818,155819],{"class":130,"line":1124},[128,155820,810],{"class":134},[128,155822,155823],{"class":130,"line":1129},[128,155824,160],{"emptyLinePlaceholder":159},[128,155826,155827,155829,155831,155833,155835,155837],{"class":130,"line":1134},[128,155828,821],{"class":138},[128,155830,270],{"class":134},[128,155832,772],{"class":166},[128,155834,253],{"class":138},[128,155836,1145],{"class":176},[128,155838,180],{"class":138},[128,155840,155841,155843,155845,155847,155849],{"class":130,"line":1150},[128,155842,838],{"class":138},[128,155844,270],{"class":134},[128,155846,843],{"class":138},[128,155848,1159],{"class":176},[128,155850,180],{"class":138},[128,155852,155853,155855,155857,155859,155861],{"class":130,"line":1164},[128,155854,854],{"class":138},[128,155856,270],{"class":134},[128,155858,859],{"class":138},[128,155860,1173],{"class":176},[128,155862,180],{"class":138},[128,155864,155865],{"class":130,"line":1178},[128,155866,160],{"emptyLinePlaceholder":159},[128,155868,155869,155871,155873,155875,155877],{"class":130,"line":1183},[128,155870,1186],{"class":138},[128,155872,1189],{"class":176},[128,155874,567],{"class":138},[128,155876,270],{"class":134},[128,155878,1196],{"class":138},[128,155880,155881,155883,155885,155887,155889],{"class":130,"line":1199},[128,155882,1186],{"class":138},[128,155884,1204],{"class":176},[128,155886,567],{"class":138},[128,155888,270],{"class":134},[128,155890,1211],{"class":138},[128,155892,155893,155895,155897,155899,155901],{"class":130,"line":1214},[128,155894,1186],{"class":138},[128,155896,1219],{"class":176},[128,155898,567],{"class":138},[128,155900,270],{"class":134},[128,155902,1226],{"class":138},[128,155904,155905],{"class":130,"line":1229},[128,155906,160],{"emptyLinePlaceholder":159},[128,155908,155909],{"class":130,"line":1234},[128,155910,923],{"class":138},[128,155912,155913,155915,155917,155919],{"class":130,"line":1239},[128,155914,437],{"class":166},[128,155916,253],{"class":138},[128,155918,1246],{"class":176},[128,155920,180],{"class":138},[128,155922,155923],{"class":130,"line":1251},[128,155924,160],{"emptyLinePlaceholder":159},[128,155926,155927],{"class":130,"line":1256},[128,155928,160],{"emptyLinePlaceholder":159},[128,155930,155931,155933,155935],{"class":130,"line":1261},[128,155932,196],{"class":134},[128,155934,1266],{"class":199},[128,155936,348],{"class":138},[128,155938,155939,155941,155943,155945,155947,155949],{"class":130,"line":1271},[128,155940,767],{"class":138},[128,155942,270],{"class":134},[128,155944,772],{"class":166},[128,155946,253],{"class":138},[128,155948,1282],{"class":176},[128,155950,180],{"class":138},[128,155952,155953,155955,155957],{"class":130,"line":1287},[128,155954,977],{"class":138},[128,155956,270],{"class":134},[128,155958,982],{"class":138},[128,155960,155961],{"class":130,"line":1296},[128,155962,160],{"emptyLinePlaceholder":159},[128,155964,155965,155967,155969,155971,155973],{"class":130,"line":1301},[128,155966,209],{"class":134},[128,155968,546],{"class":138},[128,155970,997],{"class":134},[128,155972,1000],{"class":166},[128,155974,241],{"class":138},[128,155976,155977,155979,155981,155983],{"class":130,"line":1314},[128,155978,313],{"class":166},[128,155980,253],{"class":138},[128,155982,1012],{"class":176},[128,155984,180],{"class":138},[128,155986,155987],{"class":130,"line":1325},[128,155988,810],{"class":134},[128,155990,155991],{"class":130,"line":1330},[128,155992,160],{"emptyLinePlaceholder":159},[128,155994,155995],{"class":130,"line":1335},[128,155996,1338],{"class":138},[128,155998,155999],{"class":130,"line":1341},[128,156000,160],{"emptyLinePlaceholder":159},[128,156002,156003],{"class":130,"line":1346},[128,156004,160],{"emptyLinePlaceholder":159},[128,156006,156007,156009,156011],{"class":130,"line":1351},[128,156008,196],{"class":134},[128,156010,1356],{"class":199},[128,156012,1359],{"class":138},[128,156014,156015,156017],{"class":130,"line":1362},[128,156016,437],{"class":166},[128,156018,1367],{"class":138},[128,156020,156021,156023,156025,156027,156029,156031,156033,156035],{"class":130,"line":1370},[128,156022,1373],{"class":134},[128,156024,1376],{"class":176},[128,156026,1379],{"class":166},[128,156028,1382],{"class":138},[128,156030,1385],{"class":176},[128,156032,1388],{"class":138},[128,156034,1391],{"class":166},[128,156036,1394],{"class":176},[128,156038,156039,156041,156043,156045,156047,156049,156051,156053],{"class":130,"line":1397},[128,156040,1373],{"class":134},[128,156042,1376],{"class":176},[128,156044,1379],{"class":166},[128,156046,1382],{"class":138},[128,156048,1408],{"class":176},[128,156050,1388],{"class":138},[128,156052,1391],{"class":166},[128,156054,1394],{"class":176},[128,156056,156057,156059,156061,156063,156065,156067,156069,156071],{"class":130,"line":1417},[128,156058,1373],{"class":134},[128,156060,1376],{"class":176},[128,156062,1379],{"class":166},[128,156064,1382],{"class":138},[128,156066,1428],{"class":176},[128,156068,1388],{"class":138},[128,156070,1391],{"class":166},[128,156072,1394],{"class":176},[128,156074,156075,156077,156079,156081,156083,156085,156087,156089],{"class":130,"line":1437},[128,156076,1373],{"class":134},[128,156078,1376],{"class":176},[128,156080,1379],{"class":166},[128,156082,1382],{"class":138},[128,156084,1448],{"class":176},[128,156086,1388],{"class":138},[128,156088,1453],{"class":166},[128,156090,1394],{"class":176},[128,156092,156093],{"class":130,"line":1458},[128,156094,1461],{"class":138},[128,156096,156097],{"class":130,"line":1464},[128,156098,160],{"emptyLinePlaceholder":159},[128,156100,156101],{"class":130,"line":1469},[128,156102,160],{"emptyLinePlaceholder":159},[128,156104,156105,156107,156109],{"class":130,"line":1474},[128,156106,196],{"class":134},[128,156108,1479],{"class":199},[128,156110,348],{"class":138},[128,156112,156113,156115,156117],{"class":130,"line":1484},[128,156114,209],{"class":134},[128,156116,212],{"class":134},[128,156118,552],{"class":138},[128,156120,156121,156123,156125,156127],{"class":130,"line":1493},[128,156122,313],{"class":166},[128,156124,253],{"class":138},[128,156126,1500],{"class":176},[128,156128,180],{"class":138},[128,156130,156131],{"class":130,"line":1505},[128,156132,810],{"class":134},[128,156134,156135],{"class":130,"line":1510},[128,156136,160],{"emptyLinePlaceholder":159},[128,156138,156139,156141,156143,156145,156147,156149,156151,156153,156155,156157],{"class":130,"line":1515},[128,156140,437],{"class":166},[128,156142,253],{"class":138},[128,156144,1522],{"class":176},[128,156146,1525],{"class":166},[128,156148,1528],{"class":176},[128,156150,1525],{"class":166},[128,156152,1533],{"class":176},[128,156154,1525],{"class":166},[128,156156,1538],{"class":176},[128,156158,180],{"class":138},[128,156160,156161,156163,156165,156167],{"class":130,"line":1543},[128,156162,543],{"class":134},[128,156164,546],{"class":138},[128,156166,549],{"class":134},[128,156168,552],{"class":138},[128,156170,156171],{"class":130,"line":1554},[128,156172,1557],{"class":138},[128,156174,156175],{"class":130,"line":1560},[128,156176,160],{"emptyLinePlaceholder":159},[128,156178,156179],{"class":130,"line":1565},[128,156180,160],{"emptyLinePlaceholder":159},[128,156182,156183,156185,156187],{"class":130,"line":1570},[128,156184,196],{"class":134},[128,156186,1575],{"class":199},[128,156188,203],{"class":138},[128,156190,156191,156193,156195],{"class":130,"line":1580},[128,156192,1583],{"class":138},[128,156194,270],{"class":134},[128,156196,1588],{"class":138},[128,156198,156199],{"class":130,"line":1591},[128,156200,160],{"emptyLinePlaceholder":159},[128,156202,156203,156205,156207],{"class":130,"line":1596},[128,156204,617],{"class":134},[128,156206,620],{"class":166},[128,156208,241],{"class":138},[128,156210,156211],{"class":130,"line":1605},[128,156212,1608],{"class":138},[128,156214,156215,156217,156219,156221,156223,156225],{"class":130,"line":1611},[128,156216,1614],{"class":138},[128,156218,270],{"class":134},[128,156220,772],{"class":166},[128,156222,253],{"class":138},[128,156224,1623],{"class":176},[128,156226,180],{"class":138},[128,156228,156229],{"class":130,"line":1628},[128,156230,160],{"emptyLinePlaceholder":159},[128,156232,156233,156235,156237,156239,156241],{"class":130,"line":1633},[128,156234,558],{"class":134},[128,156236,1638],{"class":138},[128,156238,570],{"class":134},[128,156240,1643],{"class":176},[128,156242,241],{"class":138},[128,156244,156245],{"class":130,"line":1648},[128,156246,1651],{"class":138},[128,156248,156249,156251,156253,156255,156257],{"class":130,"line":1654},[128,156250,1657],{"class":134},[128,156252,1638],{"class":138},[128,156254,570],{"class":134},[128,156256,1664],{"class":176},[128,156258,241],{"class":138},[128,156260,156261],{"class":130,"line":1669},[128,156262,1672],{"class":138},[128,156264,156265,156267,156269,156271,156273],{"class":130,"line":1675},[128,156266,1657],{"class":134},[128,156268,1638],{"class":138},[128,156270,570],{"class":134},[128,156272,1684],{"class":176},[128,156274,241],{"class":138},[128,156276,156277],{"class":130,"line":1689},[128,156278,1692],{"class":138},[128,156280,156281,156283,156285,156287,156289],{"class":130,"line":1695},[128,156282,1657],{"class":134},[128,156284,1638],{"class":138},[128,156286,570],{"class":134},[128,156288,1704],{"class":176},[128,156290,241],{"class":138},[128,156292,156293],{"class":130,"line":1709},[128,156294,1712],{"class":138},[128,156296,156297,156299,156301,156303,156305],{"class":130,"line":1715},[128,156298,1657],{"class":134},[128,156300,1638],{"class":138},[128,156302,570],{"class":134},[128,156304,1724],{"class":176},[128,156306,241],{"class":138},[128,156308,156309],{"class":130,"line":1729},[128,156310,1732],{"class":138},[128,156312,156313,156315,156317,156319,156321],{"class":130,"line":1735},[128,156314,1657],{"class":134},[128,156316,1638],{"class":138},[128,156318,570],{"class":134},[128,156320,1744],{"class":176},[128,156322,241],{"class":138},[128,156324,156325,156327,156329,156331],{"class":130,"line":1749},[128,156326,663],{"class":166},[128,156328,253],{"class":138},[128,156330,1756],{"class":176},[128,156332,180],{"class":138},[128,156334,156335],{"class":130,"line":1761},[128,156336,1764],{"class":134},[128,156338,156339,156341],{"class":130,"line":1767},[128,156340,1770],{"class":134},[128,156342,241],{"class":138},[128,156344,156345,156347,156349,156351],{"class":130,"line":1775},[128,156346,663],{"class":166},[128,156348,253],{"class":138},[128,156350,1782],{"class":176},[128,156352,180],{"class":138},[128,156354,156355],{"class":130,"line":1787},[128,156356,160],{"emptyLinePlaceholder":159},[128,156358,156359],{"class":130,"line":1792},[128,156360,160],{"emptyLinePlaceholder":159},[128,156362,156363,156365,156367,156369,156371],{"class":130,"line":1797},[128,156364,1800],{"class":134},[128,156366,1803],{"class":166},[128,156368,1806],{"class":134},[128,156370,1809],{"class":176},[128,156372,241],{"class":138},[128,156374,156375],{"class":130,"line":1814},[128,156376,1817],{"class":138},[19,156378,1820],{},[26,156380,156381,156383,156385,156387,156389,156391],{},[29,156382,1825],{},[29,156384,1828],{},[29,156386,1831],{},[29,156388,1834],{},[29,156390,46],{},[29,156392,156393,1842],{},[114,156394,1841],{},[14,156396,1846],{"id":1845},[19,156398,1849],{},[26,156400,156401,156405],{},[29,156402,156403,1857],{},[114,156404,1856],{},[29,156406,156407,1863],{},[114,156408,1862],{},[19,156410,1866],{},[106,156412,156413],{"className":122,"code":1869,"language":124,"meta":112,"style":112},[114,156414,156415,156425,156429,156433,156437,156445,156451,156457,156463,156469,156473,156481,156487,156497,156507,156517,156527,156531,156535,156541,156549,156557,156565,156573,156581,156589],{"__ignoreMap":112},[128,156416,156417,156419,156421,156423],{"class":130,"line":131},[128,156418,145],{"class":134},[128,156420,1878],{"class":138},[128,156422,135],{"class":134},[128,156424,1883],{"class":138},[128,156426,156427],{"class":130,"line":142},[128,156428,160],{"emptyLinePlaceholder":159},[128,156430,156431],{"class":130,"line":156},[128,156432,160],{"emptyLinePlaceholder":159},[128,156434,156435],{"class":130,"line":163},[128,156436,1896],{"class":199},[128,156438,156439,156441,156443],{"class":130,"line":183},[128,156440,1901],{"class":134},[128,156442,1904],{"class":199},[128,156444,241],{"class":138},[128,156446,156447,156449],{"class":130,"line":188},[128,156448,1911],{"class":138},[128,156450,1914],{"class":166},[128,156452,156453,156455],{"class":130,"line":193},[128,156454,1919],{"class":138},[128,156456,1914],{"class":166},[128,156458,156459,156461],{"class":130,"line":206},[128,156460,1926],{"class":138},[128,156462,1929],{"class":166},[128,156464,156465,156467],{"class":130,"line":221},[128,156466,1934],{"class":138},[128,156468,1937],{"class":166},[128,156470,156471],{"class":130,"line":230},[128,156472,160],{"emptyLinePlaceholder":159},[128,156474,156475,156477,156479],{"class":130,"line":235},[128,156476,1946],{"class":134},[128,156478,1949],{"class":199},[128,156480,1952],{"class":138},[128,156482,156483,156485],{"class":130,"line":244},[128,156484,224],{"class":134},[128,156486,1959],{"class":138},[128,156488,156489,156491,156493,156495],{"class":130,"line":287},[128,156490,1964],{"class":176},[128,156492,1967],{"class":138},[128,156494,1970],{"class":166},[128,156496,1973],{"class":138},[128,156498,156499,156501,156503,156505],{"class":130,"line":301},[128,156500,1978],{"class":176},[128,156502,1967],{"class":138},[128,156504,1970],{"class":166},[128,156506,1985],{"class":138},[128,156508,156509,156511,156513,156515],{"class":130,"line":310},[128,156510,1990],{"class":176},[128,156512,1967],{"class":138},[128,156514,1970],{"class":166},[128,156516,1997],{"class":138},[128,156518,156519,156521,156523,156525],{"class":130,"line":323},[128,156520,2002],{"class":176},[128,156522,1967],{"class":138},[128,156524,1970],{"class":166},[128,156526,2009],{"class":138},[128,156528,156529],{"class":130,"line":330},[128,156530,2014],{"class":138},[128,156532,156533],{"class":130,"line":335},[128,156534,160],{"emptyLinePlaceholder":159},[128,156536,156537,156539],{"class":130,"line":340},[128,156538,2023],{"class":199},[128,156540,2026],{"class":166},[128,156542,156543,156545,156547],{"class":130,"line":351},[128,156544,1946],{"class":134},[128,156546,2033],{"class":199},[128,156548,2036],{"class":138},[128,156550,156551,156553,156555],{"class":130,"line":384},[128,156552,224],{"class":134},[128,156554,2043],{"class":166},[128,156556,1367],{"class":138},[128,156558,156559,156561,156563],{"class":130,"line":414},[128,156560,2050],{"class":138},[128,156562,564],{"class":176},[128,156564,2055],{"class":138},[128,156566,156567,156569,156571],{"class":130,"line":419},[128,156568,2050],{"class":138},[128,156570,1189],{"class":176},[128,156572,2055],{"class":138},[128,156574,156575,156577,156579],{"class":130,"line":424},[128,156576,2050],{"class":138},[128,156578,1204],{"class":176},[128,156580,2055],{"class":138},[128,156582,156583,156585,156587],{"class":130,"line":434},[128,156584,2050],{"class":138},[128,156586,1219],{"class":176},[128,156588,2055],{"class":138},[128,156590,156591],{"class":130,"line":447},[128,156592,2084],{"class":138},[19,156594,2087],{},[106,156596,156597],{"className":122,"code":2090,"language":124,"meta":112,"style":112},[114,156598,156599,156607,156615,156625,156629,156637,156649,156659,156665,156671,156675,156683,156691,156697,156703],{"__ignoreMap":112},[128,156600,156601,156603,156605],{"class":130,"line":131},[128,156602,1901],{"class":134},[128,156604,2099],{"class":199},[128,156606,241],{"class":138},[128,156608,156609,156611,156613],{"class":130,"line":142},[128,156610,1946],{"class":134},[128,156612,2108],{"class":166},[128,156614,1952],{"class":138},[128,156616,156617,156619,156621,156623],{"class":130,"line":156},[128,156618,2115],{"class":166},[128,156620,2118],{"class":138},[128,156622,270],{"class":134},[128,156624,227],{"class":138},[128,156626,156627],{"class":130,"line":163},[128,156628,160],{"emptyLinePlaceholder":159},[128,156630,156631,156633,156635],{"class":130,"line":183},[128,156632,1946],{"class":134},[128,156634,2133],{"class":199},[128,156636,2136],{"class":138},[128,156638,156639,156641,156643,156645,156647],{"class":130,"line":188},[128,156640,2141],{"class":134},[128,156642,546],{"class":138},[128,156644,549],{"class":134},[128,156646,2148],{"class":166},[128,156648,2151],{"class":138},[128,156650,156651,156653,156655,156657],{"class":130,"line":193},[128,156652,2156],{"class":134},[128,156654,2159],{"class":138},[128,156656,570],{"class":134},[128,156658,573],{"class":138},[128,156660,156661,156663],{"class":130,"line":206},[128,156662,2168],{"class":134},[128,156664,581],{"class":138},[128,156666,156667,156669],{"class":130,"line":221},[128,156668,224],{"class":134},[128,156670,590],{"class":166},[128,156672,156673],{"class":130,"line":230},[128,156674,160],{"emptyLinePlaceholder":159},[128,156676,156677,156679,156681],{"class":130,"line":235},[128,156678,1946],{"class":134},[128,156680,2187],{"class":199},[128,156682,2190],{"class":138},[128,156684,156685,156687,156689],{"class":130,"line":244},[128,156686,558],{"class":134},[128,156688,2148],{"class":166},[128,156690,2199],{"class":138},[128,156692,156693,156695],{"class":130,"line":287},[128,156694,290],{"class":134},[128,156696,2206],{"class":166},[128,156698,156699,156701],{"class":130,"line":301},[128,156700,2115],{"class":166},[128,156702,2213],{"class":138},[128,156704,156705,156707],{"class":130,"line":310},[128,156706,224],{"class":134},[128,156708,2220],{"class":166},[19,156710,2223],{},[14,156712,2227],{"id":2226},[72,156714,2231],{"id":2230},[106,156716,156717],{"className":122,"code":2234,"language":124,"meta":112,"style":112},[114,156718,156719,156727,156755,156783,156811,156839],{"__ignoreMap":112},[128,156720,156721,156723,156725],{"class":130,"line":131},[128,156722,2241],{"class":138},[128,156724,270],{"class":134},[128,156726,2246],{"class":138},[128,156728,156729,156731,156733,156735,156737,156739,156741,156743,156745,156747,156749,156751,156753],{"class":130,"line":142},[128,156730,2251],{"class":138},[128,156732,2254],{"class":176},[128,156734,1967],{"class":138},[128,156736,2259],{"class":176},[128,156738,258],{"class":138},[128,156740,2264],{"class":176},[128,156742,1967],{"class":138},[128,156744,2269],{"class":176},[128,156746,258],{"class":138},[128,156748,2274],{"class":176},[128,156750,1967],{"class":138},[128,156752,2279],{"class":166},[128,156754,2282],{"class":138},[128,156756,156757,156759,156761,156763,156765,156767,156769,156771,156773,156775,156777,156779,156781],{"class":130,"line":156},[128,156758,2251],{"class":138},[128,156760,2254],{"class":176},[128,156762,1967],{"class":138},[128,156764,2259],{"class":176},[128,156766,258],{"class":138},[128,156768,2264],{"class":176},[128,156770,1967],{"class":138},[128,156772,2301],{"class":176},[128,156774,258],{"class":138},[128,156776,2274],{"class":176},[128,156778,1967],{"class":138},[128,156780,2310],{"class":166},[128,156782,2282],{"class":138},[128,156784,156785,156787,156789,156791,156793,156795,156797,156799,156801,156803,156805,156807,156809],{"class":130,"line":163},[128,156786,2251],{"class":138},[128,156788,2254],{"class":176},[128,156790,1967],{"class":138},[128,156792,2323],{"class":176},[128,156794,258],{"class":138},[128,156796,2264],{"class":176},[128,156798,1967],{"class":138},[128,156800,2269],{"class":176},[128,156802,258],{"class":138},[128,156804,2274],{"class":176},[128,156806,1967],{"class":138},[128,156808,2340],{"class":166},[128,156810,2282],{"class":138},[128,156812,156813,156815,156817,156819,156821,156823,156825,156827,156829,156831,156833,156835,156837],{"class":130,"line":183},[128,156814,2251],{"class":138},[128,156816,2254],{"class":176},[128,156818,1967],{"class":138},[128,156820,2323],{"class":176},[128,156822,258],{"class":138},[128,156824,2264],{"class":176},[128,156826,1967],{"class":138},[128,156828,2301],{"class":176},[128,156830,258],{"class":138},[128,156832,2274],{"class":176},[128,156834,1967],{"class":138},[128,156836,2369],{"class":166},[128,156838,2282],{"class":138},[128,156840,156841],{"class":130,"line":188},[128,156842,2376],{"class":138},[72,156844,2380],{"id":2379},[106,156846,156847],{"className":122,"code":2383,"language":124,"meta":112,"style":112},[114,156848,156849,156857,156861,156871,156883,156895,156911,156915],{"__ignoreMap":112},[128,156850,156851,156853,156855],{"class":130,"line":131},[128,156852,2390],{"class":138},[128,156854,270],{"class":134},[128,156856,2395],{"class":138},[128,156858,156859],{"class":130,"line":142},[128,156860,160],{"emptyLinePlaceholder":159},[128,156862,156863,156865,156867,156869],{"class":130,"line":156},[128,156864,2404],{"class":134},[128,156866,2407],{"class":138},[128,156868,549],{"class":134},[128,156870,2412],{"class":138},[128,156872,156873,156875,156877,156879,156881],{"class":130,"line":163},[128,156874,2417],{"class":138},[128,156876,270],{"class":134},[128,156878,2422],{"class":138},[128,156880,2254],{"class":176},[128,156882,2376],{"class":138},[128,156884,156885,156887,156889,156891,156893],{"class":130,"line":183},[128,156886,2431],{"class":138},[128,156888,270],{"class":134},[128,156890,2422],{"class":138},[128,156892,2274],{"class":176},[128,156894,2376],{"class":138},[128,156896,156897,156899,156901,156903,156905,156907,156909],{"class":130,"line":188},[128,156898,2444],{"class":138},[128,156900,270],{"class":134},[128,156902,2449],{"class":138},[128,156904,2452],{"class":166},[128,156906,276],{"class":138},[128,156908,2457],{"class":134},[128,156910,2460],{"class":138},[128,156912,156913],{"class":130,"line":193},[128,156914,160],{"emptyLinePlaceholder":159},[128,156916,156917,156919],{"class":130,"line":206},[128,156918,2469],{"class":166},[128,156920,2472],{"class":138},[72,156922,2476],{"id":2475},[106,156924,156925],{"className":122,"code":2479,"language":124,"meta":112,"style":112},[114,156926,156927,156935,156939,156949,156961,156973,156989,156993],{"__ignoreMap":112},[128,156928,156929,156931,156933],{"class":130,"line":131},[128,156930,2486],{"class":138},[128,156932,270],{"class":134},[128,156934,2395],{"class":138},[128,156936,156937],{"class":130,"line":142},[128,156938,160],{"emptyLinePlaceholder":159},[128,156940,156941,156943,156945,156947],{"class":130,"line":156},[128,156942,2404],{"class":134},[128,156944,2407],{"class":138},[128,156946,549],{"class":134},[128,156948,2412],{"class":138},[128,156950,156951,156953,156955,156957,156959],{"class":130,"line":163},[128,156952,2509],{"class":138},[128,156954,270],{"class":134},[128,156956,2422],{"class":138},[128,156958,2264],{"class":176},[128,156960,2376],{"class":138},[128,156962,156963,156965,156967,156969,156971],{"class":130,"line":183},[128,156964,2431],{"class":138},[128,156966,270],{"class":134},[128,156968,2422],{"class":138},[128,156970,2274],{"class":176},[128,156972,2376],{"class":138},[128,156974,156975,156977,156979,156981,156983,156985,156987],{"class":130,"line":188},[128,156976,2534],{"class":138},[128,156978,270],{"class":134},[128,156980,2539],{"class":138},[128,156982,2452],{"class":166},[128,156984,276],{"class":138},[128,156986,2457],{"class":134},[128,156988,2460],{"class":138},[128,156990,156991],{"class":130,"line":193},[128,156992,160],{"emptyLinePlaceholder":159},[128,156994,156995,156997],{"class":130,"line":206},[128,156996,2469],{"class":166},[128,156998,2558],{"class":138},[72,157000,2562],{"id":2561},[106,157002,157003],{"className":122,"code":2565,"language":124,"meta":112,"style":112},[114,157004,157005,157025],{"__ignoreMap":112},[128,157006,157007,157009,157011,157013,157015,157017,157019,157021,157023],{"class":130,"line":131},[128,157008,2572],{"class":138},[128,157010,270],{"class":134},[128,157012,2577],{"class":166},[128,157014,2580],{"class":138},[128,157016,2583],{"class":266},[128,157018,2586],{"class":134},[128,157020,2589],{"class":138},[128,157022,2592],{"class":166},[128,157024,2595],{"class":138},[128,157026,157027,157029],{"class":130,"line":142},[128,157028,2469],{"class":166},[128,157030,2602],{"class":138},[14,157032,2606],{"id":2605},[106,157034,157035],{"className":122,"code":2609,"language":124,"meta":112,"style":112},[114,157036,157037,157051,157061,157065,157073,157083,157093,157103,157107,157111,157119,157127,157139,157143,157159,157175,157191,157195],{"__ignoreMap":112},[128,157038,157039,157041,157043,157045,157047,157049],{"class":130,"line":131},[128,157040,145],{"class":134},[128,157042,2618],{"class":138},[128,157044,135],{"class":134},[128,157046,2623],{"class":138},[128,157048,279],{"class":134},[128,157050,2628],{"class":138},[128,157052,157053,157055,157057,157059],{"class":130,"line":142},[128,157054,145],{"class":134},[128,157056,2635],{"class":138},[128,157058,135],{"class":134},[128,157060,2640],{"class":138},[128,157062,157063],{"class":130,"line":156},[128,157064,160],{"emptyLinePlaceholder":159},[128,157066,157067,157069,157071],{"class":130,"line":163},[128,157068,2486],{"class":138},[128,157070,270],{"class":134},[128,157072,1959],{"class":138},[128,157074,157075,157077,157079,157081],{"class":130,"line":183},[128,157076,2657],{"class":176},[128,157078,1967],{"class":138},[128,157080,2662],{"class":166},[128,157082,2665],{"class":138},[128,157084,157085,157087,157089,157091],{"class":130,"line":188},[128,157086,2670],{"class":176},[128,157088,1967],{"class":138},[128,157090,2675],{"class":166},[128,157092,2665],{"class":138},[128,157094,157095,157097,157099,157101],{"class":130,"line":193},[128,157096,2682],{"class":176},[128,157098,1967],{"class":138},[128,157100,2687],{"class":166},[128,157102,2665],{"class":138},[128,157104,157105],{"class":130,"line":206},[128,157106,2694],{"class":138},[128,157108,157109],{"class":130,"line":221},[128,157110,160],{"emptyLinePlaceholder":159},[128,157112,157113,157115,157117],{"class":130,"line":230},[128,157114,2703],{"class":138},[128,157116,270],{"class":134},[128,157118,2708],{"class":138},[128,157120,157121,157123,157125],{"class":130,"line":235},[128,157122,2713],{"class":138},[128,157124,2716],{"class":166},[128,157126,2719],{"class":138},[128,157128,157129,157131,157133,157135,157137],{"class":130,"line":244},[128,157130,2724],{"class":138},[128,157132,2727],{"class":176},[128,157134,258],{"class":138},[128,157136,2716],{"class":166},[128,157138,2734],{"class":138},[128,157140,157141],{"class":130,"line":287},[128,157142,2739],{"class":138},[128,157144,157145,157147,157149,157151,157153,157155,157157],{"class":130,"line":301},[128,157146,2744],{"class":266},[128,157148,270],{"class":134},[128,157150,2749],{"class":138},[128,157152,2752],{"class":266},[128,157154,270],{"class":134},[128,157156,2757],{"class":176},[128,157158,2760],{"class":138},[128,157160,157161,157163,157165,157167,157169,157171,157173],{"class":130,"line":310},[128,157162,2765],{"class":266},[128,157164,270],{"class":134},[128,157166,2770],{"class":138},[128,157168,2773],{"class":266},[128,157170,270],{"class":134},[128,157172,2778],{"class":176},[128,157174,2760],{"class":138},[128,157176,157177,157179,157181,157183,157185,157187,157189],{"class":130,"line":323},[128,157178,2785],{"class":266},[128,157180,270],{"class":134},[128,157182,2770],{"class":138},[128,157184,2773],{"class":266},[128,157186,270],{"class":134},[128,157188,2727],{"class":176},[128,157190,2760],{"class":138},[128,157192,157193],{"class":130,"line":330},[128,157194,180],{"class":138},[128,157196,157197,157199,157201],{"class":130,"line":335},[128,157198,2806],{"class":138},[128,157200,2809],{"class":176},[128,157202,180],{"class":138},[14,157204,2815],{"id":2814},[19,157206,2818],{},[106,157208,157209],{"className":122,"code":2821,"language":124,"meta":112,"style":112},[114,157210,157211,157225,157235,157239,157247,157269,157291,157313,157317,157321,157329,157333,157343,157351,157359,157371,157399,157403,157407],{"__ignoreMap":112},[128,157212,157213,157215,157217,157219,157221,157223],{"class":130,"line":131},[128,157214,145],{"class":134},[128,157216,2618],{"class":138},[128,157218,135],{"class":134},[128,157220,2623],{"class":138},[128,157222,279],{"class":134},[128,157224,2628],{"class":138},[128,157226,157227,157229,157231,157233],{"class":130,"line":142},[128,157228,145],{"class":134},[128,157230,2635],{"class":138},[128,157232,135],{"class":134},[128,157234,2848],{"class":138},[128,157236,157237],{"class":130,"line":156},[128,157238,160],{"emptyLinePlaceholder":159},[128,157240,157241,157243,157245],{"class":130,"line":163},[128,157242,2857],{"class":138},[128,157244,270],{"class":134},[128,157246,1959],{"class":138},[128,157248,157249,157251,157253,157255,157257,157259,157261,157263,157265,157267],{"class":130,"line":183},[128,157250,2866],{"class":176},[128,157252,2869],{"class":138},[128,157254,2269],{"class":176},[128,157256,1967],{"class":138},[128,157258,2279],{"class":166},[128,157260,258],{"class":138},[128,157262,2301],{"class":176},[128,157264,1967],{"class":138},[128,157266,2310],{"class":166},[128,157268,2282],{"class":138},[128,157270,157271,157273,157275,157277,157279,157281,157283,157285,157287,157289],{"class":130,"line":188},[128,157272,2890],{"class":176},[128,157274,2869],{"class":138},[128,157276,2269],{"class":176},[128,157278,1967],{"class":138},[128,157280,2340],{"class":166},[128,157282,258],{"class":138},[128,157284,2301],{"class":176},[128,157286,1967],{"class":138},[128,157288,2369],{"class":166},[128,157290,2282],{"class":138},[128,157292,157293,157295,157297,157299,157301,157303,157305,157307,157309,157311],{"class":130,"line":193},[128,157294,2913],{"class":176},[128,157296,2869],{"class":138},[128,157298,2269],{"class":176},[128,157300,1967],{"class":138},[128,157302,2922],{"class":166},[128,157304,258],{"class":138},[128,157306,2301],{"class":176},[128,157308,1967],{"class":138},[128,157310,2931],{"class":166},[128,157312,2282],{"class":138},[128,157314,157315],{"class":130,"line":206},[128,157316,2694],{"class":138},[128,157318,157319],{"class":130,"line":221},[128,157320,160],{"emptyLinePlaceholder":159},[128,157322,157323,157325,157327],{"class":130,"line":230},[128,157324,2946],{"class":138},[128,157326,270],{"class":134},[128,157328,2951],{"class":138},[128,157330,157331],{"class":130,"line":235},[128,157332,160],{"emptyLinePlaceholder":159},[128,157334,157335,157337,157339,157341],{"class":130,"line":244},[128,157336,2404],{"class":134},[128,157338,2962],{"class":138},[128,157340,549],{"class":134},[128,157342,2967],{"class":138},[128,157344,157345,157347,157349],{"class":130,"line":287},[128,157346,2972],{"class":138},[128,157348,270],{"class":134},[128,157350,2708],{"class":138},[128,157352,157353,157355,157357],{"class":130,"line":301},[128,157354,2981],{"class":138},[128,157356,2716],{"class":166},[128,157358,2986],{"class":138},[128,157360,157361,157363,157365,157367,157369],{"class":130,"line":310},[128,157362,2991],{"class":138},[128,157364,2727],{"class":176},[128,157366,258],{"class":138},[128,157368,2716],{"class":166},[128,157370,3000],{"class":138},[128,157372,157373,157375,157377,157379,157381,157383,157385,157387,157389,157391,157393,157395,157397],{"class":130,"line":323},[128,157374,3005],{"class":138},[128,157376,3008],{"class":266},[128,157378,270],{"class":134},[128,157380,2749],{"class":138},[128,157382,2752],{"class":266},[128,157384,270],{"class":134},[128,157386,3019],{"class":134},[128,157388,1376],{"class":176},[128,157390,1379],{"class":166},[128,157392,3026],{"class":138},[128,157394,1453],{"class":166},[128,157396,3031],{"class":176},[128,157398,3034],{"class":138},[128,157400,157401],{"class":130,"line":330},[128,157402,3039],{"class":138},[128,157404,157405],{"class":130,"line":335},[128,157406,160],{"emptyLinePlaceholder":159},[128,157408,157409,157411,157413],{"class":130,"line":340},[128,157410,3048],{"class":138},[128,157412,3051],{"class":176},[128,157414,180],{"class":138},[14,157416,3057],{"id":3056},[19,157418,3060],{},[106,157420,157421],{"className":122,"code":3063,"language":124,"meta":112,"style":112},[114,157422,157423,157437,157447,157451,157459,157471,157483,157495,157507,157511,157515,157523,157535,157539,157555,157571,157575],{"__ignoreMap":112},[128,157424,157425,157427,157429,157431,157433,157435],{"class":130,"line":131},[128,157426,145],{"class":134},[128,157428,2618],{"class":138},[128,157430,135],{"class":134},[128,157432,2623],{"class":138},[128,157434,279],{"class":134},[128,157436,2628],{"class":138},[128,157438,157439,157441,157443,157445],{"class":130,"line":142},[128,157440,145],{"class":134},[128,157442,2635],{"class":138},[128,157444,135],{"class":134},[128,157446,3090],{"class":138},[128,157448,157449],{"class":130,"line":156},[128,157450,160],{"emptyLinePlaceholder":159},[128,157452,157453,157455,157457],{"class":130,"line":163},[128,157454,2857],{"class":138},[128,157456,270],{"class":134},[128,157458,2246],{"class":138},[128,157460,157461,157463,157465,157467,157469],{"class":130,"line":183},[128,157462,3107],{"class":138},[128,157464,3110],{"class":176},[128,157466,258],{"class":138},[128,157468,3115],{"class":166},[128,157470,2760],{"class":138},[128,157472,157473,157475,157477,157479,157481],{"class":130,"line":188},[128,157474,3107],{"class":138},[128,157476,3124],{"class":176},[128,157478,258],{"class":138},[128,157480,3129],{"class":166},[128,157482,2760],{"class":138},[128,157484,157485,157487,157489,157491,157493],{"class":130,"line":193},[128,157486,3107],{"class":138},[128,157488,3138],{"class":176},[128,157490,258],{"class":138},[128,157492,3143],{"class":166},[128,157494,2760],{"class":138},[128,157496,157497,157499,157501,157503,157505],{"class":130,"line":206},[128,157498,3107],{"class":138},[128,157500,3152],{"class":176},[128,157502,258],{"class":138},[128,157504,3157],{"class":166},[128,157506,2760],{"class":138},[128,157508,157509],{"class":130,"line":221},[128,157510,2376],{"class":138},[128,157512,157513],{"class":130,"line":230},[128,157514,160],{"emptyLinePlaceholder":159},[128,157516,157517,157519,157521],{"class":130,"line":235},[128,157518,3172],{"class":138},[128,157520,270],{"class":134},[128,157522,3177],{"class":138},[128,157524,157525,157527,157529,157531,157533],{"class":130,"line":244},[128,157526,3182],{"class":138},[128,157528,2727],{"class":176},[128,157530,3187],{"class":138},[128,157532,3190],{"class":176},[128,157534,180],{"class":138},[128,157536,157537],{"class":130,"line":287},[128,157538,3197],{"class":138},[128,157540,157541,157543,157545,157547,157549,157551,157553],{"class":130,"line":301},[128,157542,2744],{"class":266},[128,157544,270],{"class":134},[128,157546,2749],{"class":138},[128,157548,2752],{"class":266},[128,157550,270],{"class":134},[128,157552,3212],{"class":176},[128,157554,2760],{"class":138},[128,157556,157557,157559,157561,157563,157565,157567,157569],{"class":130,"line":310},[128,157558,3219],{"class":266},[128,157560,270],{"class":134},[128,157562,3224],{"class":138},[128,157564,3227],{"class":266},[128,157566,270],{"class":134},[128,157568,3143],{"class":166},[128,157570,2760],{"class":138},[128,157572,157573],{"class":130,"line":323},[128,157574,180],{"class":138},[128,157576,157577,157579,157581],{"class":130,"line":330},[128,157578,3242],{"class":138},[128,157580,3245],{"class":176},[128,157582,180],{"class":138},[19,157584,3250],{},[14,157586,3254],{"id":3253},[19,157588,3257],{},[106,157590,157592],{"className":157591,"code":3261,"language":111,"meta":112},[109],[114,157593,3261],{"__ignoreMap":112},[19,157595,3266],{},[26,157597,157598,157602,157606,157610],{},[29,157599,157600,3274],{},[114,157601,3273],{},[29,157603,157604,3280],{},[114,157605,3279],{},[29,157607,157608,3286],{},[114,157609,3285],{},[29,157611,157612,3292],{},[114,157613,3291],{},[14,157615,3296],{"id":3295},[19,157617,3299],{},[26,157619,157620,157622,157624,157626],{},[29,157621,3304],{},[29,157623,3307],{},[29,157625,3310],{},[29,157627,3313],{},[19,157629,3316],{},[26,157631,157632,157636,157642,157648],{},[29,157633,3321,157634,1842],{},[114,157635,3324],{},[29,157637,3321,157638,3330,157640,1842],{},[114,157639,3329],{},[114,157641,2404],{},[29,157643,3335,157644,3330,157646,1842],{},[114,157645,3338],{},[114,157647,3341],{},[29,157649,3344],{},[19,157651,3347],{},[26,157653,157654,157656,157658,157660],{},[29,157655,3352],{},[29,157657,3355],{},[29,157659,3358],{},[29,157661,3361],{},[19,157663,3364],{},[26,157665,157666,157668,157670,157672,157674],{},[29,157667,3369],{},[29,157669,3372],{},[29,157671,3375],{},[29,157673,3378],{},[29,157675,3381],{},[19,157677,3384],{},[26,157679,157680,157682,157684,157686,157688],{},[29,157681,3389],{},[29,157683,3392],{},[29,157685,3395],{},[29,157687,3398],{},[29,157689,3401],{},[19,157691,3404],{},[26,157693,157694,157696,157698,157700,157702],{},[29,157695,3409],{},[29,157697,3412],{},[29,157699,3415],{},[29,157701,3418],{},[29,157703,3421],{},[14,157705,3425],{"id":3424},[26,157707,157708,157710,157712,157714,157716,157718,157720,157722],{},[29,157709,3430],{},[29,157711,3433],{},[29,157713,3436],{},[29,157715,3439],{},[29,157717,3442],{},[29,157719,3445],{},[29,157721,3448],{},[29,157723,3451],{},[14,157725,3455],{"id":3454},[26,157727,157728,157730,157732,157734,157736,157738,157740],{},[29,157729,3460],{},[29,157731,3463],{},[29,157733,3466],{},[29,157735,3469],{},[29,157737,3472],{},[29,157739,3475],{},[29,157741,3478],{},[14,157743,3482],{"id":3481},[19,157745,3485],{},[19,157747,3488],{},[106,157749,157751],{"className":157750,"code":3492,"language":111,"meta":112},[109],[114,157752,3492],{"__ignoreMap":112},[19,157754,3497],{},[26,157756,157757,157761,157767],{},[29,157758,3502,157759,1842],{},[114,157760,3505],{},[29,157762,3508,157763,3512,157765,3516],{},[114,157764,3511],{},[114,157766,3515],{},[29,157768,3519],{},[19,157770,3522],{},[106,157772,157774],{"className":157773,"code":3526,"language":111,"meta":112},[109],[114,157775,3526],{"__ignoreMap":112},[19,157777,3531,157778,3534],{},[114,157779,3273],{},[14,157781,3538],{"id":3537},[19,157783,3541],{},[26,157785,157786,157794,157802,157810,157818,157824,157832],{},[29,157787,3546,157788,3550,157790,3550,157792,1842],{},[114,157789,3549],{},[114,157791,3553],{},[114,157793,3556],{},[29,157795,3559,157796,3550,157798,3550,157800,1842],{},[114,157797,3562],{},[114,157799,3565],{},[114,157801,3568],{},[29,157803,3571,157804,3550,157806,3550,157808,1842],{},[114,157805,3574],{},[114,157807,3577],{},[114,157809,3580],{},[29,157811,3583,157812,3550,157814,3550,157816,1842],{},[114,157813,3586],{},[114,157815,3589],{},[114,157817,3592],{},[29,157819,3595,157820,3550,157822,3602],{},[114,157821,3598],{},[114,157823,3601],{},[29,157825,3605,157826,3550,157828,3550,157830,1842],{},[114,157827,3562],{},[114,157829,3565],{},[114,157831,3612],{},[29,157833,3615,157834,3550,157836,3550,157838,1842],{},[114,157835,3618],{},[114,157837,3621],{},[114,157839,3624],{},[19,157841,3627],{},[14,157843,3631],{"id":3630},[26,157845,157846,157848,157850,157852,157854,157856,157858,157860],{},[29,157847,3636],{},[29,157849,3639],{},[29,157851,3642],{},[29,157853,3645],{},[29,157855,3648],{},[29,157857,3651],{},[29,157859,3654],{},[29,157861,3657],{},[3659,157863,3661],{},{"title":112,"searchDepth":142,"depth":142,"links":157865},[157866,157867,157870,157871,157872,157878,157879,157880,157881,157882,157883,157884,157885,157886,157887],{"id":16,"depth":142,"text":17},{"id":69,"depth":142,"text":70,"children":157868},[157869],{"id":74,"depth":156,"text":75},{"id":118,"depth":142,"text":119},{"id":1845,"depth":142,"text":1846},{"id":2226,"depth":142,"text":2227,"children":157873},[157874,157875,157876,157877],{"id":2230,"depth":156,"text":2231},{"id":2379,"depth":156,"text":2380},{"id":2475,"depth":156,"text":2476},{"id":2561,"depth":156,"text":2562},{"id":2605,"depth":142,"text":2606},{"id":2814,"depth":142,"text":2815},{"id":3056,"depth":142,"text":3057},{"id":3253,"depth":142,"text":3254},{"id":3295,"depth":142,"text":3296},{"id":3424,"depth":142,"text":3425},{"id":3454,"depth":142,"text":3455},{"id":3481,"depth":142,"text":3482},{"id":3537,"depth":142,"text":3538},{"id":3630,"depth":142,"text":3631},{},{"title":5,"description":3686},{"id":157891,"title":157892,"body":157893,"description":3686,"extension":3687,"meta":160362,"navigation":159,"path":160363,"seo":160364,"stem":160365,"__hash__":160366},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":157894,"toc":160337},[157895,157898,157902,157905,157908,157928,157931,157954,157957,157960,157982,157985,158007,158011,158014,158054,158057,158178,158182,158185,158225,158228,158252,158255,158259,158262,158276,158309,158312,158347,158350,158373,158376,158409,158412,158414,158420,158495,158498,158504,158521,158561,158565,158568,158614,158616,158654,158657,158692,158695,158730,158733,158765,158768,158787,158791,158795,158908,158910,158985,158989,159035,159038,159064,159073,159077,159080,159143,159151,159179,159183,159223,159288,159292,159295,159334,159337,159382,159385,159446,159450,159477,159480,159508,159511,159515,159519,159584,159587,159625,159628,159660,159664,159763,159767,159770,159843,159846,159894,159898,159904,159944,159947,159994,159997,160046,160050,160052,160066,160068,160249,160253,160280,160300,160307,160311,160328,160334],[10,157896,157892],{"id":157897},"_2-基础语法变量与字符串",[14,157899,157901],{"id":157900},"_21-注释","2.1 注释",[19,157903,157904],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,157906,157907],{},"单行注释：",[106,157909,157911],{"className":122,"code":157910,"language":124,"meta":112,"style":112},"# 这是单行注释\nprint(\"hello\")\n",[114,157912,157913,157918],{"__ignoreMap":112},[128,157914,157915],{"class":130,"line":131},[128,157916,157917],{"class":3814},"# 这是单行注释\n",[128,157919,157920,157922,157924,157926],{"class":130,"line":142},[128,157921,2469],{"class":166},[128,157923,253],{"class":138},[128,157925,9402],{"class":176},[128,157927,180],{"class":138},[19,157929,157930],{},"多行说明常用三引号：",[106,157932,157934],{"className":122,"code":157933,"language":124,"meta":112,"style":112},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[114,157935,157936,157940,157945,157950],{"__ignoreMap":112},[128,157937,157938],{"class":130,"line":131},[128,157939,99067],{"class":176},[128,157941,157942],{"class":130,"line":142},[128,157943,157944],{"class":176},"这是多行说明。\n",[128,157946,157947],{"class":130,"line":156},[128,157948,157949],{"class":176},"常用于文件顶部说明、函数说明等。\n",[128,157951,157952],{"class":130,"line":163},[128,157953,99067],{"class":176},[19,157955,157956],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,157958,157959],{},"不好：",[106,157961,157963],{"className":122,"code":157962,"language":124,"meta":112,"style":112},"# age 加 1\nage = age + 1\n",[114,157964,157965,157970],{"__ignoreMap":112},[128,157966,157967],{"class":130,"line":131},[128,157968,157969],{"class":3814},"# age 加 1\n",[128,157971,157972,157974,157976,157978,157980],{"class":130,"line":142},[128,157973,149893],{"class":138},[128,157975,270],{"class":134},[128,157977,19227],{"class":138},[128,157979,2457],{"class":134},[128,157981,59079],{"class":166},[19,157983,157984],{},"较好：",[106,157986,157988],{"className":122,"code":157987,"language":124,"meta":112,"style":112},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[114,157989,157990,157995],{"__ignoreMap":112},[128,157991,157992],{"class":130,"line":131},[128,157993,157994],{"class":3814},"# 用户过完生日后，年龄增加一岁\n",[128,157996,157997,157999,158001,158003,158005],{"class":130,"line":142},[128,157998,149893],{"class":138},[128,158000,270],{"class":134},[128,158002,19227],{"class":138},[128,158004,2457],{"class":134},[128,158006,59079],{"class":166},[14,158008,158010],{"id":158009},"_22-字面量","2.2 字面量",[19,158012,158013],{},"字面量就是代码中直接写出来的数据。",[106,158015,158017],{"className":122,"code":158016,"language":124,"meta":112,"style":112},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[114,158018,158019,158026,158033,158040,158047],{"__ignoreMap":112},[128,158020,158021,158023],{"class":130,"line":131},[128,158022,4061],{"class":166},[128,158024,158025],{"class":3814},"          # 整数\n",[128,158027,158028,158030],{"class":130,"line":142},[128,158029,3806],{"class":166},[128,158031,158032],{"class":3814},"         # 小数\n",[128,158034,158035,158037],{"class":130,"line":156},[128,158036,9402],{"class":176},[128,158038,158039],{"class":3814},"      # 字符串\n",[128,158041,158042,158044],{"class":130,"line":163},[128,158043,34945],{"class":166},[128,158045,158046],{"class":3814},"         # 布尔值\n",[128,158048,158049,158051],{"class":130,"line":183},[128,158050,99055],{"class":166},[128,158052,158053],{"class":3814},"         # 空值\n",[19,158055,158056],{},"常见字面量类型：",[3891,158058,158059,158069],{},[3894,158060,158061],{},[3897,158062,158063,158065,158067],{},[3900,158064,27224],{},[3900,158066,30977],{},[3900,158068,29355],{},[3938,158070,158071,158082,158093,158104,158116,158128,158140,158153,158165],{},[3897,158072,158073,158075,158079],{},[3943,158074,3763],{},[3943,158076,158077],{},[114,158078,4061],{},[3943,158080,158081],{},"整数",[3897,158083,158084,158086,158090],{},[3943,158085,3798],{},[3943,158087,158088],{},[114,158089,3806],{},[3943,158091,158092],{},"浮点数",[3897,158094,158095,158097,158101],{},[3943,158096,4914],{},[3943,158098,158099],{},[114,158100,9402],{},[3943,158102,158103],{},"字符串",[3897,158105,158106,158108,158114],{},[3943,158107,4966],{},[3943,158109,158110,3550,158112],{},[114,158111,34945],{},[114,158113,399],{},[3943,158115,69393],{},[3897,158117,158118,158121,158125],{},[3943,158119,158120],{},"NoneType",[3943,158122,158123],{},[114,158124,99055],{},[3943,158126,158127],{},"空值",[3897,158129,158130,158132,158137],{},[3943,158131,2716],{},[3943,158133,158134],{},[114,158135,158136],{},"[1, 2, 3]",[3943,158138,158139],{},"列表",[3897,158141,158142,158145,158150],{},[3943,158143,158144],{},"tuple",[3943,158146,158147],{},[114,158148,158149],{},"(1, 2, 3)",[3943,158151,158152],{},"元组",[3897,158154,158155,158157,158162],{},[3943,158156,117903],{},[3943,158158,158159],{},[114,158160,158161],{},"{\"name\": \"张三\"}",[3943,158163,158164],{},"字典",[3897,158166,158167,158170,158175],{},[3943,158168,158169],{},"set",[3943,158171,158172],{},[114,158173,158174],{},"{1, 2, 3}",[3943,158176,158177],{},"集合",[14,158179,158181],{"id":158180},"_23-变量","2.3 变量",[19,158183,158184],{},"变量是保存数据的名字。",[106,158186,158188],{"className":122,"code":158187,"language":124,"meta":112,"style":112},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[114,158189,158190,158198,158206,158216],{"__ignoreMap":112},[128,158191,158192,158194,158196],{"class":130,"line":131},[128,158193,149883],{"class":138},[128,158195,270],{"class":134},[128,158197,152673],{"class":176},[128,158199,158200,158202,158204],{"class":130,"line":142},[128,158201,149893],{"class":138},[128,158203,270],{"class":134},[128,158205,149898],{"class":166},[128,158207,158208,158211,158213],{"class":130,"line":156},[128,158209,158210],{"class":138},"height ",[128,158212,270],{"class":134},[128,158214,158215],{"class":166}," 1.75\n",[128,158217,158218,158221,158223],{"class":130,"line":163},[128,158219,158220],{"class":138},"is_student ",[128,158222,270],{"class":134},[128,158224,2220],{"class":166},[19,158226,158227],{},"Python 的变量不需要提前声明类型：",[106,158229,158231],{"className":122,"code":158230,"language":124,"meta":112,"style":112},"score = 100\nscore = \"满分\"\n",[114,158232,158233,158243],{"__ignoreMap":112},[128,158234,158235,158238,158240],{"class":130,"line":131},[128,158236,158237],{"class":138},"score ",[128,158239,270],{"class":134},[128,158241,158242],{"class":166}," 100\n",[128,158244,158245,158247,158249],{"class":130,"line":142},[128,158246,158237],{"class":138},[128,158248,270],{"class":134},[128,158250,158251],{"class":176}," \"满分\"\n",[19,158253,158254],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,158256,158258],{"id":158257},"_24-变量命名规则","2.4 变量命名规则",[19,158260,158261],{},"硬性规则：",[26,158263,158264,158267,158270,158273],{},[29,158265,158266],{},"只能由字母、数字、下划线组成。",[29,158268,158269],{},"不能以数字开头。",[29,158271,158272],{},"不能使用 Python 关键字。",[29,158274,158275],{},"区分大小写。",[106,158277,158279],{"className":122,"code":158278,"language":124,"meta":112,"style":112},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[114,158280,158281,158290,158299],{"__ignoreMap":112},[128,158282,158283,158286,158288],{"class":130,"line":131},[128,158284,158285],{"class":138},"user_name ",[128,158287,270],{"class":134},[128,158289,149888],{"class":176},[128,158291,158292,158295,158297],{"class":130,"line":142},[128,158293,158294],{"class":138},"age2 ",[128,158296,270],{"class":134},[128,158298,149898],{"class":166},[128,158300,158301,158304,158306],{"class":130,"line":156},[128,158302,158303],{"class":138},"_token ",[128,158305,270],{"class":134},[128,158307,158308],{"class":176}," \"abc\"\n",[19,158310,158311],{},"错误写法：",[106,158313,158315],{"className":122,"code":158314,"language":124,"meta":112,"style":112},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[114,158316,158317,158326,158338],{"__ignoreMap":112},[128,158318,158319,158322,158324],{"class":130,"line":131},[128,158320,158321],{"class":80777},"2age",[128,158323,170],{"class":134},[128,158325,149898],{"class":166},[128,158327,158328,158330,158332,158334,158336],{"class":130,"line":142},[128,158329,134936],{"class":138},[128,158331,4281],{"class":134},[128,158333,149883],{"class":138},[128,158335,270],{"class":134},[128,158337,149888],{"class":176},[128,158339,158340,158342,158344],{"class":130,"line":156},[128,158341,1901],{"class":134},[128,158343,170],{"class":134},[128,158345,158346],{"class":176}," \"一班\"\n",[19,158348,158349],{},"查看关键字：",[106,158351,158353],{"className":122,"code":158352,"language":124,"meta":112,"style":112},"import keyword\n\nprint(keyword.kwlist)\n",[114,158354,158355,158362,158366],{"__ignoreMap":112},[128,158356,158357,158359],{"class":130,"line":131},[128,158358,135],{"class":134},[128,158360,158361],{"class":138}," keyword\n",[128,158363,158364],{"class":130,"line":142},[128,158365,160],{"emptyLinePlaceholder":159},[128,158367,158368,158370],{"class":130,"line":156},[128,158369,2469],{"class":166},[128,158371,158372],{"class":138},"(keyword.kwlist)\n",[19,158374,158375],{},"推荐命名风格：",[106,158377,158379],{"className":122,"code":158378,"language":124,"meta":112,"style":112},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[114,158380,158381,158390,158400],{"__ignoreMap":112},[128,158382,158383,158386,158388],{"class":130,"line":131},[128,158384,158385],{"class":138},"student_name ",[128,158387,270],{"class":134},[128,158389,152673],{"class":176},[128,158391,158392,158395,158397],{"class":130,"line":142},[128,158393,158394],{"class":138},"total_price ",[128,158396,270],{"class":134},[128,158398,158399],{"class":166}," 99.8\n",[128,158401,158402,158405,158407],{"class":130,"line":156},[128,158403,158404],{"class":138},"is_finished ",[128,158406,270],{"class":134},[128,158408,2206],{"class":166},[19,158410,158411],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,158413,54117],{"id":54116},[19,158415,107729,158416,158419],{},[114,158417,158418],{},"type()"," 查看数据类型：",[106,158421,158423],{"className":122,"code":158422,"language":124,"meta":112,"style":112},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[114,158424,158425,158439,158453,158467,158481],{"__ignoreMap":112},[128,158426,158427,158429,158431,158433,158435,158437],{"class":130,"line":131},[128,158428,2469],{"class":166},[128,158430,253],{"class":138},[128,158432,106470],{"class":166},[128,158434,253],{"class":138},[128,158436,4061],{"class":166},[128,158438,3034],{"class":138},[128,158440,158441,158443,158445,158447,158449,158451],{"class":130,"line":142},[128,158442,2469],{"class":166},[128,158444,253],{"class":138},[128,158446,106470],{"class":166},[128,158448,253],{"class":138},[128,158450,3806],{"class":166},[128,158452,3034],{"class":138},[128,158454,158455,158457,158459,158461,158463,158465],{"class":130,"line":156},[128,158456,2469],{"class":166},[128,158458,253],{"class":138},[128,158460,106470],{"class":166},[128,158462,253],{"class":138},[128,158464,9402],{"class":176},[128,158466,3034],{"class":138},[128,158468,158469,158471,158473,158475,158477,158479],{"class":130,"line":163},[128,158470,2469],{"class":166},[128,158472,253],{"class":138},[128,158474,106470],{"class":166},[128,158476,253],{"class":138},[128,158478,34945],{"class":166},[128,158480,3034],{"class":138},[128,158482,158483,158485,158487,158489,158491,158493],{"class":130,"line":183},[128,158484,2469],{"class":166},[128,158486,253],{"class":138},[128,158488,106470],{"class":166},[128,158490,253],{"class":138},[128,158492,99055],{"class":166},[128,158494,3034],{"class":138},[19,158496,158497],{},"输出类似：",[106,158499,158502],{"className":158500,"code":158501,"language":111,"meta":112},[109],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[114,158503,158501],{"__ignoreMap":112},[19,158505,12571,158506,110646,158508,158510,158511,158513,158514,24987,158516,158513,158518,158520],{},[114,158507,4966],{},[114,158509,3763],{}," 的子类，",[114,158512,34945],{}," 可以当作 ",[114,158515,2592],{},[114,158517,399],{},[114,158519,2452],{},"，但业务代码中不要滥用。",[106,158522,158524],{"className":122,"code":158523,"language":124,"meta":112,"style":112},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[114,158525,158526,158544],{"__ignoreMap":112},[128,158527,158528,158530,158532,158534,158536,158538,158541],{"class":130,"line":131},[128,158529,2469],{"class":166},[128,158531,253],{"class":138},[128,158533,34945],{"class":166},[128,158535,48951],{"class":134},[128,158537,28605],{"class":166},[128,158539,158540],{"class":138},")   ",[128,158542,158543],{"class":3814},"# 2\n",[128,158545,158546,158548,158550,158552,158554,158556,158558],{"class":130,"line":142},[128,158547,2469],{"class":166},[128,158549,253],{"class":138},[128,158551,399],{"class":166},[128,158553,48951],{"class":134},[128,158555,28605],{"class":166},[128,158557,49193],{"class":138},[128,158559,158560],{"class":3814},"# 1\n",[14,158562,158564],{"id":158563},"_26-类型转换","2.6 类型转换",[19,158566,158567],{},"常用转换函数：",[106,158569,158571],{"className":122,"code":158570,"language":124,"meta":112,"style":112},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[114,158572,158573,158583,158594,158604],{"__ignoreMap":112},[128,158574,158575,158577,158579,158581],{"class":130,"line":131},[128,158576,3763],{"class":166},[128,158578,253],{"class":138},[128,158580,57697],{"class":176},[128,158582,180],{"class":138},[128,158584,158585,158587,158589,158592],{"class":130,"line":142},[128,158586,3798],{"class":166},[128,158588,253],{"class":138},[128,158590,158591],{"class":176},"\"3.14\"",[128,158593,180],{"class":138},[128,158595,158596,158598,158600,158602],{"class":130,"line":156},[128,158597,4914],{"class":166},[128,158599,253],{"class":138},[128,158601,4061],{"class":166},[128,158603,180],{"class":138},[128,158605,158606,158608,158610,158612],{"class":130,"line":163},[128,158607,4966],{"class":166},[128,158609,253],{"class":138},[128,158611,2592],{"class":166},[128,158613,180],{"class":138},[19,158615,3488],{},[106,158617,158619],{"className":122,"code":158618,"language":124,"meta":112,"style":112},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[114,158620,158621,158630,158641],{"__ignoreMap":112},[128,158622,158623,158625,158627],{"class":130,"line":131},[128,158624,149893],{"class":138},[128,158626,270],{"class":134},[128,158628,158629],{"class":176}," \"18\"\n",[128,158631,158632,158634,158636,158638],{"class":130,"line":142},[128,158633,149893],{"class":138},[128,158635,270],{"class":134},[128,158637,638],{"class":166},[128,158639,158640],{"class":138},"(age)\n",[128,158642,158643,158645,158648,158650,158652],{"class":130,"line":156},[128,158644,2469],{"class":166},[128,158646,158647],{"class":138},"(age ",[128,158649,2457],{"class":134},[128,158651,28605],{"class":166},[128,158653,180],{"class":138},[19,158655,158656],{},"输入得到的内容永远是字符串：",[106,158658,158660],{"className":122,"code":158659,"language":124,"meta":112,"style":112},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[114,158661,158662,158678],{"__ignoreMap":112},[128,158663,158664,158667,158669,158671,158673,158676],{"class":130,"line":131},[128,158665,158666],{"class":138},"num ",[128,158668,270],{"class":134},[128,158670,772],{"class":166},[128,158672,253],{"class":138},[128,158674,158675],{"class":176},"\"请输入数字:\"",[128,158677,180],{"class":138},[128,158679,158680,158682,158684,158686,158689],{"class":130,"line":142},[128,158681,2469],{"class":166},[128,158683,253],{"class":138},[128,158685,106470],{"class":166},[128,158687,158688],{"class":138},"(num))  ",[128,158690,158691],{"class":3814},"# str\n",[19,158693,158694],{},"如果要做数学运算，必须转换：",[106,158696,158698],{"className":122,"code":158697,"language":124,"meta":112,"style":112},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[114,158699,158700,158718],{"__ignoreMap":112},[128,158701,158702,158704,158706,158708,158710,158712,158714,158716],{"class":130,"line":131},[128,158703,158666],{"class":138},[128,158705,270],{"class":134},[128,158707,638],{"class":166},[128,158709,253],{"class":138},[128,158711,643],{"class":166},[128,158713,253],{"class":138},[128,158715,158675],{"class":176},[128,158717,3034],{"class":138},[128,158719,158720,158722,158724,158726,158728],{"class":130,"line":142},[128,158721,2469],{"class":166},[128,158723,49004],{"class":138},[128,158725,2457],{"class":134},[128,158727,5625],{"class":166},[128,158729,180],{"class":138},[19,158731,158732],{},"常见错误：",[106,158734,158736],{"className":122,"code":158735,"language":124,"meta":112,"style":112},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[114,158737,158738,158751],{"__ignoreMap":112},[128,158739,158740,158742,158744,158746,158748],{"class":130,"line":131},[128,158741,3763],{"class":166},[128,158743,253],{"class":138},[128,158745,158591],{"class":176},[128,158747,158540],{"class":138},[128,158749,158750],{"class":3814},"# 错误\n",[128,158752,158753,158755,158757,158760,158763],{"class":130,"line":142},[128,158754,3763],{"class":166},[128,158756,253],{"class":138},[128,158758,158759],{"class":176},"\"abc\"",[128,158761,158762],{"class":138},")    ",[128,158764,158750],{"class":3814},[19,158766,158767],{},"正确写法：",[106,158769,158771],{"className":122,"code":158770,"language":124,"meta":112,"style":112},"num = float(\"3.14\")\n",[114,158772,158773],{"__ignoreMap":112},[128,158774,158775,158777,158779,158781,158783,158785],{"class":130,"line":131},[128,158776,158666],{"class":138},[128,158778,270],{"class":134},[128,158780,714],{"class":166},[128,158782,253],{"class":138},[128,158784,158591],{"class":176},[128,158786,180],{"class":138},[14,158788,158790],{"id":158789},"_27-运算符","2.7 运算符",[72,158792,158794],{"id":158793},"_271-算术运算符","2.7.1 算术运算符",[3891,158796,158797,158808],{},[3894,158798,158799],{},[3897,158800,158801,158804,158806],{},[3900,158802,158803],{},"运算符",[3900,158805,29355],{},[3900,158807,30977],{},[3938,158809,158810,158824,158838,158852,158866,158880,158894],{},[3897,158811,158812,158816,158819],{},[3943,158813,158814],{},[114,158815,2457],{},[3943,158817,158818],{},"加法",[3943,158820,158821],{},[114,158822,158823],{},"1 + 2",[3897,158825,158826,158830,158833],{},[3943,158827,158828],{},[114,158829,4281],{},[3943,158831,158832],{},"减法",[3943,158834,158835],{},[114,158836,158837],{},"5 - 3",[3897,158839,158840,158844,158847],{},[3943,158841,158842],{},[114,158843,4205],{},[3943,158845,158846],{},"乘法",[3943,158848,158849],{},[114,158850,158851],{},"2 * 3",[3897,158853,158854,158858,158861],{},[3943,158855,158856],{},[114,158857,4333],{},[3943,158859,158860],{},"除法，结果是浮点数",[3943,158862,158863],{},[114,158864,158865],{},"5 \u002F 2",[3897,158867,158868,158872,158875],{},[3943,158869,158870],{},[114,158871,36727],{},[3943,158873,158874],{},"整除",[3943,158876,158877],{},[114,158878,158879],{},"5 \u002F\u002F 2",[3897,158881,158882,158886,158889],{},[3943,158883,158884],{},[114,158885,4078],{},[3943,158887,158888],{},"取余",[3943,158890,158891],{},[114,158892,158893],{},"5 % 2",[3897,158895,158896,158900,158903],{},[3943,158897,158898],{},[114,158899,14188],{},[3943,158901,158902],{},"幂运算",[3943,158904,158905],{},[114,158906,158907],{},"2 ** 3",[19,158909,3488],{},[106,158911,158913],{"className":122,"code":158912,"language":124,"meta":112,"style":112},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[114,158914,158915,158933,158950,158967],{"__ignoreMap":112},[128,158916,158917,158919,158921,158923,158926,158928,158930],{"class":130,"line":131},[128,158918,2469],{"class":166},[128,158920,253],{"class":138},[128,158922,4069],{"class":166},[128,158924,158925],{"class":134}," \u002F",[128,158927,18277],{"class":166},[128,158929,158540],{"class":138},[128,158931,158932],{"class":3814},"# 2.5\n",[128,158934,158935,158937,158939,158941,158944,158946,158948],{"class":130,"line":142},[128,158936,2469],{"class":166},[128,158938,253],{"class":138},[128,158940,4069],{"class":166},[128,158942,158943],{"class":134}," \u002F\u002F",[128,158945,18277],{"class":166},[128,158947,49193],{"class":138},[128,158949,158543],{"class":3814},[128,158951,158952,158954,158956,158958,158961,158963,158965],{"class":130,"line":156},[128,158953,2469],{"class":166},[128,158955,253],{"class":138},[128,158957,4069],{"class":166},[128,158959,158960],{"class":134}," %",[128,158962,18277],{"class":166},[128,158964,158540],{"class":138},[128,158966,158560],{"class":3814},[128,158968,158969,158971,158973,158975,158978,158980,158982],{"class":130,"line":163},[128,158970,2469],{"class":166},[128,158972,253],{"class":138},[128,158974,409],{"class":166},[128,158976,158977],{"class":134}," **",[128,158979,81444],{"class":166},[128,158981,49193],{"class":138},[128,158983,158984],{"class":3814},"# 8\n",[72,158986,158988],{"id":158987},"_272-赋值运算符","2.7.2 赋值运算符",[106,158990,158992],{"className":122,"code":158991,"language":124,"meta":112,"style":112},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[114,158993,158994,159002,159010,159018,159026],{"__ignoreMap":112},[128,158995,158996,158998,159000],{"class":130,"line":131},[128,158997,158666],{"class":138},[128,158999,270],{"class":134},[128,159001,61808],{"class":166},[128,159003,159004,159006,159008],{"class":130,"line":142},[128,159005,158666],{"class":138},[128,159007,13023],{"class":134},[128,159009,57808],{"class":166},[128,159011,159012,159014,159016],{"class":130,"line":156},[128,159013,158666],{"class":138},[128,159015,153569],{"class":134},[128,159017,51108],{"class":166},[128,159019,159020,159022,159024],{"class":130,"line":163},[128,159021,158666],{"class":138},[128,159023,140500],{"class":134},[128,159025,123392],{"class":166},[128,159027,159028,159030,159033],{"class":130,"line":183},[128,159029,158666],{"class":138},[128,159031,159032],{"class":134},"\u002F=",[128,159034,51108],{"class":166},[19,159036,159037],{},"等价关系：",[106,159039,159041],{"className":122,"code":159040,"language":124,"meta":112,"style":112},"num += 1\nnum = num + 1\n",[114,159042,159043,159051],{"__ignoreMap":112},[128,159044,159045,159047,159049],{"class":130,"line":131},[128,159046,158666],{"class":138},[128,159048,13023],{"class":134},[128,159050,59079],{"class":166},[128,159052,159053,159055,159057,159060,159062],{"class":130,"line":142},[128,159054,158666],{"class":138},[128,159056,270],{"class":134},[128,159058,159059],{"class":138}," num ",[128,159061,2457],{"class":134},[128,159063,59079],{"class":166},[19,159065,159066,159067,3330,159070,1842],{},"Python 没有 ",[114,159068,159069],{},"num++",[114,159071,159072],{},"num--",[72,159074,159076],{"id":159075},"_273-比较运算符","2.7.3 比较运算符",[19,159078,159079],{},"比较运算结果是布尔值。",[106,159081,159083],{"className":122,"code":159082,"language":124,"meta":112,"style":112},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[114,159084,159085,159099,159114,159128],{"__ignoreMap":112},[128,159086,159087,159089,159091,159093,159095,159097],{"class":130,"line":131},[128,159088,2469],{"class":166},[128,159090,253],{"class":138},[128,159092,4196],{"class":166},[128,159094,29707],{"class":134},[128,159096,5734],{"class":166},[128,159098,180],{"class":138},[128,159100,159101,159103,159105,159107,159110,159112],{"class":130,"line":142},[128,159102,2469],{"class":166},[128,159104,253],{"class":138},[128,159106,4196],{"class":166},[128,159108,159109],{"class":134}," >=",[128,159111,5625],{"class":166},[128,159113,180],{"class":138},[128,159115,159116,159118,159120,159122,159124,159126],{"class":130,"line":156},[128,159117,2469],{"class":166},[128,159119,253],{"class":138},[128,159121,4196],{"class":166},[128,159123,1806],{"class":134},[128,159125,5669],{"class":166},[128,159127,180],{"class":138},[128,159129,159130,159132,159134,159136,159139,159141],{"class":130,"line":163},[128,159131,2469],{"class":166},[128,159133,253],{"class":138},[128,159135,4196],{"class":166},[128,159137,159138],{"class":134}," !=",[128,159140,5669],{"class":166},[128,159142,180],{"class":138},[19,159144,159145,159146,159148,159149,1842],{},"注意：判断相等用 ",[114,159147,570],{},"，赋值用 ",[114,159150,270],{},[106,159152,159154],{"className":122,"code":159153,"language":124,"meta":112,"style":112},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[114,159155,159156,159168],{"__ignoreMap":112},[128,159157,159158,159160,159162,159165],{"class":130,"line":131},[128,159159,149893],{"class":138},[128,159161,270],{"class":134},[128,159163,159164],{"class":166}," 18",[128,159166,159167],{"class":3814},"       # 赋值\n",[128,159169,159170,159172,159174,159176],{"class":130,"line":142},[128,159171,149893],{"class":138},[128,159173,570],{"class":134},[128,159175,159164],{"class":166},[128,159177,159178],{"class":3814},"      # 判断是否相等\n",[72,159180,159182],{"id":159181},"_274-逻辑运算符","2.7.4 逻辑运算符",[3891,159184,159185,159193],{},[3894,159186,159187],{},[3897,159188,159189,159191],{},[3900,159190,158803],{},[3900,159192,29355],{},[3938,159194,159195,159204,159213],{},[3897,159196,159197,159201],{},[3943,159198,159199],{},[114,159200,33942],{},[3943,159202,159203],{},"并且",[3897,159205,159206,159210],{},[3943,159207,159208],{},[114,159209,118447],{},[3943,159211,159212],{},"或者",[3897,159214,159215,159220],{},[3943,159216,159217],{},[114,159218,159219],{},"not",[3943,159221,159222],{},"取反",[106,159224,159226],{"className":122,"code":159225,"language":124,"meta":112,"style":112},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[114,159227,159228,159236,159245,159249,159264,159278],{"__ignoreMap":112},[128,159229,159230,159232,159234],{"class":130,"line":131},[128,159231,149893],{"class":138},[128,159233,270],{"class":134},[128,159235,91435],{"class":166},[128,159237,159238,159241,159243],{"class":130,"line":142},[128,159239,159240],{"class":138},"has_ticket ",[128,159242,270],{"class":134},[128,159244,2220],{"class":166},[128,159246,159247],{"class":130,"line":156},[128,159248,160],{"emptyLinePlaceholder":159},[128,159250,159251,159253,159255,159257,159259,159261],{"class":130,"line":163},[128,159252,2469],{"class":166},[128,159254,158647],{"class":138},[128,159256,5308],{"class":134},[128,159258,159164],{"class":166},[128,159260,123785],{"class":134},[128,159262,159263],{"class":138}," has_ticket)\n",[128,159265,159266,159268,159270,159272,159274,159276],{"class":130,"line":183},[128,159267,2469],{"class":166},[128,159269,158647],{"class":138},[128,159271,4657],{"class":134},[128,159273,159164],{"class":166},[128,159275,117558],{"class":134},[128,159277,159263],{"class":138},[128,159279,159280,159282,159284,159286],{"class":130,"line":188},[128,159281,2469],{"class":166},[128,159283,253],{"class":138},[128,159285,159219],{"class":134},[128,159287,159263],{"class":138},[14,159289,159291],{"id":159290},"_28-字符串定义","2.8 字符串定义",[19,159293,159294],{},"三种常见写法：",[106,159296,159298],{"className":122,"code":159297,"language":124,"meta":112,"style":112},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[114,159299,159300,159310,159319,159329],{"__ignoreMap":112},[128,159301,159302,159305,159307],{"class":130,"line":131},[128,159303,159304],{"class":138},"name1 ",[128,159306,270],{"class":134},[128,159308,159309],{"class":176}," '小明'\n",[128,159311,159312,159315,159317],{"class":130,"line":142},[128,159313,159314],{"class":138},"name2 ",[128,159316,270],{"class":134},[128,159318,152673],{"class":176},[128,159320,159321,159324,159326],{"class":130,"line":156},[128,159322,159323],{"class":138},"text ",[128,159325,270],{"class":134},[128,159327,159328],{"class":176}," \"\"\"这是多行字符串\n",[128,159330,159331],{"class":130,"line":163},[128,159332,159333],{"class":176},"可以换行\"\"\"\n",[19,159335,159336],{},"字符串中包含引号：",[106,159338,159340],{"className":122,"code":159339,"language":124,"meta":112,"style":112},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[114,159341,159342,159352,159362],{"__ignoreMap":112},[128,159343,159344,159347,159349],{"class":130,"line":131},[128,159345,159346],{"class":138},"msg ",[128,159348,270],{"class":134},[128,159350,159351],{"class":176}," \"他说:'你好'\"\n",[128,159353,159354,159357,159359],{"class":130,"line":142},[128,159355,159356],{"class":138},"msg2 ",[128,159358,270],{"class":134},[128,159360,159361],{"class":176}," '他说:\"你好\"'\n",[128,159363,159364,159367,159369,159372,159375,159378,159380],{"class":130,"line":156},[128,159365,159366],{"class":138},"msg3 ",[128,159368,270],{"class":134},[128,159370,159371],{"class":176}," \"他说:",[128,159373,159374],{"class":166},"\\\"",[128,159376,159377],{"class":176},"你好",[128,159379,159374],{"class":166},[128,159381,1394],{"class":176},[19,159383,159384],{},"常见转义字符：",[3891,159386,159387,159396],{},[3894,159388,159389],{},[3897,159390,159391,159394],{},[3900,159392,159393],{},"写法",[3900,159395,104068],{},[3938,159397,159398,159408,159417,159427,159436],{},[3897,159399,159400,159405],{},[3943,159401,159402],{},[114,159403,159404],{},"\\n",[3943,159406,159407],{},"换行",[3897,159409,159410,159414],{},[3943,159411,159412],{},[114,159413,1525],{},[3943,159415,159416],{},"制表符",[3897,159418,159419,159424],{},[3943,159420,159421],{},[114,159422,159423],{},"\\\\",[3943,159425,159426],{},"反斜杠",[3897,159428,159429,159433],{},[3943,159430,159431],{},[114,159432,159374],{},[3943,159434,159435],{},"双引号",[3897,159437,159438,159443],{},[3943,159439,159440],{},[114,159441,159442],{},"\\'",[3943,159444,159445],{},"单引号",[14,159447,159449],{"id":159448},"_29-字符串拼接","2.9 字符串拼接",[106,159451,159453],{"className":122,"code":159452,"language":124,"meta":112,"style":112},"name = \"小明\"\nprint(\"你好，\" + name)\n",[114,159454,159455,159463],{"__ignoreMap":112},[128,159456,159457,159459,159461],{"class":130,"line":131},[128,159458,149883],{"class":138},[128,159460,270],{"class":134},[128,159462,152673],{"class":176},[128,159464,159465,159467,159469,159472,159474],{"class":130,"line":142},[128,159466,2469],{"class":166},[128,159468,253],{"class":138},[128,159470,159471],{"class":176},"\"你好，\"",[128,159473,48951],{"class":134},[128,159475,159476],{"class":138}," name)\n",[19,159478,159479],{},"字符串只能和字符串拼接：",[106,159481,159483],{"className":122,"code":159482,"language":124,"meta":112,"style":112},"age = 18\nprint(\"年龄:\" + str(age))\n",[114,159484,159485,159493],{"__ignoreMap":112},[128,159486,159487,159489,159491],{"class":130,"line":131},[128,159488,149893],{"class":138},[128,159490,270],{"class":134},[128,159492,149898],{"class":166},[128,159494,159495,159497,159499,159501,159503,159505],{"class":130,"line":142},[128,159496,2469],{"class":166},[128,159498,253],{"class":138},[128,159500,149864],{"class":176},[128,159502,48951],{"class":134},[128,159504,77294],{"class":166},[128,159506,159507],{"class":138},"(age))\n",[19,159509,159510],{},"更推荐使用格式化字符串。",[14,159512,159514],{"id":159513},"_210-字符串格式化","2.10 字符串格式化",[72,159516,159518],{"id":159517},"_2101-百分号格式化","2.10.1 百分号格式化",[106,159520,159522],{"className":122,"code":159521,"language":124,"meta":112,"style":112},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[114,159523,159524,159532,159540,159549,159553],{"__ignoreMap":112},[128,159525,159526,159528,159530],{"class":130,"line":131},[128,159527,149883],{"class":138},[128,159529,270],{"class":134},[128,159531,152673],{"class":176},[128,159533,159534,159536,159538],{"class":130,"line":142},[128,159535,149893],{"class":138},[128,159537,270],{"class":134},[128,159539,149898],{"class":166},[128,159541,159542,159544,159546],{"class":130,"line":156},[128,159543,158237],{"class":138},[128,159545,270],{"class":134},[128,159547,159548],{"class":166}," 95.5\n",[128,159550,159551],{"class":130,"line":163},[128,159552,160],{"emptyLinePlaceholder":159},[128,159554,159555,159557,159559,159562,159565,159568,159571,159574,159577,159579,159581],{"class":130,"line":183},[128,159556,2469],{"class":166},[128,159558,253],{"class":138},[128,159560,159561],{"class":176},"\"姓名:",[128,159563,159564],{"class":166},"%s",[128,159566,159567],{"class":176}," 年龄:",[128,159569,159570],{"class":166},"%d",[128,159572,159573],{"class":176}," 分数:",[128,159575,159576],{"class":166},"%.1f",[128,159578,1376],{"class":176},[128,159580,158960],{"class":134},[128,159582,159583],{"class":138}," (name, age, score))\n",[19,159585,159586],{},"常用占位符：",[3891,159588,159589,159598],{},[3894,159590,159591],{},[3897,159592,159593,159596],{},[3900,159594,159595],{},"占位符",[3900,159597,29355],{},[3938,159599,159600,159608,159616],{},[3897,159601,159602,159606],{},[3943,159603,159604],{},[114,159605,159564],{},[3943,159607,158103],{},[3897,159609,159610,159614],{},[3943,159611,159612],{},[114,159613,159570],{},[3943,159615,158081],{},[3897,159617,159618,159623],{},[3943,159619,159620],{},[114,159621,159622],{},"%f",[3943,159624,158092],{},[19,159626,159627],{},"精度控制：",[106,159629,159631],{"className":122,"code":159630,"language":124,"meta":112,"style":112},"price = 12.3456\nprint(\"%.2f\" % price)\n",[114,159632,159633,159642],{"__ignoreMap":112},[128,159634,159635,159637,159639],{"class":130,"line":131},[128,159636,150028],{"class":138},[128,159638,270],{"class":134},[128,159640,159641],{"class":166}," 12.3456\n",[128,159643,159644,159646,159648,159650,159653,159655,159657],{"class":130,"line":142},[128,159645,2469],{"class":166},[128,159647,253],{"class":138},[128,159649,1376],{"class":176},[128,159651,159652],{"class":166},"%.2f",[128,159654,1376],{"class":176},[128,159656,158960],{"class":134},[128,159658,159659],{"class":138}," price)\n",[72,159661,159663],{"id":159662},"_2102-format方法","2.10.2 format方法",[106,159665,159667],{"className":122,"code":159666,"language":124,"meta":112,"style":112},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[114,159668,159669,159677,159685,159689,159708,159728],{"__ignoreMap":112},[128,159670,159671,159673,159675],{"class":130,"line":131},[128,159672,149883],{"class":138},[128,159674,270],{"class":134},[128,159676,152673],{"class":176},[128,159678,159679,159681,159683],{"class":130,"line":142},[128,159680,149893],{"class":138},[128,159682,270],{"class":134},[128,159684,149898],{"class":166},[128,159686,159687],{"class":130,"line":156},[128,159688,160],{"emptyLinePlaceholder":159},[128,159690,159691,159693,159695,159697,159699,159701,159703,159705],{"class":130,"line":163},[128,159692,2469],{"class":166},[128,159694,253],{"class":138},[128,159696,159561],{"class":176},[128,159698,35925],{"class":166},[128,159700,159567],{"class":176},[128,159702,35925],{"class":166},[128,159704,1376],{"class":176},[128,159706,159707],{"class":138},".format(name, age))\n",[128,159709,159710,159712,159714,159716,159719,159721,159724,159726],{"class":130,"line":183},[128,159711,2469],{"class":166},[128,159713,253],{"class":138},[128,159715,159561],{"class":176},[128,159717,159718],{"class":166},"{0}",[128,159720,159567],{"class":176},[128,159722,159723],{"class":166},"{1}",[128,159725,1376],{"class":176},[128,159727,159707],{"class":138},[128,159729,159730,159732,159734,159736,159739,159741,159744,159746,159749,159751,159753,159756,159758,159760],{"class":130,"line":188},[128,159731,2469],{"class":166},[128,159733,253],{"class":138},[128,159735,159561],{"class":176},[128,159737,159738],{"class":166},"{name}",[128,159740,159567],{"class":176},[128,159742,159743],{"class":166},"{age}",[128,159745,1376],{"class":176},[128,159747,159748],{"class":138},".format(",[128,159750,2773],{"class":266},[128,159752,270],{"class":134},[128,159754,159755],{"class":138},"name, ",[128,159757,73596],{"class":266},[128,159759,270],{"class":134},[128,159761,159762],{"class":138},"age))\n",[72,159764,159766],{"id":159765},"_2103-f-string","2.10.3 f-string",[19,159768,159769],{},"推荐写法：",[106,159771,159773],{"className":122,"code":159772,"language":124,"meta":112,"style":112},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[114,159774,159775,159783,159791,159799,159803],{"__ignoreMap":112},[128,159776,159777,159779,159781],{"class":130,"line":131},[128,159778,149883],{"class":138},[128,159780,270],{"class":134},[128,159782,152673],{"class":176},[128,159784,159785,159787,159789],{"class":130,"line":142},[128,159786,149893],{"class":138},[128,159788,270],{"class":134},[128,159790,149898],{"class":166},[128,159792,159793,159795,159797],{"class":130,"line":156},[128,159794,158237],{"class":138},[128,159796,270],{"class":134},[128,159798,159548],{"class":166},[128,159800,159801],{"class":130,"line":163},[128,159802,160],{"emptyLinePlaceholder":159},[128,159804,159805,159807,159809,159811,159813,159815,159817,159819,159821,159823,159825,159827,159829,159831,159834,159837,159839,159841],{"class":130,"line":183},[128,159806,2469],{"class":166},[128,159808,253],{"class":138},[128,159810,3019],{"class":134},[128,159812,159561],{"class":176},[128,159814,1379],{"class":166},[128,159816,2773],{"class":138},[128,159818,1453],{"class":166},[128,159820,159567],{"class":176},[128,159822,1379],{"class":166},[128,159824,73596],{"class":138},[128,159826,1453],{"class":166},[128,159828,159573],{"class":176},[128,159830,1379],{"class":166},[128,159832,159833],{"class":138},"score",[128,159835,159836],{"class":134},":.1f",[128,159838,1453],{"class":166},[128,159840,1376],{"class":176},[128,159842,180],{"class":138},[19,159844,159845],{},"表达式也可以放进去：",[106,159847,159849],{"className":122,"code":159848,"language":124,"meta":112,"style":112},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[114,159850,159851,159859,159867],{"__ignoreMap":112},[128,159852,159853,159855,159857],{"class":130,"line":131},[128,159854,150028],{"class":138},[128,159856,270],{"class":134},[128,159858,150033],{"class":166},[128,159860,159861,159863,159865],{"class":130,"line":142},[128,159862,150038],{"class":138},[128,159864,270],{"class":134},[128,159866,57808],{"class":166},[128,159868,159869,159871,159873,159875,159878,159880,159882,159884,159887,159889,159892],{"class":130,"line":156},[128,159870,2469],{"class":166},[128,159872,253],{"class":138},[128,159874,3019],{"class":134},[128,159876,159877],{"class":176},"\"总价:",[128,159879,1379],{"class":166},[128,159881,150028],{"class":138},[128,159883,4205],{"class":134},[128,159885,159886],{"class":138}," count",[128,159888,1453],{"class":166},[128,159890,159891],{"class":176},"元\"",[128,159893,180],{"class":138},[14,159895,159897],{"id":159896},"_211-input输入","2.11 input输入",[19,159899,159900,159903],{},[114,159901,159902],{},"input()"," 会暂停程序，等待用户输入。",[106,159905,159907],{"className":122,"code":159906,"language":124,"meta":112,"style":112},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[114,159908,159909,159923],{"__ignoreMap":112},[128,159910,159911,159913,159915,159917,159919,159921],{"class":130,"line":131},[128,159912,149883],{"class":138},[128,159914,270],{"class":134},[128,159916,772],{"class":166},[128,159918,253],{"class":138},[128,159920,830],{"class":176},[128,159922,180],{"class":138},[128,159924,159925,159927,159929,159931,159934,159936,159938,159940,159942],{"class":130,"line":142},[128,159926,2469],{"class":166},[128,159928,253],{"class":138},[128,159930,3019],{"class":134},[128,159932,159933],{"class":176},"\"你好，",[128,159935,1379],{"class":166},[128,159937,2773],{"class":138},[128,159939,1453],{"class":166},[128,159941,1376],{"class":176},[128,159943,180],{"class":138},[19,159945,159946],{},"输入整数：",[106,159948,159950],{"className":122,"code":159949,"language":124,"meta":112,"style":112},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[114,159951,159952,159970],{"__ignoreMap":112},[128,159953,159954,159956,159958,159960,159962,159964,159966,159968],{"class":130,"line":131},[128,159955,149893],{"class":138},[128,159957,270],{"class":134},[128,159959,638],{"class":166},[128,159961,253],{"class":138},[128,159963,643],{"class":166},[128,159965,253],{"class":138},[128,159967,846],{"class":176},[128,159969,3034],{"class":138},[128,159971,159972,159974,159976,159978,159981,159983,159985,159987,159990,159992],{"class":130,"line":142},[128,159973,2469],{"class":166},[128,159975,253],{"class":138},[128,159977,3019],{"class":134},[128,159979,159980],{"class":176},"\"明年你",[128,159982,1379],{"class":166},[128,159984,149893],{"class":138},[128,159986,2457],{"class":134},[128,159988,159989],{"class":166}," 1}",[128,159991,152724],{"class":176},[128,159993,180],{"class":138},[19,159995,159996],{},"输入小数：",[106,159998,160000],{"className":122,"code":159999,"language":124,"meta":112,"style":112},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[114,160001,160002,160021],{"__ignoreMap":112},[128,160003,160004,160006,160008,160010,160012,160014,160016,160019],{"class":130,"line":131},[128,160005,158210],{"class":138},[128,160007,270],{"class":134},[128,160009,714],{"class":166},[128,160011,253],{"class":138},[128,160013,643],{"class":166},[128,160015,253],{"class":138},[128,160017,160018],{"class":176},"\"请输入身高:\"",[128,160020,3034],{"class":138},[128,160022,160023,160025,160027,160029,160032,160034,160036,160039,160041,160044],{"class":130,"line":142},[128,160024,2469],{"class":166},[128,160026,253],{"class":138},[128,160028,3019],{"class":134},[128,160030,160031],{"class":176},"\"身高:",[128,160033,1379],{"class":166},[128,160035,28468],{"class":138},[128,160037,160038],{"class":134},":.2f",[128,160040,1453],{"class":166},[128,160042,160043],{"class":176},"米\"",[128,160045,180],{"class":138},[14,160047,160049],{"id":160048},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,160051,126648],{},[26,160053,160054,160057,160060,160063],{},[29,160055,160056],{},"输入商品单价。",[29,160058,160059],{},"输入购买数量。",[29,160061,160062],{},"输入折扣，例如 0.8 表示八折。",[29,160064,160065],{},"输出最终金额，保留两位小数。",[19,160067,13562],{},[106,160069,160071],{"className":122,"code":160070,"language":124,"meta":112,"style":112},"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",[114,160072,160073,160092,160111,160131,160135,160155,160159,160182,160203,160225],{"__ignoreMap":112},[128,160074,160075,160077,160079,160081,160083,160085,160087,160090],{"class":130,"line":131},[128,160076,150028],{"class":138},[128,160078,270],{"class":134},[128,160080,714],{"class":166},[128,160082,253],{"class":138},[128,160084,643],{"class":166},[128,160086,253],{"class":138},[128,160088,160089],{"class":176},"\"请输入商品单价:\"",[128,160091,3034],{"class":138},[128,160093,160094,160096,160098,160100,160102,160104,160106,160109],{"class":130,"line":142},[128,160095,150038],{"class":138},[128,160097,270],{"class":134},[128,160099,638],{"class":166},[128,160101,253],{"class":138},[128,160103,643],{"class":166},[128,160105,253],{"class":138},[128,160107,160108],{"class":176},"\"请输入购买数量:\"",[128,160110,3034],{"class":138},[128,160112,160113,160116,160118,160120,160122,160124,160126,160129],{"class":130,"line":156},[128,160114,160115],{"class":138},"discount ",[128,160117,270],{"class":134},[128,160119,714],{"class":166},[128,160121,253],{"class":138},[128,160123,643],{"class":166},[128,160125,253],{"class":138},[128,160127,160128],{"class":176},"\"请输入折扣:\"",[128,160130,3034],{"class":138},[128,160132,160133],{"class":130,"line":163},[128,160134,160],{"emptyLinePlaceholder":159},[128,160136,160137,160140,160142,160145,160147,160150,160152],{"class":130,"line":183},[128,160138,160139],{"class":138},"total ",[128,160141,270],{"class":134},[128,160143,160144],{"class":138}," price ",[128,160146,4205],{"class":134},[128,160148,160149],{"class":138}," count ",[128,160151,4205],{"class":134},[128,160153,160154],{"class":138}," discount\n",[128,160156,160157],{"class":130,"line":188},[128,160158,160],{"emptyLinePlaceholder":159},[128,160160,160161,160163,160165,160167,160170,160172,160174,160176,160178,160180],{"class":130,"line":193},[128,160162,2469],{"class":166},[128,160164,253],{"class":138},[128,160166,3019],{"class":134},[128,160168,160169],{"class":176},"\"商品单价:",[128,160171,1379],{"class":166},[128,160173,83188],{"class":138},[128,160175,160038],{"class":134},[128,160177,1453],{"class":166},[128,160179,1376],{"class":176},[128,160181,180],{"class":138},[128,160183,160184,160186,160188,160190,160193,160195,160197,160199,160201],{"class":130,"line":206},[128,160185,2469],{"class":166},[128,160187,253],{"class":138},[128,160189,3019],{"class":134},[128,160191,160192],{"class":176},"\"购买数量:",[128,160194,1379],{"class":166},[128,160196,87806],{"class":138},[128,160198,1453],{"class":166},[128,160200,1376],{"class":176},[128,160202,180],{"class":138},[128,160204,160205,160207,160209,160211,160214,160216,160219,160221,160223],{"class":130,"line":221},[128,160206,2469],{"class":166},[128,160208,253],{"class":138},[128,160210,3019],{"class":134},[128,160212,160213],{"class":176},"\"折扣:",[128,160215,1379],{"class":166},[128,160217,160218],{"class":138},"discount",[128,160220,1453],{"class":166},[128,160222,1376],{"class":176},[128,160224,180],{"class":138},[128,160226,160227,160229,160231,160233,160236,160238,160241,160243,160245,160247],{"class":130,"line":230},[128,160228,2469],{"class":166},[128,160230,253],{"class":138},[128,160232,3019],{"class":134},[128,160234,160235],{"class":176},"\"应付金额:",[128,160237,1379],{"class":166},[128,160239,160240],{"class":138},"total",[128,160242,160038],{"class":134},[128,160244,1453],{"class":166},[128,160246,159891],{"class":176},[128,160248,180],{"class":138},[14,160250,160252],{"id":160251},"_213-易错点","2.13 易错点",[26,160254,160255,160260,160266,160274,160277],{},[29,160256,160257,160259],{},[114,160258,159902],{}," 的结果是字符串，做运算前要转换。",[29,160261,160262,160263,1842],{},"字符串拼接时，数字要先 ",[114,160264,160265],{},"str()",[29,160267,160268,160270,160271,160273],{},[114,160269,270],{}," 是赋值，",[114,160272,570],{}," 是比较。",[29,160275,160276],{},"Python 没有自增自减运算符。",[29,160278,160279],{},"浮点数计算可能有精度误差：",[106,160281,160283],{"className":122,"code":160282,"language":124,"meta":112,"style":112},"print(0.1 + 0.2)\n",[114,160284,160285],{"__ignoreMap":112},[128,160286,160287,160289,160291,160293,160295,160298],{"class":130,"line":131},[128,160288,2469],{"class":166},[128,160290,253],{"class":138},[128,160292,89582],{"class":166},[128,160294,48951],{"class":134},[128,160296,160297],{"class":166}," 0.2",[128,160299,180],{"class":138},[19,160301,160302,160303,160306],{},"金额计算如果要求严格，可以后续学习 ",[114,160304,160305],{},"decimal"," 模块。",[14,160308,160310],{"id":160309},"_214-本章练习","2.14 本章练习",[26,160312,160313,160316,160319,160322,160325],{},[29,160314,160315],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[29,160317,160318],{},"输入圆的半径，计算面积，保留两位小数。",[29,160320,160321],{},"输入工资和奖金，计算总收入。",[29,160323,160324],{},"输入摄氏温度，转换为华氏温度。",[29,160326,160327],{},"写一个 BMI 计算程序：",[106,160329,160332],{"className":160330,"code":160331,"language":111,"meta":112},[109],"BMI = 体重kg \u002F 身高m ** 2\n",[114,160333,160331],{"__ignoreMap":112},[3659,160335,160336],{},"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":112,"searchDepth":142,"depth":142,"links":160338},[160339,160340,160341,160342,160343,160344,160345,160351,160352,160353,160358,160359,160360,160361],{"id":157900,"depth":142,"text":157901},{"id":158009,"depth":142,"text":158010},{"id":158180,"depth":142,"text":158181},{"id":158257,"depth":142,"text":158258},{"id":54116,"depth":142,"text":54117},{"id":158563,"depth":142,"text":158564},{"id":158789,"depth":142,"text":158790,"children":160346},[160347,160348,160349,160350],{"id":158793,"depth":156,"text":158794},{"id":158987,"depth":156,"text":158988},{"id":159075,"depth":156,"text":159076},{"id":159181,"depth":156,"text":159182},{"id":159290,"depth":142,"text":159291},{"id":159448,"depth":142,"text":159449},{"id":159513,"depth":142,"text":159514,"children":160354},[160355,160356,160357],{"id":159517,"depth":156,"text":159518},{"id":159662,"depth":156,"text":159663},{"id":159765,"depth":156,"text":159766},{"id":159896,"depth":142,"text":159897},{"id":160048,"depth":142,"text":160049},{"id":160251,"depth":142,"text":160252},{"id":160309,"depth":142,"text":160310},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":157892,"description":3686},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":160368,"title":160369,"body":160370,"description":3686,"extension":3687,"meta":162006,"navigation":159,"path":162007,"seo":162008,"stem":162009,"__hash__":162010},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":160371,"toc":161987},[160372,160375,160379,160382,160397,160400,160428,160432,160482,160484,160500,160503,160529,160532,160536,160603,160606,160622,160626,160629,160747,160750,160757,160806,160812,160816,160819,160932,160935,160939,160943,160946,160996,161000,161003,161053,161057,161060,161098,161102,161105,161151,161154,161189,161193,161198,161201,161247,161249,161316,161320,161326,161437,161446,161450,161452,161463,161465,161631,161635,161637,161651,161653,161867,161871,161890,161907,161910,161956,161960,161984],[10,160373,160369],{"id":160374},"_3-判断语句",[14,160376,160378],{"id":160377},"_31-布尔值","3.1 布尔值",[19,160380,160381],{},"判断语句依赖布尔值：",[106,160383,160385],{"className":122,"code":160384,"language":124,"meta":112,"style":112},"True\nFalse\n",[114,160386,160387,160392],{"__ignoreMap":112},[128,160388,160389],{"class":130,"line":131},[128,160390,160391],{"class":166},"True\n",[128,160393,160394],{"class":130,"line":142},[128,160395,160396],{"class":166},"False\n",[19,160398,160399],{},"比较表达式会产生布尔值：",[106,160401,160403],{"className":122,"code":160402,"language":124,"meta":112,"style":112},"age = 18\nprint(age >= 18)  # True\n",[114,160404,160405,160413],{"__ignoreMap":112},[128,160406,160407,160409,160411],{"class":130,"line":131},[128,160408,149893],{"class":138},[128,160410,270],{"class":134},[128,160412,149898],{"class":166},[128,160414,160415,160417,160419,160421,160423,160425],{"class":130,"line":142},[128,160416,2469],{"class":166},[128,160418,158647],{"class":138},[128,160420,5308],{"class":134},[128,160422,159164],{"class":166},[128,160424,49193],{"class":138},[128,160426,160427],{"class":3814},"# True\n",[14,160429,160431],{"id":160430},"_32-if基础语法","3.2 if基础语法",[106,160433,160435],{"className":122,"code":160434,"language":124,"meta":112,"style":112},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[114,160436,160437,160455,160459,160471],{"__ignoreMap":112},[128,160438,160439,160441,160443,160445,160447,160449,160451,160453],{"class":130,"line":131},[128,160440,149893],{"class":138},[128,160442,270],{"class":134},[128,160444,638],{"class":166},[128,160446,253],{"class":138},[128,160448,643],{"class":166},[128,160450,253],{"class":138},[128,160452,846],{"class":176},[128,160454,3034],{"class":138},[128,160456,160457],{"class":130,"line":142},[128,160458,160],{"emptyLinePlaceholder":159},[128,160460,160461,160463,160465,160467,160469],{"class":130,"line":156},[128,160462,1800],{"class":134},[128,160464,19227],{"class":138},[128,160466,5308],{"class":134},[128,160468,159164],{"class":166},[128,160470,241],{"class":138},[128,160472,160473,160475,160477,160480],{"class":130,"line":163},[128,160474,437],{"class":166},[128,160476,253],{"class":138},[128,160478,160479],{"class":176},"\"可以进入网吧\"",[128,160481,180],{"class":138},[19,160483,12571],{},[26,160485,160486,160491,160494,160497],{},[29,160487,160488,160490],{},[114,160489,1800],{}," 后面是条件表达式。",[29,160492,160493],{},"条件后面必须写冒号。",[29,160495,160496],{},"条件成立时执行缩进代码块。",[29,160498,160499],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,160501,160502],{},"错误示例：",[106,160504,160506],{"className":122,"code":160505,"language":124,"meta":112,"style":112},"if age >= 18\n    print(\"可以进入\")\n",[114,160507,160508,160518],{"__ignoreMap":112},[128,160509,160510,160512,160514,160516],{"class":130,"line":131},[128,160511,1800],{"class":134},[128,160513,19227],{"class":138},[128,160515,5308],{"class":134},[128,160517,149898],{"class":166},[128,160519,160520,160522,160524,160527],{"class":130,"line":142},[128,160521,437],{"class":166},[128,160523,253],{"class":138},[128,160525,160526],{"class":176},"\"可以进入\"",[128,160528,180],{"class":138},[19,160530,160531],{},"缺少冒号。",[14,160533,160535],{"id":160534},"_33-if-else","3.3 if else",[106,160537,160539],{"className":122,"code":160538,"language":124,"meta":112,"style":112},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[114,160540,160541,160559,160563,160575,160586,160592],{"__ignoreMap":112},[128,160542,160543,160545,160547,160549,160551,160553,160555,160557],{"class":130,"line":131},[128,160544,149893],{"class":138},[128,160546,270],{"class":134},[128,160548,638],{"class":166},[128,160550,253],{"class":138},[128,160552,643],{"class":166},[128,160554,253],{"class":138},[128,160556,846],{"class":176},[128,160558,3034],{"class":138},[128,160560,160561],{"class":130,"line":142},[128,160562,160],{"emptyLinePlaceholder":159},[128,160564,160565,160567,160569,160571,160573],{"class":130,"line":156},[128,160566,1800],{"class":134},[128,160568,19227],{"class":138},[128,160570,5308],{"class":134},[128,160572,159164],{"class":166},[128,160574,241],{"class":138},[128,160576,160577,160579,160581,160584],{"class":130,"line":163},[128,160578,437],{"class":166},[128,160580,253],{"class":138},[128,160582,160583],{"class":176},"\"成年人\"",[128,160585,180],{"class":138},[128,160587,160588,160590],{"class":130,"line":183},[128,160589,5299],{"class":134},[128,160591,241],{"class":138},[128,160593,160594,160596,160598,160601],{"class":130,"line":188},[128,160595,437],{"class":166},[128,160597,253],{"class":138},[128,160599,160600],{"class":176},"\"未成年人\"",[128,160602,180],{"class":138},[19,160604,160605],{},"执行逻辑：",[26,160607,160608,160614,160619],{},[29,160609,160610,160611,160613],{},"条件成立，执行 ",[114,160612,1800],{}," 代码块。",[29,160615,160616,160617,160613],{},"条件不成立，执行 ",[114,160618,5299],{},[29,160620,160621],{},"两个代码块只会执行其中一个。",[14,160623,160625],{"id":160624},"_34-if-elif-else","3.4 if elif else",[19,160627,160628],{},"多条件判断：",[106,160630,160632],{"className":122,"code":160631,"language":124,"meta":112,"style":112},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[114,160633,160634,160652,160656,160670,160681,160695,160706,160719,160730,160736],{"__ignoreMap":112},[128,160635,160636,160638,160640,160642,160644,160646,160648,160650],{"class":130,"line":131},[128,160637,158237],{"class":138},[128,160639,270],{"class":134},[128,160641,638],{"class":166},[128,160643,253],{"class":138},[128,160645,643],{"class":166},[128,160647,253],{"class":138},[128,160649,862],{"class":176},[128,160651,3034],{"class":138},[128,160653,160654],{"class":130,"line":142},[128,160655,160],{"emptyLinePlaceholder":159},[128,160657,160658,160660,160663,160665,160668],{"class":130,"line":156},[128,160659,1800],{"class":134},[128,160661,160662],{"class":138}," score ",[128,160664,5308],{"class":134},[128,160666,160667],{"class":166}," 90",[128,160669,241],{"class":138},[128,160671,160672,160674,160676,160679],{"class":130,"line":163},[128,160673,437],{"class":166},[128,160675,253],{"class":138},[128,160677,160678],{"class":176},"\"优秀\"",[128,160680,180],{"class":138},[128,160682,160683,160686,160688,160690,160693],{"class":130,"line":183},[128,160684,160685],{"class":134},"elif",[128,160687,160662],{"class":138},[128,160689,5308],{"class":134},[128,160691,160692],{"class":166}," 80",[128,160694,241],{"class":138},[128,160696,160697,160699,160701,160704],{"class":130,"line":188},[128,160698,437],{"class":166},[128,160700,253],{"class":138},[128,160702,160703],{"class":176},"\"良好\"",[128,160705,180],{"class":138},[128,160707,160708,160710,160712,160714,160717],{"class":130,"line":193},[128,160709,160685],{"class":134},[128,160711,160662],{"class":138},[128,160713,5308],{"class":134},[128,160715,160716],{"class":166}," 60",[128,160718,241],{"class":138},[128,160720,160721,160723,160725,160728],{"class":130,"line":206},[128,160722,437],{"class":166},[128,160724,253],{"class":138},[128,160726,160727],{"class":176},"\"及格\"",[128,160729,180],{"class":138},[128,160731,160732,160734],{"class":130,"line":221},[128,160733,5299],{"class":134},[128,160735,241],{"class":138},[128,160737,160738,160740,160742,160745],{"class":130,"line":230},[128,160739,437],{"class":166},[128,160741,253],{"class":138},[128,160743,160744],{"class":176},"\"不及格\"",[128,160746,180],{"class":138},[19,160748,160749],{},"注意判断顺序很重要。",[19,160751,160752,160753,160756],{},"如果把 ",[114,160754,160755],{},"score >= 60"," 放在最前面：",[106,160758,160760],{"className":122,"code":160759,"language":124,"meta":112,"style":112},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[114,160761,160762,160774,160784,160796],{"__ignoreMap":112},[128,160763,160764,160766,160768,160770,160772],{"class":130,"line":131},[128,160765,1800],{"class":134},[128,160767,160662],{"class":138},[128,160769,5308],{"class":134},[128,160771,160716],{"class":166},[128,160773,241],{"class":138},[128,160775,160776,160778,160780,160782],{"class":130,"line":142},[128,160777,437],{"class":166},[128,160779,253],{"class":138},[128,160781,160727],{"class":176},[128,160783,180],{"class":138},[128,160785,160786,160788,160790,160792,160794],{"class":130,"line":156},[128,160787,160685],{"class":134},[128,160789,160662],{"class":138},[128,160791,5308],{"class":134},[128,160793,160667],{"class":166},[128,160795,241],{"class":138},[128,160797,160798,160800,160802,160804],{"class":130,"line":163},[128,160799,437],{"class":166},[128,160801,253],{"class":138},[128,160803,160678],{"class":176},[128,160805,180],{"class":138},[19,160807,160808,160809,160811],{},"成绩 95 会先满足 ",[114,160810,160755],{},"，后面的优秀分支就不会执行。",[14,160813,160815],{"id":160814},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,160817,160818],{},"嵌套判断就是在一个判断内部再写判断。",[106,160820,160822],{"className":122,"code":160821,"language":124,"meta":112,"style":112},"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",[114,160823,160824,160842,160857,160861,160873,160887,160897,160904,160915,160921],{"__ignoreMap":112},[128,160825,160826,160828,160830,160832,160834,160836,160838,160840],{"class":130,"line":131},[128,160827,149893],{"class":138},[128,160829,270],{"class":134},[128,160831,638],{"class":166},[128,160833,253],{"class":138},[128,160835,643],{"class":166},[128,160837,253],{"class":138},[128,160839,846],{"class":176},[128,160841,3034],{"class":138},[128,160843,160844,160846,160848,160850,160852,160855],{"class":130,"line":142},[128,160845,159240],{"class":138},[128,160847,270],{"class":134},[128,160849,772],{"class":166},[128,160851,253],{"class":138},[128,160853,160854],{"class":176},"\"是否有票(y\u002Fn):\"",[128,160856,180],{"class":138},[128,160858,160859],{"class":130,"line":156},[128,160860,160],{"emptyLinePlaceholder":159},[128,160862,160863,160865,160867,160869,160871],{"class":130,"line":163},[128,160864,1800],{"class":134},[128,160866,19227],{"class":138},[128,160868,5308],{"class":134},[128,160870,159164],{"class":166},[128,160872,241],{"class":138},[128,160874,160875,160877,160880,160882,160885],{"class":130,"line":183},[128,160876,209],{"class":134},[128,160878,160879],{"class":138}," has_ticket ",[128,160881,570],{"class":134},[128,160883,160884],{"class":176}," \"y\"",[128,160886,241],{"class":138},[128,160888,160889,160891,160893,160895],{"class":130,"line":188},[128,160890,313],{"class":166},[128,160892,253],{"class":138},[128,160894,160526],{"class":176},[128,160896,180],{"class":138},[128,160898,160899,160902],{"class":130,"line":193},[128,160900,160901],{"class":134},"    else",[128,160903,241],{"class":138},[128,160905,160906,160908,160910,160913],{"class":130,"line":206},[128,160907,313],{"class":166},[128,160909,253],{"class":138},[128,160911,160912],{"class":176},"\"请先买票\"",[128,160914,180],{"class":138},[128,160916,160917,160919],{"class":130,"line":221},[128,160918,5299],{"class":134},[128,160920,241],{"class":138},[128,160922,160923,160925,160927,160930],{"class":130,"line":230},[128,160924,437],{"class":166},[128,160926,253],{"class":138},[128,160928,160929],{"class":176},"\"未成年人禁止进入\"",[128,160931,180],{"class":138},[19,160933,160934],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,160936,160938],{"id":160937},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[72,160940,160942],{"id":160941},"_361-and","3.6.1 and",[19,160944,160945],{},"两个条件都成立才成立。",[106,160947,160949],{"className":122,"code":160948,"language":124,"meta":112,"style":112},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[114,160950,160951,160959,160967,160971,160986],{"__ignoreMap":112},[128,160952,160953,160955,160957],{"class":130,"line":131},[128,160954,149893],{"class":138},[128,160956,270],{"class":134},[128,160958,91435],{"class":166},[128,160960,160961,160963,160965],{"class":130,"line":142},[128,160962,159240],{"class":138},[128,160964,270],{"class":134},[128,160966,2220],{"class":166},[128,160968,160969],{"class":130,"line":156},[128,160970,160],{"emptyLinePlaceholder":159},[128,160972,160973,160975,160977,160979,160981,160983],{"class":130,"line":163},[128,160974,1800],{"class":134},[128,160976,19227],{"class":138},[128,160978,5308],{"class":134},[128,160980,159164],{"class":166},[128,160982,123785],{"class":134},[128,160984,160985],{"class":138}," has_ticket:\n",[128,160987,160988,160990,160992,160994],{"class":130,"line":183},[128,160989,437],{"class":166},[128,160991,253],{"class":138},[128,160993,160526],{"class":176},[128,160995,180],{"class":138},[72,160997,160999],{"id":160998},"_362-or","3.6.2 or",[19,161001,161002],{},"只要一个条件成立就成立。",[106,161004,161006],{"className":122,"code":161005,"language":124,"meta":112,"style":112},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[114,161007,161008,161017,161026,161030,161042],{"__ignoreMap":112},[128,161009,161010,161013,161015],{"class":130,"line":131},[128,161011,161012],{"class":138},"is_vip ",[128,161014,270],{"class":134},[128,161016,2206],{"class":166},[128,161018,161019,161022,161024],{"class":130,"line":142},[128,161020,161021],{"class":138},"coupon ",[128,161023,270],{"class":134},[128,161025,2220],{"class":166},[128,161027,161028],{"class":130,"line":156},[128,161029,160],{"emptyLinePlaceholder":159},[128,161031,161032,161034,161037,161039],{"class":130,"line":163},[128,161033,1800],{"class":134},[128,161035,161036],{"class":138}," is_vip ",[128,161038,118447],{"class":134},[128,161040,161041],{"class":138}," coupon:\n",[128,161043,161044,161046,161048,161051],{"class":130,"line":183},[128,161045,437],{"class":166},[128,161047,253],{"class":138},[128,161049,161050],{"class":176},"\"可以享受优惠\"",[128,161052,180],{"class":138},[72,161054,161056],{"id":161055},"_363-not","3.6.3 not",[19,161058,161059],{},"取反。",[106,161061,161063],{"className":122,"code":161062,"language":124,"meta":112,"style":112},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[114,161064,161065,161074,161078,161087],{"__ignoreMap":112},[128,161066,161067,161070,161072],{"class":130,"line":131},[128,161068,161069],{"class":138},"is_closed ",[128,161071,270],{"class":134},[128,161073,2206],{"class":166},[128,161075,161076],{"class":130,"line":142},[128,161077,160],{"emptyLinePlaceholder":159},[128,161079,161080,161082,161084],{"class":130,"line":156},[128,161081,1800],{"class":134},[128,161083,212],{"class":134},[128,161085,161086],{"class":138}," is_closed:\n",[128,161088,161089,161091,161093,161096],{"class":130,"line":163},[128,161090,437],{"class":166},[128,161092,253],{"class":138},[128,161094,161095],{"class":176},"\"店铺营业中\"",[128,161097,180],{"class":138},[14,161099,161101],{"id":161100},"_37-链式比较","3.7 链式比较",[19,161103,161104],{},"Python 支持链式比较：",[106,161106,161108],{"className":122,"code":161107,"language":124,"meta":112,"style":112},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[114,161109,161110,161119,161123,161140],{"__ignoreMap":112},[128,161111,161112,161114,161116],{"class":130,"line":131},[128,161113,158237],{"class":138},[128,161115,270],{"class":134},[128,161117,161118],{"class":166}," 85\n",[128,161120,161121],{"class":130,"line":142},[128,161122,160],{"emptyLinePlaceholder":159},[128,161124,161125,161127,161129,161132,161134,161136,161138],{"class":130,"line":156},[128,161126,1800],{"class":134},[128,161128,7659],{"class":166},[128,161130,161131],{"class":134}," \u003C=",[128,161133,160662],{"class":138},[128,161135,5197],{"class":134},[128,161137,9312],{"class":166},[128,161139,241],{"class":138},[128,161141,161142,161144,161146,161149],{"class":130,"line":163},[128,161143,437],{"class":166},[128,161145,253],{"class":138},[128,161147,161148],{"class":176},"\"成绩合法\"",[128,161150,180],{"class":138},[19,161152,161153],{},"等价于：",[106,161155,161157],{"className":122,"code":161156,"language":124,"meta":112,"style":112},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[114,161158,161159,161179],{"__ignoreMap":112},[128,161160,161161,161163,161165,161167,161169,161171,161173,161175,161177],{"class":130,"line":131},[128,161162,1800],{"class":134},[128,161164,160662],{"class":138},[128,161166,5308],{"class":134},[128,161168,7659],{"class":166},[128,161170,123785],{"class":134},[128,161172,160662],{"class":138},[128,161174,5197],{"class":134},[128,161176,9312],{"class":166},[128,161178,241],{"class":138},[128,161180,161181,161183,161185,161187],{"class":130,"line":142},[128,161182,437],{"class":166},[128,161184,253],{"class":138},[128,161186,161148],{"class":176},[128,161188,180],{"class":138},[14,161190,161192],{"id":161191},"_38-真值和假值","3.8 真值和假值",[19,161194,119823,161195,161197],{},[114,161196,1800],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,161199,161200],{},"假值：",[106,161202,161204],{"className":122,"code":161203,"language":124,"meta":112,"style":112},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[114,161205,161206,161210,161215,161219,161223,161228,161232,161236,161241],{"__ignoreMap":112},[128,161207,161208],{"class":130,"line":131},[128,161209,160396],{"class":166},[128,161211,161212],{"class":130,"line":142},[128,161213,161214],{"class":166},"None\n",[128,161216,161217],{"class":130,"line":156},[128,161218,6656],{"class":166},[128,161220,161221],{"class":130,"line":163},[128,161222,35809],{"class":166},[128,161224,161225],{"class":130,"line":183},[128,161226,161227],{"class":176},"\"\"\n",[128,161229,161230],{"class":130,"line":188},[128,161231,35824],{"class":138},[128,161233,161234],{"class":130,"line":193},[128,161235,5563],{"class":138},[128,161237,161238],{"class":130,"line":206},[128,161239,161240],{"class":138},"{}\n",[128,161242,161243,161245],{"class":130,"line":221},[128,161244,158169],{"class":166},[128,161246,5563],{"class":138},[19,161248,3488],{},[106,161250,161252],{"className":122,"code":161251,"language":124,"meta":112,"style":112},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[114,161253,161254,161268,161272,161279,161299,161305],{"__ignoreMap":112},[128,161255,161256,161258,161260,161262,161264,161266],{"class":130,"line":131},[128,161257,149883],{"class":138},[128,161259,270],{"class":134},[128,161261,772],{"class":166},[128,161263,253],{"class":138},[128,161265,830],{"class":176},[128,161267,180],{"class":138},[128,161269,161270],{"class":130,"line":142},[128,161271,160],{"emptyLinePlaceholder":159},[128,161273,161274,161276],{"class":130,"line":156},[128,161275,1800],{"class":134},[128,161277,161278],{"class":138}," name:\n",[128,161280,161281,161283,161285,161287,161289,161291,161293,161295,161297],{"class":130,"line":163},[128,161282,437],{"class":166},[128,161284,253],{"class":138},[128,161286,3019],{"class":134},[128,161288,159933],{"class":176},[128,161290,1379],{"class":166},[128,161292,2773],{"class":138},[128,161294,1453],{"class":166},[128,161296,1376],{"class":176},[128,161298,180],{"class":138},[128,161300,161301,161303],{"class":130,"line":183},[128,161302,5299],{"class":134},[128,161304,241],{"class":138},[128,161306,161307,161309,161311,161314],{"class":130,"line":188},[128,161308,437],{"class":166},[128,161310,253],{"class":138},[128,161312,161313],{"class":176},"\"姓名不能为空\"",[128,161315,180],{"class":138},[14,161317,161319],{"id":161318},"_39-match语句","3.9 match语句",[19,161321,161322,161323,161325],{},"Python 3.10 开始支持 ",[114,161324,74640],{},"。它适合处理固定选项。",[106,161327,161329],{"className":122,"code":161328,"language":124,"meta":112,"style":112},"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",[114,161330,161331,161347,161351,161358,161368,161379,161388,161399,161408,161419,161426],{"__ignoreMap":112},[128,161332,161333,161336,161338,161340,161342,161345],{"class":130,"line":131},[128,161334,161335],{"class":138},"command ",[128,161337,270],{"class":134},[128,161339,772],{"class":166},[128,161341,253],{"class":138},[128,161343,161344],{"class":176},"\"请输入命令:\"",[128,161346,180],{"class":138},[128,161348,161349],{"class":130,"line":142},[128,161350,160],{"emptyLinePlaceholder":159},[128,161352,161353,161355],{"class":130,"line":156},[128,161354,74640],{"class":134},[128,161356,161357],{"class":138}," command:\n",[128,161359,161360,161363,161366],{"class":130,"line":163},[128,161361,161362],{"class":134},"    case",[128,161364,161365],{"class":176}," \"start\"",[128,161367,241],{"class":138},[128,161369,161370,161372,161374,161377],{"class":130,"line":183},[128,161371,313],{"class":166},[128,161373,253],{"class":138},[128,161375,161376],{"class":176},"\"启动\"",[128,161378,180],{"class":138},[128,161380,161381,161383,161386],{"class":130,"line":188},[128,161382,161362],{"class":134},[128,161384,161385],{"class":176}," \"stop\"",[128,161387,241],{"class":138},[128,161389,161390,161392,161394,161397],{"class":130,"line":193},[128,161391,313],{"class":166},[128,161393,253],{"class":138},[128,161395,161396],{"class":176},"\"停止\"",[128,161398,180],{"class":138},[128,161400,161401,161403,161406],{"class":130,"line":206},[128,161402,161362],{"class":134},[128,161404,161405],{"class":176}," \"restart\"",[128,161407,241],{"class":138},[128,161409,161410,161412,161414,161417],{"class":130,"line":221},[128,161411,313],{"class":166},[128,161413,253],{"class":138},[128,161415,161416],{"class":176},"\"重启\"",[128,161418,180],{"class":138},[128,161420,161421,161423],{"class":130,"line":230},[128,161422,161362],{"class":134},[128,161424,161425],{"class":138}," _:\n",[128,161427,161428,161430,161432,161435],{"class":130,"line":235},[128,161429,313],{"class":166},[128,161431,253],{"class":138},[128,161433,161434],{"class":176},"\"未知命令\"",[128,161436,180],{"class":138},[19,161438,161439,161440,161442,161443,161445],{},"入门阶段掌握 ",[114,161441,3324],{}," 更重要，",[114,161444,74640],{}," 可以作为补充。",[14,161447,161449],{"id":161448},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,161451,126648],{},[26,161453,161454,161457,161460],{},[29,161455,161456],{},"输入成绩。",[29,161458,161459],{},"判断成绩是否合法。",[29,161461,161462],{},"输出等级。",[19,161464,13562],{},[106,161466,161468],{"className":122,"code":161467,"language":124,"meta":112,"style":112},"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",[114,161469,161470,161488,161492,161510,161521,161533,161544,161556,161567,161580,161591,161603,161614,161620],{"__ignoreMap":112},[128,161471,161472,161474,161476,161478,161480,161482,161484,161486],{"class":130,"line":131},[128,161473,158237],{"class":138},[128,161475,270],{"class":134},[128,161477,714],{"class":166},[128,161479,253],{"class":138},[128,161481,643],{"class":166},[128,161483,253],{"class":138},[128,161485,862],{"class":176},[128,161487,3034],{"class":138},[128,161489,161490],{"class":130,"line":142},[128,161491,160],{"emptyLinePlaceholder":159},[128,161493,161494,161496,161498,161500,161502,161504,161506,161508],{"class":130,"line":156},[128,161495,1800],{"class":134},[128,161497,212],{"class":134},[128,161499,7659],{"class":166},[128,161501,161131],{"class":134},[128,161503,160662],{"class":138},[128,161505,5197],{"class":134},[128,161507,9312],{"class":166},[128,161509,241],{"class":138},[128,161511,161512,161514,161516,161519],{"class":130,"line":163},[128,161513,437],{"class":166},[128,161515,253],{"class":138},[128,161517,161518],{"class":176},"\"成绩不合法\"",[128,161520,180],{"class":138},[128,161522,161523,161525,161527,161529,161531],{"class":130,"line":183},[128,161524,160685],{"class":134},[128,161526,160662],{"class":138},[128,161528,5308],{"class":134},[128,161530,160667],{"class":166},[128,161532,241],{"class":138},[128,161534,161535,161537,161539,161542],{"class":130,"line":188},[128,161536,437],{"class":166},[128,161538,253],{"class":138},[128,161540,161541],{"class":176},"\"等级:A\"",[128,161543,180],{"class":138},[128,161545,161546,161548,161550,161552,161554],{"class":130,"line":193},[128,161547,160685],{"class":134},[128,161549,160662],{"class":138},[128,161551,5308],{"class":134},[128,161553,160692],{"class":166},[128,161555,241],{"class":138},[128,161557,161558,161560,161562,161565],{"class":130,"line":206},[128,161559,437],{"class":166},[128,161561,253],{"class":138},[128,161563,161564],{"class":176},"\"等级:B\"",[128,161566,180],{"class":138},[128,161568,161569,161571,161573,161575,161578],{"class":130,"line":221},[128,161570,160685],{"class":134},[128,161572,160662],{"class":138},[128,161574,5308],{"class":134},[128,161576,161577],{"class":166}," 70",[128,161579,241],{"class":138},[128,161581,161582,161584,161586,161589],{"class":130,"line":230},[128,161583,437],{"class":166},[128,161585,253],{"class":138},[128,161587,161588],{"class":176},"\"等级:C\"",[128,161590,180],{"class":138},[128,161592,161593,161595,161597,161599,161601],{"class":130,"line":235},[128,161594,160685],{"class":134},[128,161596,160662],{"class":138},[128,161598,5308],{"class":134},[128,161600,160716],{"class":166},[128,161602,241],{"class":138},[128,161604,161605,161607,161609,161612],{"class":130,"line":244},[128,161606,437],{"class":166},[128,161608,253],{"class":138},[128,161610,161611],{"class":176},"\"等级:D\"",[128,161613,180],{"class":138},[128,161615,161616,161618],{"class":130,"line":287},[128,161617,5299],{"class":134},[128,161619,241],{"class":138},[128,161621,161622,161624,161626,161629],{"class":130,"line":301},[128,161623,437],{"class":166},[128,161625,253],{"class":138},[128,161627,161628],{"class":176},"\"等级:E\"",[128,161630,180],{"class":138},[14,161632,161634],{"id":161633},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,161636,126648],{},[26,161638,161639,161642,161645,161648],{},[29,161640,161641],{},"输入消费金额。",[29,161643,161644],{},"输入会员等级，普通、银卡、金卡。",[29,161646,161647],{},"普通不打折，银卡 9 折，金卡 8 折。",[29,161649,161650],{},"满 500 再减 50。",[19,161652,13562],{},[106,161654,161656],{"className":122,"code":161655,"language":124,"meta":112,"style":112},"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",[114,161657,161658,161678,161694,161698,161706,161710,161724,161734,161747,161756,161769,161777,161783,161794,161798,161812,161816,161830,161840,161844],{"__ignoreMap":112},[128,161659,161660,161663,161665,161667,161669,161671,161673,161676],{"class":130,"line":131},[128,161661,161662],{"class":138},"amount ",[128,161664,270],{"class":134},[128,161666,714],{"class":166},[128,161668,253],{"class":138},[128,161670,643],{"class":166},[128,161672,253],{"class":138},[128,161674,161675],{"class":176},"\"请输入消费金额:\"",[128,161677,3034],{"class":138},[128,161679,161680,161683,161685,161687,161689,161692],{"class":130,"line":142},[128,161681,161682],{"class":138},"level ",[128,161684,270],{"class":134},[128,161686,772],{"class":166},[128,161688,253],{"class":138},[128,161690,161691],{"class":176},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[128,161693,180],{"class":138},[128,161695,161696],{"class":130,"line":156},[128,161697,160],{"emptyLinePlaceholder":159},[128,161699,161700,161702,161704],{"class":130,"line":163},[128,161701,160115],{"class":138},[128,161703,270],{"class":134},[128,161705,59079],{"class":166},[128,161707,161708],{"class":130,"line":183},[128,161709,160],{"emptyLinePlaceholder":159},[128,161711,161712,161714,161717,161719,161722],{"class":130,"line":188},[128,161713,1800],{"class":134},[128,161715,161716],{"class":138}," level ",[128,161718,570],{"class":134},[128,161720,161721],{"class":176}," \"银卡\"",[128,161723,241],{"class":138},[128,161725,161726,161729,161731],{"class":130,"line":193},[128,161727,161728],{"class":138},"    discount ",[128,161730,270],{"class":134},[128,161732,161733],{"class":166}," 0.9\n",[128,161735,161736,161738,161740,161742,161745],{"class":130,"line":206},[128,161737,160685],{"class":134},[128,161739,161716],{"class":138},[128,161741,570],{"class":134},[128,161743,161744],{"class":176}," \"金卡\"",[128,161746,241],{"class":138},[128,161748,161749,161751,161753],{"class":130,"line":221},[128,161750,161728],{"class":138},[128,161752,270],{"class":134},[128,161754,161755],{"class":166}," 0.8\n",[128,161757,161758,161760,161762,161764,161767],{"class":130,"line":230},[128,161759,160685],{"class":134},[128,161761,161716],{"class":138},[128,161763,570],{"class":134},[128,161765,161766],{"class":176}," \"普通\"",[128,161768,241],{"class":138},[128,161770,161771,161773,161775],{"class":130,"line":235},[128,161772,161728],{"class":138},[128,161774,270],{"class":134},[128,161776,59079],{"class":166},[128,161778,161779,161781],{"class":130,"line":244},[128,161780,5299],{"class":134},[128,161782,241],{"class":138},[128,161784,161785,161787,161789,161792],{"class":130,"line":287},[128,161786,437],{"class":166},[128,161788,253],{"class":138},[128,161790,161791],{"class":176},"\"会员等级输入错误，按普通会员计算\"",[128,161793,180],{"class":138},[128,161795,161796],{"class":130,"line":301},[128,161797,160],{"emptyLinePlaceholder":159},[128,161799,161800,161803,161805,161808,161810],{"class":130,"line":310},[128,161801,161802],{"class":138},"pay ",[128,161804,270],{"class":134},[128,161806,161807],{"class":138}," amount ",[128,161809,4205],{"class":134},[128,161811,160154],{"class":138},[128,161813,161814],{"class":130,"line":323},[128,161815,160],{"emptyLinePlaceholder":159},[128,161817,161818,161820,161823,161825,161828],{"class":130,"line":330},[128,161819,1800],{"class":134},[128,161821,161822],{"class":138}," pay ",[128,161824,5308],{"class":134},[128,161826,161827],{"class":166}," 500",[128,161829,241],{"class":138},[128,161831,161832,161835,161837],{"class":130,"line":335},[128,161833,161834],{"class":138},"    pay ",[128,161836,153569],{"class":134},[128,161838,161839],{"class":166}," 50\n",[128,161841,161842],{"class":130,"line":340},[128,161843,160],{"emptyLinePlaceholder":159},[128,161845,161846,161848,161850,161852,161854,161856,161859,161861,161863,161865],{"class":130,"line":351},[128,161847,2469],{"class":166},[128,161849,253],{"class":138},[128,161851,3019],{"class":134},[128,161853,160235],{"class":176},[128,161855,1379],{"class":166},[128,161857,161858],{"class":138},"pay",[128,161860,160038],{"class":134},[128,161862,1453],{"class":166},[128,161864,159891],{"class":176},[128,161866,180],{"class":138},[14,161868,161870],{"id":161869},"_312-易错点","3.12 易错点",[26,161872,161873,161876,161879,161882,161887],{},[29,161874,161875],{},"冒号不能漏。",[29,161877,161878],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[29,161880,161881],{},"多分支判断要注意顺序。",[29,161883,161884,161885,1842],{},"判断相等用 ",[114,161886,570],{},[29,161888,161889],{},"字符串比较区分大小写：",[106,161891,161893],{"className":122,"code":161892,"language":124,"meta":112,"style":112},"\"Y\" == \"y\"  # False\n",[114,161894,161895],{"__ignoreMap":112},[128,161896,161897,161900,161902,161904],{"class":130,"line":131},[128,161898,161899],{"class":176},"\"Y\"",[128,161901,1806],{"class":134},[128,161903,160884],{"class":176},[128,161905,161906],{"class":3814},"  # False\n",[19,161908,161909],{},"可转换后再判断：",[106,161911,161913],{"className":122,"code":161912,"language":124,"meta":112,"style":112},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[114,161914,161915,161932,161945],{"__ignoreMap":112},[128,161916,161917,161920,161922,161924,161926,161929],{"class":130,"line":131},[128,161918,161919],{"class":138},"answer ",[128,161921,270],{"class":134},[128,161923,772],{"class":166},[128,161925,253],{"class":138},[128,161927,161928],{"class":176},"\"是否继续(y\u002Fn):\"",[128,161930,161931],{"class":138},").lower()\n",[128,161933,161934,161936,161939,161941,161943],{"class":130,"line":142},[128,161935,1800],{"class":134},[128,161937,161938],{"class":138}," answer ",[128,161940,570],{"class":134},[128,161942,160884],{"class":176},[128,161944,241],{"class":138},[128,161946,161947,161949,161951,161954],{"class":130,"line":156},[128,161948,437],{"class":166},[128,161950,253],{"class":138},[128,161952,161953],{"class":176},"\"继续\"",[128,161955,180],{"class":138},[14,161957,161959],{"id":161958},"_313-本章练习","3.13 本章练习",[26,161961,161962,161965,161968,161971,161981],{},[29,161963,161964],{},"输入年龄，判断是否成年。",[29,161966,161967],{},"输入年份，判断是否为闰年。",[29,161969,161970],{},"输入三个数字，输出最大值。",[29,161972,161973,161974,161977,161978,161980],{},"写登录判断：用户名是 ",[114,161975,161976],{},"admin"," 且密码是 ",[114,161979,18606],{}," 才登录成功。",[29,161982,161983],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[3659,161985,161986],{},"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":112,"searchDepth":142,"depth":142,"links":161988},[161989,161990,161991,161992,161993,161994,161999,162000,162001,162002,162003,162004,162005],{"id":160377,"depth":142,"text":160378},{"id":160430,"depth":142,"text":160431},{"id":160534,"depth":142,"text":160535},{"id":160624,"depth":142,"text":160625},{"id":160814,"depth":142,"text":160815},{"id":160937,"depth":142,"text":160938,"children":161995},[161996,161997,161998],{"id":160941,"depth":156,"text":160942},{"id":160998,"depth":156,"text":160999},{"id":161055,"depth":156,"text":161056},{"id":161100,"depth":142,"text":161101},{"id":161191,"depth":142,"text":161192},{"id":161318,"depth":142,"text":161319},{"id":161448,"depth":142,"text":161449},{"id":161633,"depth":142,"text":161634},{"id":161869,"depth":142,"text":161870},{"id":161958,"depth":142,"text":161959},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":160369,"description":3686},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":162012,"title":162013,"body":162014,"description":3686,"extension":3687,"meta":163783,"navigation":159,"path":163784,"seo":163785,"stem":163786,"__hash__":163787},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":162015,"toc":163763},[162016,162019,162023,162029,162032,162049,162053,162055,162072,162074,162119,162121,162138,162142,162145,162211,162214,162232,162236,162397,162406,162410,162414,162419,162466,162468,162474,162478,162483,162530,162532,162538,162542,162547,162583,162586,162633,162637,162643,162701,162706,162737,162742,162746,162801,162804,162876,162879,162938,162942,162945,163020,163023,163027,163133,163136,163162,163166,163178,163247,163250,163342,163346,163348,163359,163361,163491,163495,163697,163705,163709,163739,163743,163760],[10,162017,162013],{"id":162018},"_4-循环语句",[14,162020,162022],{"id":162021},"_41-为什么需要循环","4.1 为什么需要循环",[19,162024,162025,162026,162028],{},"如果要输出 1 到 100，不应该写 100 行 ",[114,162027,149819],{},"，而应该用循环。",[19,162030,162031],{},"循环适合处理重复任务：",[26,162033,162034,162037,162040,162043,162046],{},[29,162035,162036],{},"重复输出。",[29,162038,162039],{},"重复输入。",[29,162041,162042],{},"遍历数据。",[29,162044,162045],{},"持续执行菜单。",[29,162047,162048],{},"批量处理文件或数据。",[14,162050,162052],{"id":162051},"_42-while循环","4.2 while循环",[19,162054,8743],{},[106,162056,162058],{"className":122,"code":162057,"language":124,"meta":112,"style":112},"while 条件:\n    循环体\n",[114,162059,162060,162067],{"__ignoreMap":112},[128,162061,162062,162064],{"class":130,"line":131},[128,162063,3329],{"class":134},[128,162065,162066],{"class":138}," 条件:\n",[128,162068,162069],{"class":130,"line":142},[128,162070,162071],{"class":138},"    循环体\n",[19,162073,3488],{},[106,162075,162077],{"className":122,"code":162076,"language":124,"meta":112,"style":112},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[114,162078,162079,162087,162091,162103,162110],{"__ignoreMap":112},[128,162080,162081,162083,162085],{"class":130,"line":131},[128,162082,103517],{"class":138},[128,162084,270],{"class":134},[128,162086,59079],{"class":166},[128,162088,162089],{"class":130,"line":142},[128,162090,160],{"emptyLinePlaceholder":159},[128,162092,162093,162095,162097,162099,162101],{"class":130,"line":156},[128,162094,3329],{"class":134},[128,162096,12984],{"class":138},[128,162098,5197],{"class":134},[128,162100,5734],{"class":166},[128,162102,241],{"class":138},[128,162104,162105,162107],{"class":130,"line":163},[128,162106,437],{"class":166},[128,162108,162109],{"class":138},"(i)\n",[128,162111,162112,162115,162117],{"class":130,"line":183},[128,162113,162114],{"class":138},"    i ",[128,162116,13023],{"class":134},[128,162118,59079],{"class":166},[19,162120,84302],{},[26,162122,162123,162129,162132,162135],{},[29,162124,162125,162126,1842],{},"判断条件 ",[114,162127,162128],{},"i \u003C= 5",[29,162130,162131],{},"条件成立，执行循环体。",[29,162133,162134],{},"执行完后回到条件判断。",[29,162136,162137],{},"条件不成立，退出循环。",[14,162139,162141],{"id":162140},"_43-while累加","4.3 while累加",[19,162143,162144],{},"计算 1 到 100 的和：",[106,162146,162148],{"className":122,"code":162147,"language":124,"meta":112,"style":112},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[114,162149,162150,162158,162166,162170,162182,162192,162200,162204],{"__ignoreMap":112},[128,162151,162152,162154,162156],{"class":130,"line":131},[128,162153,103517],{"class":138},[128,162155,270],{"class":134},[128,162157,59079],{"class":166},[128,162159,162160,162162,162164],{"class":130,"line":142},[128,162161,160139],{"class":138},[128,162163,270],{"class":134},[128,162165,50718],{"class":166},[128,162167,162168],{"class":130,"line":156},[128,162169,160],{"emptyLinePlaceholder":159},[128,162171,162172,162174,162176,162178,162180],{"class":130,"line":163},[128,162173,3329],{"class":134},[128,162175,12984],{"class":138},[128,162177,5197],{"class":134},[128,162179,9312],{"class":166},[128,162181,241],{"class":138},[128,162183,162184,162187,162189],{"class":130,"line":183},[128,162185,162186],{"class":138},"    total ",[128,162188,13023],{"class":134},[128,162190,162191],{"class":138}," i\n",[128,162193,162194,162196,162198],{"class":130,"line":188},[128,162195,162114],{"class":138},[128,162197,13023],{"class":134},[128,162199,59079],{"class":166},[128,162201,162202],{"class":130,"line":193},[128,162203,160],{"emptyLinePlaceholder":159},[128,162205,162206,162208],{"class":130,"line":206},[128,162207,2469],{"class":166},[128,162209,162210],{"class":138},"(total)\n",[19,162212,162213],{},"核心思想：",[26,162215,162216,162221,162226],{},[29,162217,162218,162220],{},[114,162219,4191],{}," 控制循环次数。",[29,162222,162223,162225],{},[114,162224,160240],{}," 保存累加结果。",[29,162227,162228,162229,162231],{},"每轮循环都要更新 ",[114,162230,4191],{},"，否则可能死循环。",[14,162233,162235],{"id":162234},"_44-while猜数字","4.4 while猜数字",[106,162237,162239],{"className":122,"code":162238,"language":124,"meta":112,"style":112},"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",[114,162240,162241,162247,162251,162268,162276,162280,162288,162308,162317,162321,162333,162344,162354,162365,162371,162393],{"__ignoreMap":112},[128,162242,162243,162245],{"class":130,"line":131},[128,162244,135],{"class":134},[128,162246,48714],{"class":138},[128,162248,162249],{"class":130,"line":142},[128,162250,160],{"emptyLinePlaceholder":159},[128,162252,162253,162255,162257,162260,162262,162264,162266],{"class":130,"line":156},[128,162254,161919],{"class":138},[128,162256,270],{"class":134},[128,162258,162259],{"class":138}," random.randint(",[128,162261,2592],{"class":166},[128,162263,258],{"class":138},[128,162265,4061],{"class":166},[128,162267,180],{"class":138},[128,162269,162270,162272,162274],{"class":130,"line":163},[128,162271,150038],{"class":138},[128,162273,270],{"class":134},[128,162275,50718],{"class":166},[128,162277,162278],{"class":130,"line":183},[128,162279,160],{"emptyLinePlaceholder":159},[128,162281,162282,162284,162286],{"class":130,"line":188},[128,162283,3329],{"class":134},[128,162285,620],{"class":166},[128,162287,241],{"class":138},[128,162289,162290,162293,162295,162297,162299,162301,162303,162306],{"class":130,"line":193},[128,162291,162292],{"class":138},"    guess ",[128,162294,270],{"class":134},[128,162296,638],{"class":166},[128,162298,253],{"class":138},[128,162300,643],{"class":166},[128,162302,253],{"class":138},[128,162304,162305],{"class":176},"\"请输入1到100之间的数字:\"",[128,162307,3034],{"class":138},[128,162309,162310,162313,162315],{"class":130,"line":206},[128,162311,162312],{"class":138},"    count ",[128,162314,13023],{"class":134},[128,162316,59079],{"class":166},[128,162318,162319],{"class":130,"line":221},[128,162320,160],{"emptyLinePlaceholder":159},[128,162322,162323,162325,162328,162330],{"class":130,"line":230},[128,162324,209],{"class":134},[128,162326,162327],{"class":138}," guess ",[128,162329,4705],{"class":134},[128,162331,162332],{"class":138}," answer:\n",[128,162334,162335,162337,162339,162342],{"class":130,"line":235},[128,162336,313],{"class":166},[128,162338,253],{"class":138},[128,162340,162341],{"class":176},"\"猜大了\"",[128,162343,180],{"class":138},[128,162345,162346,162348,162350,162352],{"class":130,"line":244},[128,162347,42679],{"class":134},[128,162349,162327],{"class":138},[128,162351,4657],{"class":134},[128,162353,162332],{"class":138},[128,162355,162356,162358,162360,162363],{"class":130,"line":287},[128,162357,313],{"class":166},[128,162359,253],{"class":138},[128,162361,162362],{"class":176},"\"猜小了\"",[128,162364,180],{"class":138},[128,162366,162367,162369],{"class":130,"line":301},[128,162368,160901],{"class":134},[128,162370,241],{"class":138},[128,162372,162373,162375,162377,162379,162382,162384,162386,162388,162391],{"class":130,"line":310},[128,162374,313],{"class":166},[128,162376,253],{"class":138},[128,162378,3019],{"class":134},[128,162380,162381],{"class":176},"\"猜对了，一共猜了",[128,162383,1379],{"class":166},[128,162385,87806],{"class":138},[128,162387,1453],{"class":166},[128,162389,162390],{"class":176},"次\"",[128,162392,180],{"class":138},[128,162394,162395],{"class":130,"line":323},[128,162396,35096],{"class":134},[19,162398,162399,162402,162403,162405],{},[114,162400,162401],{},"while True"," 表示无限循环，通常配合 ",[114,162404,3338],{}," 使用。",[14,162407,162409],{"id":162408},"_45-break和continue","4.5 break和continue",[72,162411,162413],{"id":162412},"_451-break","4.5.1 break",[19,162415,162416,162418],{},[114,162417,3338],{}," 直接结束整个循环。",[106,162420,162422],{"className":122,"code":162421,"language":124,"meta":112,"style":112},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[114,162423,162424,162444,162456,162460],{"__ignoreMap":112},[128,162425,162426,162428,162430,162432,162434,162436,162438,162440,162442],{"class":130,"line":131},[128,162427,2404],{"class":134},[128,162429,12984],{"class":138},[128,162431,549],{"class":134},[128,162433,35910],{"class":166},[128,162435,253],{"class":138},[128,162437,2592],{"class":166},[128,162439,258],{"class":138},[128,162441,4094],{"class":166},[128,162443,34264],{"class":138},[128,162445,162446,162448,162450,162452,162454],{"class":130,"line":142},[128,162447,209],{"class":134},[128,162449,12984],{"class":138},[128,162451,570],{"class":134},[128,162453,81444],{"class":166},[128,162455,241],{"class":138},[128,162457,162458],{"class":130,"line":156},[128,162459,35096],{"class":134},[128,162461,162462,162464],{"class":130,"line":163},[128,162463,437],{"class":166},[128,162465,162109],{"class":138},[19,162467,149804],{},[106,162469,162472],{"className":162470,"code":162471,"language":111,"meta":112},[109],"1\n2\n",[114,162473,162471],{"__ignoreMap":112},[72,162475,162477],{"id":162476},"_452-continue","4.5.2 continue",[19,162479,162480,162482],{},[114,162481,3341],{}," 跳过本轮剩余代码，进入下一轮循环。",[106,162484,162486],{"className":122,"code":162485,"language":124,"meta":112,"style":112},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[114,162487,162488,162508,162520,162524],{"__ignoreMap":112},[128,162489,162490,162492,162494,162496,162498,162500,162502,162504,162506],{"class":130,"line":131},[128,162491,2404],{"class":134},[128,162493,12984],{"class":138},[128,162495,549],{"class":134},[128,162497,35910],{"class":166},[128,162499,253],{"class":138},[128,162501,2592],{"class":166},[128,162503,258],{"class":138},[128,162505,4094],{"class":166},[128,162507,34264],{"class":138},[128,162509,162510,162512,162514,162516,162518],{"class":130,"line":142},[128,162511,209],{"class":134},[128,162513,12984],{"class":138},[128,162515,570],{"class":134},[128,162517,81444],{"class":166},[128,162519,241],{"class":138},[128,162521,162522],{"class":130,"line":156},[128,162523,151835],{"class":134},[128,162525,162526,162528],{"class":130,"line":163},[128,162527,437],{"class":166},[128,162529,162109],{"class":138},[19,162531,149804],{},[106,162533,162536],{"className":162534,"code":162535,"language":111,"meta":112},[109],"1\n2\n4\n5\n",[114,162537,162535],{"__ignoreMap":112},[14,162539,162541],{"id":162540},"_46-for循环","4.6 for循环",[19,162543,162544,162546],{},[114,162545,2404],{}," 常用于遍历序列。",[106,162548,162550],{"className":122,"code":162549,"language":124,"meta":112,"style":112},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[114,162551,162552,162561,162565,162576],{"__ignoreMap":112},[128,162553,162554,162556,162558],{"class":130,"line":131},[128,162555,149883],{"class":138},[128,162557,270],{"class":134},[128,162559,162560],{"class":176}," \"python\"\n",[128,162562,162563],{"class":130,"line":142},[128,162564,160],{"emptyLinePlaceholder":159},[128,162566,162567,162569,162572,162574],{"class":130,"line":156},[128,162568,2404],{"class":134},[128,162570,162571],{"class":138}," ch ",[128,162573,549],{"class":134},[128,162575,161278],{"class":138},[128,162577,162578,162580],{"class":130,"line":163},[128,162579,437],{"class":166},[128,162581,162582],{"class":138},"(ch)\n",[19,162584,162585],{},"遍历列表：",[106,162587,162589],{"className":122,"code":162588,"language":124,"meta":112,"style":112},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[114,162590,162591,162613,162617,162627],{"__ignoreMap":112},[128,162592,162593,162596,162598,162600,162602,162604,162606,162608,162611],{"class":130,"line":131},[128,162594,162595],{"class":138},"students ",[128,162597,270],{"class":134},[128,162599,55608],{"class":138},[128,162601,153205],{"class":176},[128,162603,258],{"class":138},[128,162605,154253],{"class":176},[128,162607,258],{"class":138},[128,162609,162610],{"class":176},"\"小刚\"",[128,162612,2376],{"class":138},[128,162614,162615],{"class":130,"line":142},[128,162616,160],{"emptyLinePlaceholder":159},[128,162618,162619,162621,162623,162625],{"class":130,"line":156},[128,162620,2404],{"class":134},[128,162622,546],{"class":138},[128,162624,549],{"class":134},[128,162626,552],{"class":138},[128,162628,162629,162631],{"class":130,"line":163},[128,162630,437],{"class":166},[128,162632,153359],{"class":138},[14,162634,162636],{"id":162635},"_47-range函数","4.7 range函数",[19,162638,162639,162642],{},[114,162640,162641],{},"range()"," 用于生成整数序列。",[106,162644,162646],{"className":122,"code":162645,"language":124,"meta":112,"style":112},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[114,162647,162648,162662,162680],{"__ignoreMap":112},[128,162649,162650,162652,162654,162656,162659],{"class":130,"line":131},[128,162651,36812],{"class":166},[128,162653,253],{"class":138},[128,162655,4069],{"class":166},[128,162657,162658],{"class":138},")          ",[128,162660,162661],{"class":3814},"# 0,1,2,3,4\n",[128,162663,162664,162666,162668,162670,162672,162674,162677],{"class":130,"line":142},[128,162665,36812],{"class":166},[128,162667,253],{"class":138},[128,162669,2592],{"class":166},[128,162671,258],{"class":138},[128,162673,4069],{"class":166},[128,162675,162676],{"class":138},")       ",[128,162678,162679],{"class":3814},"# 1,2,3,4\n",[128,162681,162682,162684,162686,162688,162690,162692,162694,162696,162698],{"class":130,"line":156},[128,162683,36812],{"class":166},[128,162685,253],{"class":138},[128,162687,2592],{"class":166},[128,162689,258],{"class":138},[128,162691,4196],{"class":166},[128,162693,258],{"class":138},[128,162695,409],{"class":166},[128,162697,158540],{"class":138},[128,162699,162700],{"class":3814},"# 1,3,5,7,9\n",[19,162702,162703,162704,28105],{},"配合 ",[114,162705,2404],{},[106,162707,162709],{"className":122,"code":162708,"language":124,"meta":112,"style":112},"for i in range(1, 6):\n    print(i)\n",[114,162710,162711,162731],{"__ignoreMap":112},[128,162712,162713,162715,162717,162719,162721,162723,162725,162727,162729],{"class":130,"line":131},[128,162714,2404],{"class":134},[128,162716,12984],{"class":138},[128,162718,549],{"class":134},[128,162720,35910],{"class":166},[128,162722,253],{"class":138},[128,162724,2592],{"class":166},[128,162726,258],{"class":138},[128,162728,4094],{"class":166},[128,162730,34264],{"class":138},[128,162732,162733,162735],{"class":130,"line":142},[128,162734,437],{"class":166},[128,162736,162109],{"class":138},[19,162738,12571,162739,162741],{},[114,162740,36812],{}," 的结束值不包含在内。",[14,162743,162745],{"id":162744},"_48-for循环求和","4.8 for循环求和",[106,162747,162749],{"className":122,"code":162748,"language":124,"meta":112,"style":112},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[114,162750,162751,162759,162763,162783,162791,162795],{"__ignoreMap":112},[128,162752,162753,162755,162757],{"class":130,"line":131},[128,162754,160139],{"class":138},[128,162756,270],{"class":134},[128,162758,50718],{"class":166},[128,162760,162761],{"class":130,"line":142},[128,162762,160],{"emptyLinePlaceholder":159},[128,162764,162765,162767,162769,162771,162773,162775,162777,162779,162781],{"class":130,"line":156},[128,162766,2404],{"class":134},[128,162768,12984],{"class":138},[128,162770,549],{"class":134},[128,162772,35910],{"class":166},[128,162774,253],{"class":138},[128,162776,2592],{"class":166},[128,162778,258],{"class":138},[128,162780,4087],{"class":166},[128,162782,34264],{"class":138},[128,162784,162785,162787,162789],{"class":130,"line":163},[128,162786,162186],{"class":138},[128,162788,13023],{"class":134},[128,162790,162191],{"class":138},[128,162792,162793],{"class":130,"line":183},[128,162794,160],{"emptyLinePlaceholder":159},[128,162796,162797,162799],{"class":130,"line":188},[128,162798,2469],{"class":166},[128,162800,162210],{"class":138},[19,162802,162803],{},"求偶数和：",[106,162805,162807],{"className":122,"code":162806,"language":124,"meta":112,"style":112},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[114,162808,162809,162817,162821,162841,162857,162866,162870],{"__ignoreMap":112},[128,162810,162811,162813,162815],{"class":130,"line":131},[128,162812,160139],{"class":138},[128,162814,270],{"class":134},[128,162816,50718],{"class":166},[128,162818,162819],{"class":130,"line":142},[128,162820,160],{"emptyLinePlaceholder":159},[128,162822,162823,162825,162827,162829,162831,162833,162835,162837,162839],{"class":130,"line":156},[128,162824,2404],{"class":134},[128,162826,12984],{"class":138},[128,162828,549],{"class":134},[128,162830,35910],{"class":166},[128,162832,253],{"class":138},[128,162834,2592],{"class":166},[128,162836,258],{"class":138},[128,162838,4087],{"class":166},[128,162840,34264],{"class":138},[128,162842,162843,162845,162847,162849,162851,162853,162855],{"class":130,"line":163},[128,162844,209],{"class":134},[128,162846,12984],{"class":138},[128,162848,4078],{"class":134},[128,162850,18277],{"class":166},[128,162852,1806],{"class":134},[128,162854,7659],{"class":166},[128,162856,241],{"class":138},[128,162858,162859,162862,162864],{"class":130,"line":183},[128,162860,162861],{"class":138},"        total ",[128,162863,13023],{"class":134},[128,162865,162191],{"class":138},[128,162867,162868],{"class":130,"line":188},[128,162869,160],{"emptyLinePlaceholder":159},[128,162871,162872,162874],{"class":130,"line":193},[128,162873,2469],{"class":166},[128,162875,162210],{"class":138},[19,162877,162878],{},"也可以：",[106,162880,162882],{"className":122,"code":162881,"language":124,"meta":112,"style":112},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[114,162883,162884,162892,162896,162920,162928,162932],{"__ignoreMap":112},[128,162885,162886,162888,162890],{"class":130,"line":131},[128,162887,160139],{"class":138},[128,162889,270],{"class":134},[128,162891,50718],{"class":166},[128,162893,162894],{"class":130,"line":142},[128,162895,160],{"emptyLinePlaceholder":159},[128,162897,162898,162900,162902,162904,162906,162908,162910,162912,162914,162916,162918],{"class":130,"line":156},[128,162899,2404],{"class":134},[128,162901,12984],{"class":138},[128,162903,549],{"class":134},[128,162905,35910],{"class":166},[128,162907,253],{"class":138},[128,162909,409],{"class":166},[128,162911,258],{"class":138},[128,162913,4087],{"class":166},[128,162915,258],{"class":138},[128,162917,409],{"class":166},[128,162919,34264],{"class":138},[128,162921,162922,162924,162926],{"class":130,"line":163},[128,162923,162186],{"class":138},[128,162925,13023],{"class":134},[128,162927,162191],{"class":138},[128,162929,162930],{"class":130,"line":183},[128,162931,160],{"emptyLinePlaceholder":159},[128,162933,162934,162936],{"class":130,"line":188},[128,162935,2469],{"class":166},[128,162937,162210],{"class":138},[14,162939,162941],{"id":162940},"_49-循环嵌套","4.9 循环嵌套",[19,162943,162944],{},"嵌套循环就是循环里面再写循环。",[106,162946,162948],{"className":122,"code":162947,"language":124,"meta":112,"style":112},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[114,162949,162950,162970,162990],{"__ignoreMap":112},[128,162951,162952,162954,162956,162958,162960,162962,162964,162966,162968],{"class":130,"line":131},[128,162953,2404],{"class":134},[128,162955,12984],{"class":138},[128,162957,549],{"class":134},[128,162959,35910],{"class":166},[128,162961,253],{"class":138},[128,162963,2592],{"class":166},[128,162965,258],{"class":138},[128,162967,4043],{"class":166},[128,162969,34264],{"class":138},[128,162971,162972,162974,162976,162978,162980,162982,162984,162986,162988],{"class":130,"line":142},[128,162973,543],{"class":134},[128,162975,13046],{"class":138},[128,162977,549],{"class":134},[128,162979,35910],{"class":166},[128,162981,253],{"class":138},[128,162983,2592],{"class":166},[128,162985,258],{"class":138},[128,162987,4043],{"class":166},[128,162989,34264],{"class":138},[128,162991,162992,162994,162996,162998,163001,163003,163005,163007,163010,163012,163014,163016,163018],{"class":130,"line":156},[128,162993,313],{"class":166},[128,162995,253],{"class":138},[128,162997,3019],{"class":134},[128,162999,163000],{"class":176},"\"i=",[128,163002,1379],{"class":166},[128,163004,4191],{"class":138},[128,163006,1453],{"class":166},[128,163008,163009],{"class":176},", j=",[128,163011,1379],{"class":166},[128,163013,4217],{"class":138},[128,163015,1453],{"class":166},[128,163017,1376],{"class":176},[128,163019,180],{"class":138},[19,163021,163022],{},"外层循环执行一次，内层循环执行完整一轮。",[14,163024,163026],{"id":163025},"_410-九九乘法表","4.10 九九乘法表",[106,163028,163030],{"className":122,"code":163029,"language":124,"meta":112,"style":112},"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",[114,163031,163032,163052,163075,163127],{"__ignoreMap":112},[128,163033,163034,163036,163038,163040,163042,163044,163046,163048,163050],{"class":130,"line":131},[128,163035,2404],{"class":134},[128,163037,12984],{"class":138},[128,163039,549],{"class":134},[128,163041,35910],{"class":166},[128,163043,253],{"class":138},[128,163045,2592],{"class":166},[128,163047,258],{"class":138},[128,163049,4196],{"class":166},[128,163051,34264],{"class":138},[128,163053,163054,163056,163058,163060,163062,163064,163066,163069,163071,163073],{"class":130,"line":142},[128,163055,543],{"class":134},[128,163057,13046],{"class":138},[128,163059,549],{"class":134},[128,163061,35910],{"class":166},[128,163063,253],{"class":138},[128,163065,2592],{"class":166},[128,163067,163068],{"class":138},", i ",[128,163070,2457],{"class":134},[128,163072,28605],{"class":166},[128,163074,34264],{"class":138},[128,163076,163077,163079,163081,163083,163085,163087,163089,163091,163093,163095,163097,163099,163101,163103,163105,163107,163109,163111,163113,163115,163117,163119,163121,163123,163125],{"class":130,"line":156},[128,163078,313],{"class":166},[128,163080,253],{"class":138},[128,163082,3019],{"class":134},[128,163084,1376],{"class":176},[128,163086,1379],{"class":166},[128,163088,4217],{"class":138},[128,163090,1453],{"class":166},[128,163092,4205],{"class":176},[128,163094,1379],{"class":166},[128,163096,4191],{"class":138},[128,163098,1453],{"class":166},[128,163100,270],{"class":176},[128,163102,1379],{"class":166},[128,163104,103517],{"class":138},[128,163106,4205],{"class":134},[128,163108,6978],{"class":138},[128,163110,1453],{"class":166},[128,163112,1376],{"class":176},[128,163114,258],{"class":138},[128,163116,49186],{"class":266},[128,163118,270],{"class":134},[128,163120,1376],{"class":176},[128,163122,1525],{"class":166},[128,163124,1376],{"class":176},[128,163126,180],{"class":138},[128,163128,163129,163131],{"class":130,"line":163},[128,163130,437],{"class":166},[128,163132,5563],{"class":138},[19,163134,163135],{},"关键点：",[26,163137,163138,163144,163150,163156],{},[29,163139,163140,163141,163143],{},"外层 ",[114,163142,4191],{}," 控制行。",[29,163145,163146,163147,163149],{},"内层 ",[114,163148,4217],{}," 控制列。",[29,163151,163152,163153,163155],{},"每行结束后用 ",[114,163154,149819],{}," 换行。",[29,163157,163158,163161],{},[114,163159,163160],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,163163,163165],{"id":163164},"_411-循环else","4.11 循环else",[19,163167,163168,163169,163171,163172,163174,163175,163177],{},"Python 的循环可以带 ",[114,163170,5299],{},"。当循环正常结束时执行 ",[114,163173,5299],{},"，如果被 ",[114,163176,3338],{}," 打断，则不执行。",[106,163179,163181],{"className":122,"code":163180,"language":124,"meta":112,"style":112},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[114,163182,163183,163203,163215,163226,163230,163236],{"__ignoreMap":112},[128,163184,163185,163187,163189,163191,163193,163195,163197,163199,163201],{"class":130,"line":131},[128,163186,2404],{"class":134},[128,163188,12984],{"class":138},[128,163190,549],{"class":134},[128,163192,35910],{"class":166},[128,163194,253],{"class":138},[128,163196,2592],{"class":166},[128,163198,258],{"class":138},[128,163200,4094],{"class":166},[128,163202,34264],{"class":138},[128,163204,163205,163207,163209,163211,163213],{"class":130,"line":142},[128,163206,209],{"class":134},[128,163208,12984],{"class":138},[128,163210,570],{"class":134},[128,163212,5625],{"class":166},[128,163214,241],{"class":138},[128,163216,163217,163219,163221,163224],{"class":130,"line":156},[128,163218,313],{"class":166},[128,163220,253],{"class":138},[128,163222,163223],{"class":176},"\"找到了\"",[128,163225,180],{"class":138},[128,163227,163228],{"class":130,"line":163},[128,163229,35096],{"class":134},[128,163231,163232,163234],{"class":130,"line":183},[128,163233,5299],{"class":134},[128,163235,241],{"class":138},[128,163237,163238,163240,163242,163245],{"class":130,"line":188},[128,163239,437],{"class":166},[128,163241,253],{"class":138},[128,163243,163244],{"class":176},"\"没找到\"",[128,163246,180],{"class":138},[19,163248,163249],{},"常用于搜索。",[106,163251,163253],{"className":122,"code":163252,"language":124,"meta":112,"style":112},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[114,163254,163255,163276,163285,163289,163301,163312,163322,163326,163332],{"__ignoreMap":112},[128,163256,163257,163260,163262,163264,163266,163268,163270,163272,163274],{"class":130,"line":131},[128,163258,163259],{"class":138},"names ",[128,163261,270],{"class":134},[128,163263,55608],{"class":138},[128,163265,153205],{"class":176},[128,163267,258],{"class":138},[128,163269,154253],{"class":176},[128,163271,258],{"class":138},[128,163273,162610],{"class":176},[128,163275,2376],{"class":138},[128,163277,163278,163280,163282],{"class":130,"line":142},[128,163279,114935],{"class":138},[128,163281,270],{"class":134},[128,163283,163284],{"class":176}," \"小李\"\n",[128,163286,163287],{"class":130,"line":156},[128,163288,160],{"emptyLinePlaceholder":159},[128,163290,163291,163293,163296,163298],{"class":130,"line":163},[128,163292,2404],{"class":134},[128,163294,163295],{"class":138}," name ",[128,163297,549],{"class":134},[128,163299,163300],{"class":138}," names:\n",[128,163302,163303,163305,163307,163309],{"class":130,"line":183},[128,163304,209],{"class":134},[128,163306,163295],{"class":138},[128,163308,570],{"class":134},[128,163310,163311],{"class":138}," target:\n",[128,163313,163314,163316,163318,163320],{"class":130,"line":188},[128,163315,313],{"class":166},[128,163317,253],{"class":138},[128,163319,163223],{"class":176},[128,163321,180],{"class":138},[128,163323,163324],{"class":130,"line":193},[128,163325,35096],{"class":134},[128,163327,163328,163330],{"class":130,"line":206},[128,163329,5299],{"class":134},[128,163331,241],{"class":138},[128,163333,163334,163336,163338,163340],{"class":130,"line":221},[128,163335,437],{"class":166},[128,163337,253],{"class":138},[128,163339,163244],{"class":176},[128,163341,180],{"class":138},[14,163343,163345],{"id":163344},"_412-小案例登录重试","4.12 小案例：登录重试",[19,163347,126648],{},[26,163349,163350,163353,163356],{},[29,163351,163352],{},"用户最多输入 3 次密码。",[29,163354,163355],{},"密码正确则登录成功。",[29,163357,163358],{},"3 次都错误则锁定账号。",[19,163360,13562],{},[106,163362,163364],{"className":122,"code":163363,"language":124,"meta":112,"style":112},"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",[114,163365,163366,163376,163380,163396,163412,163416,163428,163439,163443,163449,163474,163480],{"__ignoreMap":112},[128,163367,163368,163371,163373],{"class":130,"line":131},[128,163369,163370],{"class":138},"password ",[128,163372,270],{"class":134},[128,163374,163375],{"class":176}," \"123456\"\n",[128,163377,163378],{"class":130,"line":142},[128,163379,160],{"emptyLinePlaceholder":159},[128,163381,163382,163384,163386,163388,163390,163392,163394],{"class":130,"line":156},[128,163383,2404],{"class":134},[128,163385,12984],{"class":138},[128,163387,549],{"class":134},[128,163389,35910],{"class":166},[128,163391,253],{"class":138},[128,163393,3827],{"class":166},[128,163395,34264],{"class":138},[128,163397,163398,163401,163403,163405,163407,163410],{"class":130,"line":163},[128,163399,163400],{"class":138},"    user_password ",[128,163402,270],{"class":134},[128,163404,772],{"class":166},[128,163406,253],{"class":138},[128,163408,163409],{"class":176},"\"请输入密码:\"",[128,163411,180],{"class":138},[128,163413,163414],{"class":130,"line":183},[128,163415,160],{"emptyLinePlaceholder":159},[128,163417,163418,163420,163423,163425],{"class":130,"line":188},[128,163419,209],{"class":134},[128,163421,163422],{"class":138}," user_password ",[128,163424,570],{"class":134},[128,163426,163427],{"class":138}," password:\n",[128,163429,163430,163432,163434,163437],{"class":130,"line":193},[128,163431,313],{"class":166},[128,163433,253],{"class":138},[128,163435,163436],{"class":176},"\"登录成功\"",[128,163438,180],{"class":138},[128,163440,163441],{"class":130,"line":206},[128,163442,35096],{"class":134},[128,163444,163445,163447],{"class":130,"line":221},[128,163446,160901],{"class":134},[128,163448,241],{"class":138},[128,163450,163451,163453,163455,163457,163460,163463,163465,163467,163469,163472],{"class":130,"line":230},[128,163452,313],{"class":166},[128,163454,253],{"class":138},[128,163456,3019],{"class":134},[128,163458,163459],{"class":176},"\"密码错误，还剩",[128,163461,163462],{"class":166},"{2",[128,163464,55653],{"class":134},[128,163466,6603],{"class":138},[128,163468,1453],{"class":166},[128,163470,163471],{"class":176},"次机会\"",[128,163473,180],{"class":138},[128,163475,163476,163478],{"class":130,"line":235},[128,163477,5299],{"class":134},[128,163479,241],{"class":138},[128,163481,163482,163484,163486,163489],{"class":130,"line":244},[128,163483,437],{"class":166},[128,163485,253],{"class":138},[128,163487,163488],{"class":176},"\"账号已锁定\"",[128,163490,180],{"class":138},[14,163492,163494],{"id":163493},"_413-小案例菜单程序","4.13 小案例：菜单程序",[106,163496,163498],{"className":122,"code":163497,"language":124,"meta":112,"style":112},"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",[114,163499,163500,163508,163519,163530,163541,163552,163563,163567,163582,163586,163598,163609,163621,163632,163644,163655,163667,163677,163681,163687],{"__ignoreMap":112},[128,163501,163502,163504,163506],{"class":130,"line":131},[128,163503,3329],{"class":134},[128,163505,620],{"class":166},[128,163507,241],{"class":138},[128,163509,163510,163512,163514,163517],{"class":130,"line":142},[128,163511,437],{"class":166},[128,163513,253],{"class":138},[128,163515,163516],{"class":176},"\"====== 菜单 ======\"",[128,163518,180],{"class":138},[128,163520,163521,163523,163525,163528],{"class":130,"line":156},[128,163522,437],{"class":166},[128,163524,253],{"class":138},[128,163526,163527],{"class":176},"\"1. 查询余额\"",[128,163529,180],{"class":138},[128,163531,163532,163534,163536,163539],{"class":130,"line":163},[128,163533,437],{"class":166},[128,163535,253],{"class":138},[128,163537,163538],{"class":176},"\"2. 存款\"",[128,163540,180],{"class":138},[128,163542,163543,163545,163547,163550],{"class":130,"line":183},[128,163544,437],{"class":166},[128,163546,253],{"class":138},[128,163548,163549],{"class":176},"\"3. 取款\"",[128,163551,180],{"class":138},[128,163553,163554,163556,163558,163561],{"class":130,"line":188},[128,163555,437],{"class":166},[128,163557,253],{"class":138},[128,163559,163560],{"class":176},"\"0. 退出\"",[128,163562,180],{"class":138},[128,163564,163565],{"class":130,"line":193},[128,163566,160],{"emptyLinePlaceholder":159},[128,163568,163569,163572,163574,163576,163578,163580],{"class":130,"line":206},[128,163570,163571],{"class":138},"    choice ",[128,163573,270],{"class":134},[128,163575,772],{"class":166},[128,163577,253],{"class":138},[128,163579,1623],{"class":176},[128,163581,180],{"class":138},[128,163583,163584],{"class":130,"line":221},[128,163585,160],{"emptyLinePlaceholder":159},[128,163587,163588,163590,163592,163594,163596],{"class":130,"line":230},[128,163589,209],{"class":134},[128,163591,1638],{"class":138},[128,163593,570],{"class":134},[128,163595,1643],{"class":176},[128,163597,241],{"class":138},[128,163599,163600,163602,163604,163607],{"class":130,"line":235},[128,163601,313],{"class":166},[128,163603,253],{"class":138},[128,163605,163606],{"class":176},"\"余额为1000元\"",[128,163608,180],{"class":138},[128,163610,163611,163613,163615,163617,163619],{"class":130,"line":244},[128,163612,42679],{"class":134},[128,163614,1638],{"class":138},[128,163616,570],{"class":134},[128,163618,1664],{"class":176},[128,163620,241],{"class":138},[128,163622,163623,163625,163627,163630],{"class":130,"line":287},[128,163624,313],{"class":166},[128,163626,253],{"class":138},[128,163628,163629],{"class":176},"\"存款功能\"",[128,163631,180],{"class":138},[128,163633,163634,163636,163638,163640,163642],{"class":130,"line":301},[128,163635,42679],{"class":134},[128,163637,1638],{"class":138},[128,163639,570],{"class":134},[128,163641,1684],{"class":176},[128,163643,241],{"class":138},[128,163645,163646,163648,163650,163653],{"class":130,"line":310},[128,163647,313],{"class":166},[128,163649,253],{"class":138},[128,163651,163652],{"class":176},"\"取款功能\"",[128,163654,180],{"class":138},[128,163656,163657,163659,163661,163663,163665],{"class":130,"line":323},[128,163658,42679],{"class":134},[128,163660,1638],{"class":138},[128,163662,570],{"class":134},[128,163664,1744],{"class":176},[128,163666,241],{"class":138},[128,163668,163669,163671,163673,163675],{"class":130,"line":330},[128,163670,313],{"class":166},[128,163672,253],{"class":138},[128,163674,1756],{"class":176},[128,163676,180],{"class":138},[128,163678,163679],{"class":130,"line":335},[128,163680,35096],{"class":134},[128,163682,163683,163685],{"class":130,"line":340},[128,163684,160901],{"class":134},[128,163686,241],{"class":138},[128,163688,163689,163691,163693,163695],{"class":130,"line":351},[128,163690,313],{"class":166},[128,163692,253],{"class":138},[128,163694,1782],{"class":176},[128,163696,180],{"class":138},[19,163698,163699,163700,163702,163703,1842],{},"菜单类程序通常使用 ",[114,163701,162401],{},"，用户选择退出时 ",[114,163704,3338],{},[14,163706,163708],{"id":163707},"_414-易错点","4.14 易错点",[26,163710,163711,163716,163722,163730,163736],{},[29,163712,163713,163715],{},[114,163714,3329],{}," 循环必须更新控制变量。",[29,163717,163718,163721],{},[114,163719,163720],{},"range(1, 10)"," 不包含 10。",[29,163723,163724,163726,163727,163729],{},[114,163725,3338],{}," 结束整个循环，",[114,163728,3341],{}," 只跳过本轮。",[29,163731,163732,163733,163735],{},"嵌套循环中，",[114,163734,3338],{}," 只跳出当前所在的一层循环。",[29,163737,163738],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,163740,163742],{"id":163741},"_415-本章练习","4.15 本章练习",[26,163744,163745,163748,163751,163754,163757],{},[29,163746,163747],{},"输出 1 到 100。",[29,163749,163750],{},"计算 1 到 100 的偶数和。",[29,163752,163753],{},"输出 100 以内能被 3 和 5 同时整除的数。",[29,163755,163756],{},"编写猜数字游戏，限制最多猜 7 次。",[29,163758,163759],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[3659,163761,163762],{},"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":112,"searchDepth":142,"depth":142,"links":163764},[163765,163766,163767,163768,163769,163773,163774,163775,163776,163777,163778,163779,163780,163781,163782],{"id":162021,"depth":142,"text":162022},{"id":162051,"depth":142,"text":162052},{"id":162140,"depth":142,"text":162141},{"id":162234,"depth":142,"text":162235},{"id":162408,"depth":142,"text":162409,"children":163770},[163771,163772],{"id":162412,"depth":156,"text":162413},{"id":162476,"depth":156,"text":162477},{"id":162540,"depth":142,"text":162541},{"id":162635,"depth":142,"text":162636},{"id":162744,"depth":142,"text":162745},{"id":162940,"depth":142,"text":162941},{"id":163025,"depth":142,"text":163026},{"id":163164,"depth":142,"text":163165},{"id":163344,"depth":142,"text":163345},{"id":163493,"depth":142,"text":163494},{"id":163707,"depth":142,"text":163708},{"id":163741,"depth":142,"text":163742},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":162013,"description":3686},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":163789,"title":163790,"body":163791,"description":3686,"extension":3687,"meta":165796,"navigation":159,"path":165797,"seo":165798,"stem":165799,"__hash__":165800},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":163792,"toc":165776},[163793,163796,163800,163803,163806,163820,163823,163837,163841,163843,163862,163864,163911,163913,163927,163931,164005,164008,164012,164015,164074,164082,164085,164138,164141,164145,164150,164205,164213,164263,164267,164272,164280,164379,164385,164389,164394,164397,164408,164449,164462,164466,164469,164505,164508,164521,164524,164584,164588,164592,164595,164646,164650,164653,164700,164706,164772,164775,164779,164782,164898,164901,164905,164908,165014,165018,165021,165059,165062,165104,165107,165167,165170,165174,165638,165641,165645,165672,165678,165739,165743,165773],[10,163794,163790],{"id":163795},"_5-函数基础",[14,163797,163799],{"id":163798},"_51-为什么需要函数","5.1 为什么需要函数",[19,163801,163802],{},"函数用于封装一段可以重复使用的代码。",[19,163804,163805],{},"不使用函数的问题：",[26,163807,163808,163811,163814,163817],{},[29,163809,163810],{},"重复代码多。",[29,163812,163813],{},"修改逻辑时容易漏改。",[29,163815,163816],{},"主流程不清晰。",[29,163818,163819],{},"程序越写越长，难以维护。",[19,163821,163822],{},"使用函数后的好处：",[26,163824,163825,163828,163831,163834],{},[29,163826,163827],{},"提高复用性。",[29,163829,163830],{},"提高可读性。",[29,163832,163833],{},"便于调试。",[29,163835,163836],{},"便于分工。",[14,163838,163840],{"id":163839},"_52-函数定义","5.2 函数定义",[19,163842,8743],{},[106,163844,163846],{"className":122,"code":163845,"language":124,"meta":112,"style":112},"def 函数名():\n    函数体\n",[114,163847,163848,163857],{"__ignoreMap":112},[128,163849,163850,163852,163855],{"class":130,"line":131},[128,163851,196],{"class":134},[128,163853,163854],{"class":199}," 函数名",[128,163856,203],{"class":138},[128,163858,163859],{"class":130,"line":142},[128,163860,163861],{"class":138},"    函数体\n",[19,163863,3488],{},[106,163865,163867],{"className":122,"code":163866,"language":124,"meta":112,"style":112},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[114,163868,163869,163878,163888,163898,163902,163906],{"__ignoreMap":112},[128,163870,163871,163873,163876],{"class":130,"line":131},[128,163872,196],{"class":134},[128,163874,163875],{"class":199}," say_hello",[128,163877,203],{"class":138},[128,163879,163880,163882,163884,163886],{"class":130,"line":142},[128,163881,437],{"class":166},[128,163883,253],{"class":138},[128,163885,9402],{"class":176},[128,163887,180],{"class":138},[128,163889,163890,163892,163894,163896],{"class":130,"line":156},[128,163891,437],{"class":166},[128,163893,253],{"class":138},[128,163895,149986],{"class":176},[128,163897,180],{"class":138},[128,163899,163900],{"class":130,"line":163},[128,163901,160],{"emptyLinePlaceholder":159},[128,163903,163904],{"class":130,"line":183},[128,163905,160],{"emptyLinePlaceholder":159},[128,163907,163908],{"class":130,"line":188},[128,163909,163910],{"class":138},"say_hello()\n",[19,163912,12571],{},[26,163914,163915,163918,163921,163924],{},[29,163916,163917],{},"函数必须先定义，再调用。",[29,163919,163920],{},"函数名遵循变量命名规则。",[29,163922,163923],{},"函数体需要缩进。",[29,163925,163926],{},"函数不调用就不会执行。",[14,163928,163930],{"id":163929},"_53-函数调用","5.3 函数调用",[106,163932,163934],{"className":122,"code":163933,"language":124,"meta":112,"style":112},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[114,163935,163936,163945,163956,163967,163978,163988,163992,163996,164001],{"__ignoreMap":112},[128,163937,163938,163940,163943],{"class":130,"line":131},[128,163939,196],{"class":134},[128,163941,163942],{"class":199}," print_menu",[128,163944,203],{"class":138},[128,163946,163947,163949,163951,163954],{"class":130,"line":142},[128,163948,437],{"class":166},[128,163950,253],{"class":138},[128,163952,163953],{"class":176},"\"1. 查询\"",[128,163955,180],{"class":138},[128,163957,163958,163960,163962,163965],{"class":130,"line":156},[128,163959,437],{"class":166},[128,163961,253],{"class":138},[128,163963,163964],{"class":176},"\"2. 添加\"",[128,163966,180],{"class":138},[128,163968,163969,163971,163973,163976],{"class":130,"line":163},[128,163970,437],{"class":166},[128,163972,253],{"class":138},[128,163974,163975],{"class":176},"\"3. 删除\"",[128,163977,180],{"class":138},[128,163979,163980,163982,163984,163986],{"class":130,"line":183},[128,163981,437],{"class":166},[128,163983,253],{"class":138},[128,163985,163560],{"class":176},[128,163987,180],{"class":138},[128,163989,163990],{"class":130,"line":188},[128,163991,160],{"emptyLinePlaceholder":159},[128,163993,163994],{"class":130,"line":193},[128,163995,160],{"emptyLinePlaceholder":159},[128,163997,163998],{"class":130,"line":206},[128,163999,164000],{"class":138},"print_menu()\n",[128,164002,164003],{"class":130,"line":221},[128,164004,164000],{"class":138},[19,164006,164007],{},"函数可以多次调用，每次调用都会执行函数体。",[14,164009,164011],{"id":164010},"_54-参数","5.4 参数",[19,164013,164014],{},"参数用于向函数传递数据。",[106,164016,164018],{"className":122,"code":164017,"language":124,"meta":112,"style":112},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[114,164019,164020,164029,164049,164053,164057,164066],{"__ignoreMap":112},[128,164021,164022,164024,164026],{"class":130,"line":131},[128,164023,196],{"class":134},[128,164025,163875],{"class":199},[128,164027,164028],{"class":138},"(name):\n",[128,164030,164031,164033,164035,164037,164039,164041,164043,164045,164047],{"class":130,"line":142},[128,164032,437],{"class":166},[128,164034,253],{"class":138},[128,164036,3019],{"class":134},[128,164038,159933],{"class":176},[128,164040,1379],{"class":166},[128,164042,2773],{"class":138},[128,164044,1453],{"class":166},[128,164046,1376],{"class":176},[128,164048,180],{"class":138},[128,164050,164051],{"class":130,"line":156},[128,164052,160],{"emptyLinePlaceholder":159},[128,164054,164055],{"class":130,"line":163},[128,164056,160],{"emptyLinePlaceholder":159},[128,164058,164059,164062,164064],{"class":130,"line":183},[128,164060,164061],{"class":138},"say_hello(",[128,164063,153205],{"class":176},[128,164065,180],{"class":138},[128,164067,164068,164070,164072],{"class":130,"line":188},[128,164069,164061],{"class":138},[128,164071,154253],{"class":176},[128,164073,180],{"class":138},[19,164075,164076,164078,164079,164081],{},[114,164077,2773],{}," 是形参，",[114,164080,153205],{}," 是实参。",[19,164083,164084],{},"多个参数：",[106,164086,164088],{"className":122,"code":164087,"language":124,"meta":112,"style":112},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[114,164089,164090,164098,164111,164117,164121,164125],{"__ignoreMap":112},[128,164091,164092,164094,164096],{"class":130,"line":131},[128,164093,196],{"class":134},[128,164095,2187],{"class":199},[128,164097,154407],{"class":138},[128,164099,164100,164103,164105,164107,164109],{"class":130,"line":142},[128,164101,164102],{"class":138},"    result ",[128,164104,270],{"class":134},[128,164106,14396],{"class":138},[128,164108,2457],{"class":134},[128,164110,154418],{"class":138},[128,164112,164113,164115],{"class":130,"line":156},[128,164114,437],{"class":166},[128,164116,79959],{"class":138},[128,164118,164119],{"class":130,"line":163},[128,164120,160],{"emptyLinePlaceholder":159},[128,164122,164123],{"class":130,"line":183},[128,164124,160],{"emptyLinePlaceholder":159},[128,164126,164127,164130,164132,164134,164136],{"class":130,"line":188},[128,164128,164129],{"class":138},"add(",[128,164131,4196],{"class":166},[128,164133,258],{"class":138},[128,164135,4449],{"class":166},[128,164137,180],{"class":138},[19,164139,164140],{},"调用时参数数量必须匹配。",[14,164142,164144],{"id":164143},"_55-返回值","5.5 返回值",[19,164146,164147,164149],{},[114,164148,20533],{}," 用于把函数内部的结果返回给调用者。",[106,164151,164153],{"className":122,"code":164152,"language":124,"meta":112,"style":112},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[114,164154,164155,164163,164173,164177,164181,164199],{"__ignoreMap":112},[128,164156,164157,164159,164161],{"class":130,"line":131},[128,164158,196],{"class":134},[128,164160,2187],{"class":199},[128,164162,154407],{"class":138},[128,164164,164165,164167,164169,164171],{"class":130,"line":142},[128,164166,587],{"class":134},[128,164168,14396],{"class":138},[128,164170,2457],{"class":134},[128,164172,154418],{"class":138},[128,164174,164175],{"class":130,"line":156},[128,164176,160],{"emptyLinePlaceholder":159},[128,164178,164179],{"class":130,"line":163},[128,164180,160],{"emptyLinePlaceholder":159},[128,164182,164183,164186,164188,164191,164193,164195,164197],{"class":130,"line":183},[128,164184,164185],{"class":138},"result ",[128,164187,270],{"class":134},[128,164189,164190],{"class":138}," add(",[128,164192,4196],{"class":166},[128,164194,258],{"class":138},[128,164196,4449],{"class":166},[128,164198,180],{"class":138},[128,164200,164201,164203],{"class":130,"line":188},[128,164202,2469],{"class":166},[128,164204,79959],{"class":138},[19,164206,164207,164208,164210,164211,1842],{},"如果函数没有写 ",[114,164209,20533],{},"，默认返回 ",[114,164212,99055],{},[106,164214,164216],{"className":122,"code":164215,"language":124,"meta":112,"style":112},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[114,164217,164218,164226,164236,164240,164244,164253],{"__ignoreMap":112},[128,164219,164220,164222,164224],{"class":130,"line":131},[128,164221,196],{"class":134},[128,164223,163875],{"class":199},[128,164225,203],{"class":138},[128,164227,164228,164230,164232,164234],{"class":130,"line":142},[128,164229,437],{"class":166},[128,164231,253],{"class":138},[128,164233,9402],{"class":176},[128,164235,180],{"class":138},[128,164237,164238],{"class":130,"line":156},[128,164239,160],{"emptyLinePlaceholder":159},[128,164241,164242],{"class":130,"line":163},[128,164243,160],{"emptyLinePlaceholder":159},[128,164245,164246,164248,164250],{"class":130,"line":183},[128,164247,164185],{"class":138},[128,164249,270],{"class":134},[128,164251,164252],{"class":138}," say_hello()\n",[128,164254,164255,164257,164260],{"class":130,"line":188},[128,164256,2469],{"class":166},[128,164258,164259],{"class":138},"(result)  ",[128,164261,164262],{"class":3814},"# None\n",[14,164264,164266],{"id":164265},"_56-return的作用","5.6 return的作用",[19,164268,164269,164271],{},[114,164270,20533],{}," 有两个作用：",[26,164273,164274,164277],{},[29,164275,164276],{},"返回结果。",[29,164278,164279],{},"结束函数。",[106,164281,164283],{"className":122,"code":164282,"language":124,"meta":112,"style":112},"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",[114,164284,164285,164295,164307,164314,164318,164330,164337,164341,164348,164352,164356,164367],{"__ignoreMap":112},[128,164286,164287,164289,164292],{"class":130,"line":131},[128,164288,196],{"class":134},[128,164290,164291],{"class":199}," check_age",[128,164293,164294],{"class":138},"(age):\n",[128,164296,164297,164299,164301,164303,164305],{"class":130,"line":142},[128,164298,209],{"class":134},[128,164300,19227],{"class":138},[128,164302,4657],{"class":134},[128,164304,7659],{"class":166},[128,164306,241],{"class":138},[128,164308,164309,164311],{"class":130,"line":156},[128,164310,224],{"class":134},[128,164312,164313],{"class":176}," \"年龄不合法\"\n",[128,164315,164316],{"class":130,"line":163},[128,164317,160],{"emptyLinePlaceholder":159},[128,164319,164320,164322,164324,164326,164328],{"class":130,"line":183},[128,164321,209],{"class":134},[128,164323,19227],{"class":138},[128,164325,5308],{"class":134},[128,164327,159164],{"class":166},[128,164329,241],{"class":138},[128,164331,164332,164334],{"class":130,"line":188},[128,164333,224],{"class":134},[128,164335,164336],{"class":176}," \"成年人\"\n",[128,164338,164339],{"class":130,"line":193},[128,164340,160],{"emptyLinePlaceholder":159},[128,164342,164343,164345],{"class":130,"line":206},[128,164344,587],{"class":134},[128,164346,164347],{"class":176}," \"未成年人\"\n",[128,164349,164350],{"class":130,"line":221},[128,164351,160],{"emptyLinePlaceholder":159},[128,164353,164354],{"class":130,"line":230},[128,164355,160],{"emptyLinePlaceholder":159},[128,164357,164358,164360,164363,164365],{"class":130,"line":235},[128,164359,2469],{"class":166},[128,164361,164362],{"class":138},"(check_age(",[128,164364,4449],{"class":166},[128,164366,3034],{"class":138},[128,164368,164369,164371,164373,164375,164377],{"class":130,"line":244},[128,164370,2469],{"class":166},[128,164372,164362],{"class":138},[128,164374,4281],{"class":134},[128,164376,2592],{"class":166},[128,164378,3034],{"class":138},[19,164380,164381,164382,164384],{},"函数执行到 ",[114,164383,20533],{}," 后，后面的代码不会继续执行。",[14,164386,164388],{"id":164387},"_57-none","5.7 None",[19,164390,164391,164393],{},[114,164392,99055],{}," 表示空值或没有结果。",[19,164395,164396],{},"常见使用场景：",[26,164398,164399,164402,164405],{},[29,164400,164401],{},"函数没有返回值。",[29,164403,164404],{},"变量暂时没有具体值。",[29,164406,164407],{},"表示查询不到结果。",[106,164409,164411],{"className":122,"code":164410,"language":124,"meta":112,"style":112},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[114,164412,164413,164421,164425,164438],{"__ignoreMap":112},[128,164414,164415,164417,164419],{"class":130,"line":131},[128,164416,164185],{"class":138},[128,164418,270],{"class":134},[128,164420,590],{"class":166},[128,164422,164423],{"class":130,"line":142},[128,164424,160],{"emptyLinePlaceholder":159},[128,164426,164427,164429,164432,164434,164436],{"class":130,"line":156},[128,164428,1800],{"class":134},[128,164430,164431],{"class":138}," result ",[128,164433,997],{"class":134},[128,164435,1000],{"class":166},[128,164437,241],{"class":138},[128,164439,164440,164442,164444,164447],{"class":130,"line":163},[128,164441,437],{"class":166},[128,164443,253],{"class":138},[128,164445,164446],{"class":176},"\"没有数据\"",[128,164448,180],{"class":138},[19,164450,164451,164452,164454,164455,164458,164459,1842],{},"判断 ",[114,164453,99055],{}," 推荐使用 ",[114,164456,164457],{},"is None","，不要写成 ",[114,164460,164461],{},"== None",[14,164463,164465],{"id":164464},"_58-函数文档字符串","5.8 函数文档字符串",[19,164467,164468],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[106,164470,164472],{"className":122,"code":164471,"language":124,"meta":112,"style":112},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[114,164473,164474,164484,164489],{"__ignoreMap":112},[128,164475,164476,164478,164481],{"class":130,"line":131},[128,164477,196],{"class":134},[128,164479,164480],{"class":199}," calculate_bmi",[128,164482,164483],{"class":138},"(weight, height):\n",[128,164485,164486],{"class":130,"line":142},[128,164487,164488],{"class":176},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[128,164490,164491,164493,164496,164498,164501,164503],{"class":130,"line":156},[128,164492,587],{"class":134},[128,164494,164495],{"class":138}," weight ",[128,164497,4333],{"class":134},[128,164499,164500],{"class":138}," height ",[128,164502,14188],{"class":134},[128,164504,51108],{"class":166},[19,164506,164507],{},"查看说明：",[106,164509,164511],{"className":122,"code":164510,"language":124,"meta":112,"style":112},"help(calculate_bmi)\n",[114,164512,164513],{"__ignoreMap":112},[128,164514,164515,164518],{"class":130,"line":131},[128,164516,164517],{"class":166},"help",[128,164519,164520],{"class":138},"(calculate_bmi)\n",[19,164522,164523],{},"较完整的写法：",[106,164525,164527],{"className":122,"code":164526,"language":124,"meta":112,"style":112},"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",[114,164528,164529,164537,164542,164547,164551,164556,164561,164566,164570],{"__ignoreMap":112},[128,164530,164531,164533,164535],{"class":130,"line":131},[128,164532,196],{"class":134},[128,164534,164480],{"class":199},[128,164536,164483],{"class":138},[128,164538,164539],{"class":130,"line":142},[128,164540,164541],{"class":176},"    \"\"\"\n",[128,164543,164544],{"class":130,"line":156},[128,164545,164546],{"class":176},"    计算BMI。\n",[128,164548,164549],{"class":130,"line":163},[128,164550,160],{"emptyLinePlaceholder":159},[128,164552,164553],{"class":130,"line":183},[128,164554,164555],{"class":176},"    :param weight: 体重，单位kg\n",[128,164557,164558],{"class":130,"line":188},[128,164559,164560],{"class":176},"    :param height: 身高，单位m\n",[128,164562,164563],{"class":130,"line":193},[128,164564,164565],{"class":176},"    :return: BMI数值\n",[128,164567,164568],{"class":130,"line":206},[128,164569,164541],{"class":176},[128,164571,164572,164574,164576,164578,164580,164582],{"class":130,"line":221},[128,164573,587],{"class":134},[128,164575,164495],{"class":138},[128,164577,4333],{"class":134},[128,164579,164500],{"class":138},[128,164581,14188],{"class":134},[128,164583,51108],{"class":166},[14,164585,164587],{"id":164586},"_59-变量作用域","5.9 变量作用域",[72,164589,164591],{"id":164590},"_591-局部变量","5.9.1 局部变量",[19,164593,164594],{},"在函数内部定义的变量，只能在函数内部使用。",[106,164596,164598],{"className":122,"code":164597,"language":124,"meta":112,"style":112},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[114,164599,164600,164609,164617,164623,164627,164631,164636],{"__ignoreMap":112},[128,164601,164602,164604,164607],{"class":130,"line":131},[128,164603,196],{"class":134},[128,164605,164606],{"class":199}," test",[128,164608,203],{"class":138},[128,164610,164611,164613,164615],{"class":130,"line":142},[128,164612,48978],{"class":138},[128,164614,270],{"class":134},[128,164616,61808],{"class":166},[128,164618,164619,164621],{"class":130,"line":156},[128,164620,437],{"class":166},[128,164622,3772],{"class":138},[128,164624,164625],{"class":130,"line":163},[128,164626,160],{"emptyLinePlaceholder":159},[128,164628,164629],{"class":130,"line":183},[128,164630,160],{"emptyLinePlaceholder":159},[128,164632,164633],{"class":130,"line":188},[128,164634,164635],{"class":138},"test()\n",[128,164637,164638,164640,164643],{"class":130,"line":193},[128,164639,2469],{"class":166},[128,164641,164642],{"class":138},"(num)  ",[128,164644,164645],{"class":3814},"# 报错\n",[72,164647,164649],{"id":164648},"_592-全局变量","5.9.2 全局变量",[19,164651,164652],{},"在函数外部定义的变量，可以在函数内部读取。",[106,164654,164656],{"className":122,"code":164655,"language":124,"meta":112,"style":112},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[114,164657,164658,164666,164670,164674,164682,164688,164692,164696],{"__ignoreMap":112},[128,164659,164660,164662,164664],{"class":130,"line":131},[128,164661,149883],{"class":138},[128,164663,270],{"class":134},[128,164665,152673],{"class":176},[128,164667,164668],{"class":130,"line":142},[128,164669,160],{"emptyLinePlaceholder":159},[128,164671,164672],{"class":130,"line":156},[128,164673,160],{"emptyLinePlaceholder":159},[128,164675,164676,164678,164680],{"class":130,"line":163},[128,164677,196],{"class":134},[128,164679,163875],{"class":199},[128,164681,203],{"class":138},[128,164683,164684,164686],{"class":130,"line":183},[128,164685,437],{"class":166},[128,164687,153977],{"class":138},[128,164689,164690],{"class":130,"line":188},[128,164691,160],{"emptyLinePlaceholder":159},[128,164693,164694],{"class":130,"line":193},[128,164695,160],{"emptyLinePlaceholder":159},[128,164697,164698],{"class":130,"line":206},[128,164699,163910],{"class":138},[19,164701,164702,164703,1842],{},"如果要在函数内部修改全局变量，需要 ",[114,164704,164705],{},"global",[106,164707,164709],{"className":122,"code":164708,"language":124,"meta":112,"style":112},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[114,164710,164711,164719,164723,164727,164736,164744,164752,164756,164760,164765],{"__ignoreMap":112},[128,164712,164713,164715,164717],{"class":130,"line":131},[128,164714,150038],{"class":138},[128,164716,270],{"class":134},[128,164718,50718],{"class":166},[128,164720,164721],{"class":130,"line":142},[128,164722,160],{"emptyLinePlaceholder":159},[128,164724,164725],{"class":130,"line":156},[128,164726,160],{"emptyLinePlaceholder":159},[128,164728,164729,164731,164734],{"class":130,"line":163},[128,164730,196],{"class":134},[128,164732,164733],{"class":199}," add_count",[128,164735,203],{"class":138},[128,164737,164738,164741],{"class":130,"line":183},[128,164739,164740],{"class":134},"    global",[128,164742,164743],{"class":138}," count\n",[128,164745,164746,164748,164750],{"class":130,"line":188},[128,164747,162312],{"class":138},[128,164749,13023],{"class":134},[128,164751,59079],{"class":166},[128,164753,164754],{"class":130,"line":193},[128,164755,160],{"emptyLinePlaceholder":159},[128,164757,164758],{"class":130,"line":206},[128,164759,160],{"emptyLinePlaceholder":159},[128,164761,164762],{"class":130,"line":221},[128,164763,164764],{"class":138},"add_count()\n",[128,164766,164767,164769],{"class":130,"line":230},[128,164768,2469],{"class":166},[128,164770,164771],{"class":138},"(count)\n",[19,164773,164774],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,164776,164778],{"id":164777},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,164780,164781],{},"一个函数中可以调用另一个函数。",[106,164783,164785],{"className":122,"code":164784,"language":124,"meta":112,"style":112},"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",[114,164786,164787,164796,164810,164814,164818,164827,164832,164852,164873,164877,164881,164885],{"__ignoreMap":112},[128,164788,164789,164791,164794],{"class":130,"line":131},[128,164790,196],{"class":134},[128,164792,164793],{"class":199}," print_line",[128,164795,203],{"class":138},[128,164797,164798,164800,164802,164804,164806,164808],{"class":130,"line":142},[128,164799,437],{"class":166},[128,164801,253],{"class":138},[128,164803,35949],{"class":176},[128,164805,10075],{"class":134},[128,164807,82039],{"class":166},[128,164809,180],{"class":138},[128,164811,164812],{"class":130,"line":156},[128,164813,160],{"emptyLinePlaceholder":159},[128,164815,164816],{"class":130,"line":163},[128,164817,160],{"emptyLinePlaceholder":159},[128,164819,164820,164822,164825],{"class":130,"line":183},[128,164821,196],{"class":134},[128,164823,164824],{"class":199}," print_info",[128,164826,152695],{"class":138},[128,164828,164829],{"class":130,"line":188},[128,164830,164831],{"class":138},"    print_line()\n",[128,164833,164834,164836,164838,164840,164842,164844,164846,164848,164850],{"class":130,"line":193},[128,164835,437],{"class":166},[128,164837,253],{"class":138},[128,164839,3019],{"class":134},[128,164841,159561],{"class":176},[128,164843,1379],{"class":166},[128,164845,2773],{"class":138},[128,164847,1453],{"class":166},[128,164849,1376],{"class":176},[128,164851,180],{"class":138},[128,164853,164854,164856,164858,164860,164863,164865,164867,164869,164871],{"class":130,"line":206},[128,164855,437],{"class":166},[128,164857,253],{"class":138},[128,164859,3019],{"class":134},[128,164861,164862],{"class":176},"\"年龄:",[128,164864,1379],{"class":166},[128,164866,73596],{"class":138},[128,164868,1453],{"class":166},[128,164870,1376],{"class":176},[128,164872,180],{"class":138},[128,164874,164875],{"class":130,"line":221},[128,164876,164831],{"class":138},[128,164878,164879],{"class":130,"line":230},[128,164880,160],{"emptyLinePlaceholder":159},[128,164882,164883],{"class":130,"line":235},[128,164884,160],{"emptyLinePlaceholder":159},[128,164886,164887,164890,164892,164894,164896],{"class":130,"line":244},[128,164888,164889],{"class":138},"print_info(",[128,164891,153205],{"class":176},[128,164893,258],{"class":138},[128,164895,4399],{"class":166},[128,164897,180],{"class":138},[19,164899,164900],{},"这种方式可以把小功能组合成大功能。",[14,164902,164904],{"id":164903},"_511-参数检查","5.11 参数检查",[19,164906,164907],{},"函数内部可以检查参数是否合法。",[106,164909,164911],{"className":122,"code":164910,"language":124,"meta":112,"style":112},"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",[114,164912,164913,164922,164934,164940,164950,164954,164958,164975,164979,164991,165002,165008],{"__ignoreMap":112},[128,164914,164915,164917,164920],{"class":130,"line":131},[128,164916,196],{"class":134},[128,164918,164919],{"class":199}," divide",[128,164921,154407],{"class":138},[128,164923,164924,164926,164928,164930,164932],{"class":130,"line":142},[128,164925,209],{"class":134},[128,164927,14409],{"class":138},[128,164929,570],{"class":134},[128,164931,7659],{"class":166},[128,164933,241],{"class":138},[128,164935,164936,164938],{"class":130,"line":156},[128,164937,224],{"class":134},[128,164939,590],{"class":166},[128,164941,164942,164944,164946,164948],{"class":130,"line":163},[128,164943,587],{"class":134},[128,164945,14396],{"class":138},[128,164947,4333],{"class":134},[128,164949,154418],{"class":138},[128,164951,164952],{"class":130,"line":183},[128,164953,160],{"emptyLinePlaceholder":159},[128,164955,164956],{"class":130,"line":188},[128,164957,160],{"emptyLinePlaceholder":159},[128,164959,164960,164962,164964,164967,164969,164971,164973],{"class":130,"line":193},[128,164961,164185],{"class":138},[128,164963,270],{"class":134},[128,164965,164966],{"class":138}," divide(",[128,164968,4196],{"class":166},[128,164970,258],{"class":138},[128,164972,2452],{"class":166},[128,164974,180],{"class":138},[128,164976,164977],{"class":130,"line":206},[128,164978,160],{"emptyLinePlaceholder":159},[128,164980,164981,164983,164985,164987,164989],{"class":130,"line":221},[128,164982,1800],{"class":134},[128,164984,164431],{"class":138},[128,164986,997],{"class":134},[128,164988,1000],{"class":166},[128,164990,241],{"class":138},[128,164992,164993,164995,164997,165000],{"class":130,"line":230},[128,164994,437],{"class":166},[128,164996,253],{"class":138},[128,164998,164999],{"class":176},"\"除数不能为0\"",[128,165001,180],{"class":138},[128,165003,165004,165006],{"class":130,"line":235},[128,165005,5299],{"class":134},[128,165007,241],{"class":138},[128,165009,165010,165012],{"class":130,"line":244},[128,165011,437],{"class":166},[128,165013,79959],{"class":138},[14,165015,165017],{"id":165016},"_512-类型提示","5.12 类型提示",[19,165019,165020],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[106,165022,165024],{"className":122,"code":165023,"language":124,"meta":112,"style":112},"def add(a: int, b: int) -> int:\n    return a + b\n",[114,165025,165026,165049],{"__ignoreMap":112},[128,165027,165028,165030,165032,165035,165037,165040,165042,165045,165047],{"class":130,"line":131},[128,165029,196],{"class":134},[128,165031,2187],{"class":199},[128,165033,165034],{"class":138},"(a: ",[128,165036,3763],{"class":166},[128,165038,165039],{"class":138},", b: ",[128,165041,3763],{"class":166},[128,165043,165044],{"class":138},") -> ",[128,165046,3763],{"class":166},[128,165048,241],{"class":138},[128,165050,165051,165053,165055,165057],{"class":130,"line":142},[128,165052,587],{"class":134},[128,165054,14396],{"class":138},[128,165056,2457],{"class":134},[128,165058,154418],{"class":138},[19,165060,165061],{},"字符串参数：",[106,165063,165065],{"className":122,"code":165064,"language":124,"meta":112,"style":112},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[114,165066,165067,165084],{"__ignoreMap":112},[128,165068,165069,165071,165073,165076,165078,165080,165082],{"class":130,"line":131},[128,165070,196],{"class":134},[128,165072,163875],{"class":199},[128,165074,165075],{"class":138},"(name: ",[128,165077,4914],{"class":166},[128,165079,165044],{"class":138},[128,165081,99055],{"class":166},[128,165083,241],{"class":138},[128,165085,165086,165088,165090,165092,165094,165096,165098,165100,165102],{"class":130,"line":142},[128,165087,437],{"class":166},[128,165089,253],{"class":138},[128,165091,3019],{"class":134},[128,165093,159933],{"class":176},[128,165095,1379],{"class":166},[128,165097,2773],{"class":138},[128,165099,1453],{"class":166},[128,165101,1376],{"class":176},[128,165103,180],{"class":138},[19,165105,165106],{},"列表参数：",[106,165108,165110],{"className":122,"code":165109,"language":124,"meta":112,"style":112},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[114,165111,165112,165131,165139,165151,165160],{"__ignoreMap":112},[128,165113,165114,165116,165119,165122,165124,165127,165129],{"class":130,"line":131},[128,165115,196],{"class":134},[128,165117,165118],{"class":199}," get_total",[128,165120,165121],{"class":138},"(numbers: list[",[128,165123,3763],{"class":166},[128,165125,165126],{"class":138},"]) -> ",[128,165128,3763],{"class":166},[128,165130,241],{"class":138},[128,165132,165133,165135,165137],{"class":130,"line":142},[128,165134,162186],{"class":138},[128,165136,270],{"class":134},[128,165138,50718],{"class":166},[128,165140,165141,165143,165146,165148],{"class":130,"line":156},[128,165142,543],{"class":134},[128,165144,165145],{"class":138}," number ",[128,165147,549],{"class":134},[128,165149,165150],{"class":138}," numbers:\n",[128,165152,165153,165155,165157],{"class":130,"line":163},[128,165154,162861],{"class":138},[128,165156,13023],{"class":134},[128,165158,165159],{"class":138}," number\n",[128,165161,165162,165164],{"class":130,"line":183},[128,165163,587],{"class":134},[128,165165,165166],{"class":138}," total\n",[19,165168,165169],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,165171,165173],{"id":165172},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[106,165175,165177],{"className":122,"code":165176,"language":124,"meta":112,"style":112},"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",[114,165178,165179,165189,165193,165197,165205,165216,165226,165236,165246,165256,165260,165264,165273,165295,165299,165303,165312,165318,165338,165350,165361,165365,165374,165385,165390,165394,165398,165407,165413,165432,165444,165454,165458,165469,165479,165483,165491,165502,165506,165510,165514,165522,165527,165541,165545,165557,165562,165574,165579,165591,165596,165608,165618,165622,165628],{"__ignoreMap":112},[128,165180,165181,165184,165186],{"class":130,"line":131},[128,165182,165183],{"class":138},"balance ",[128,165185,270],{"class":134},[128,165187,165188],{"class":166}," 1000\n",[128,165190,165191],{"class":130,"line":142},[128,165192,160],{"emptyLinePlaceholder":159},[128,165194,165195],{"class":130,"line":156},[128,165196,160],{"emptyLinePlaceholder":159},[128,165198,165199,165201,165203],{"class":130,"line":163},[128,165200,196],{"class":134},[128,165202,429],{"class":199},[128,165204,203],{"class":138},[128,165206,165207,165209,165211,165214],{"class":130,"line":183},[128,165208,437],{"class":166},[128,165210,253],{"class":138},[128,165212,165213],{"class":176},"\"====== ATM ======\"",[128,165215,180],{"class":138},[128,165217,165218,165220,165222,165224],{"class":130,"line":188},[128,165219,437],{"class":166},[128,165221,253],{"class":138},[128,165223,163527],{"class":176},[128,165225,180],{"class":138},[128,165227,165228,165230,165232,165234],{"class":130,"line":193},[128,165229,437],{"class":166},[128,165231,253],{"class":138},[128,165233,163538],{"class":176},[128,165235,180],{"class":138},[128,165237,165238,165240,165242,165244],{"class":130,"line":206},[128,165239,437],{"class":166},[128,165241,253],{"class":138},[128,165243,163549],{"class":176},[128,165245,180],{"class":138},[128,165247,165248,165250,165252,165254],{"class":130,"line":221},[128,165249,437],{"class":166},[128,165251,253],{"class":138},[128,165253,163560],{"class":176},[128,165255,180],{"class":138},[128,165257,165258],{"class":130,"line":230},[128,165259,160],{"emptyLinePlaceholder":159},[128,165261,165262],{"class":130,"line":235},[128,165263,160],{"emptyLinePlaceholder":159},[128,165265,165266,165268,165271],{"class":130,"line":244},[128,165267,196],{"class":134},[128,165269,165270],{"class":199}," show_balance",[128,165272,203],{"class":138},[128,165274,165275,165277,165279,165281,165284,165286,165289,165291,165293],{"class":130,"line":287},[128,165276,437],{"class":166},[128,165278,253],{"class":138},[128,165280,3019],{"class":134},[128,165282,165283],{"class":176},"\"当前余额:",[128,165285,1379],{"class":166},[128,165287,165288],{"class":138},"balance",[128,165290,1453],{"class":166},[128,165292,159891],{"class":176},[128,165294,180],{"class":138},[128,165296,165297],{"class":130,"line":301},[128,165298,160],{"emptyLinePlaceholder":159},[128,165300,165301],{"class":130,"line":310},[128,165302,160],{"emptyLinePlaceholder":159},[128,165304,165305,165307,165310],{"class":130,"line":323},[128,165306,196],{"class":134},[128,165308,165309],{"class":199}," save_money",[128,165311,203],{"class":138},[128,165313,165314,165316],{"class":130,"line":330},[128,165315,164740],{"class":134},[128,165317,153416],{"class":138},[128,165319,165320,165323,165325,165327,165329,165331,165333,165336],{"class":130,"line":335},[128,165321,165322],{"class":138},"    money ",[128,165324,270],{"class":134},[128,165326,714],{"class":166},[128,165328,253],{"class":138},[128,165330,643],{"class":166},[128,165332,253],{"class":138},[128,165334,165335],{"class":176},"\"请输入存款金额:\"",[128,165337,3034],{"class":138},[128,165339,165340,165342,165344,165346,165348],{"class":130,"line":340},[128,165341,209],{"class":134},[128,165343,153459],{"class":138},[128,165345,5197],{"class":134},[128,165347,7659],{"class":166},[128,165349,241],{"class":138},[128,165351,165352,165354,165356,165359],{"class":130,"line":351},[128,165353,313],{"class":166},[128,165355,253],{"class":138},[128,165357,165358],{"class":176},"\"金额必须大于0\"",[128,165360,180],{"class":138},[128,165362,165363],{"class":130,"line":384},[128,165364,810],{"class":134},[128,165366,165367,165370,165372],{"class":130,"line":414},[128,165368,165369],{"class":138},"    balance ",[128,165371,13023],{"class":134},[128,165373,153492],{"class":138},[128,165375,165376,165378,165380,165383],{"class":130,"line":419},[128,165377,437],{"class":166},[128,165379,253],{"class":138},[128,165381,165382],{"class":176},"\"存款成功\"",[128,165384,180],{"class":138},[128,165386,165387],{"class":130,"line":424},[128,165388,165389],{"class":138},"    show_balance()\n",[128,165391,165392],{"class":130,"line":434},[128,165393,160],{"emptyLinePlaceholder":159},[128,165395,165396],{"class":130,"line":447},[128,165397,160],{"emptyLinePlaceholder":159},[128,165399,165400,165402,165405],{"class":130,"line":459},[128,165401,196],{"class":134},[128,165403,165404],{"class":199}," withdraw_money",[128,165406,203],{"class":138},[128,165408,165409,165411],{"class":130,"line":471},[128,165410,164740],{"class":134},[128,165412,153416],{"class":138},[128,165414,165415,165417,165419,165421,165423,165425,165427,165430],{"class":130,"line":483},[128,165416,165322],{"class":138},[128,165418,270],{"class":134},[128,165420,714],{"class":166},[128,165422,253],{"class":138},[128,165424,643],{"class":166},[128,165426,253],{"class":138},[128,165428,165429],{"class":176},"\"请输入取款金额:\"",[128,165431,3034],{"class":138},[128,165433,165434,165436,165438,165440,165442],{"class":130,"line":495},[128,165435,209],{"class":134},[128,165437,153459],{"class":138},[128,165439,5197],{"class":134},[128,165441,7659],{"class":166},[128,165443,241],{"class":138},[128,165445,165446,165448,165450,165452],{"class":130,"line":507},[128,165447,313],{"class":166},[128,165449,253],{"class":138},[128,165451,165358],{"class":176},[128,165453,180],{"class":138},[128,165455,165456],{"class":130,"line":519},[128,165457,810],{"class":134},[128,165459,165460,165462,165464,165466],{"class":130,"line":524},[128,165461,209],{"class":134},[128,165463,153459],{"class":138},[128,165465,4705],{"class":134},[128,165467,165468],{"class":138}," balance:\n",[128,165470,165471,165473,165475,165477],{"class":130,"line":529},[128,165472,313],{"class":166},[128,165474,253],{"class":138},[128,165476,153554],{"class":176},[128,165478,180],{"class":138},[128,165480,165481],{"class":130,"line":540},[128,165482,810],{"class":134},[128,165484,165485,165487,165489],{"class":130,"line":555},[128,165486,165369],{"class":138},[128,165488,153569],{"class":134},[128,165490,153492],{"class":138},[128,165492,165493,165495,165497,165500],{"class":130,"line":576},[128,165494,437],{"class":166},[128,165496,253],{"class":138},[128,165498,165499],{"class":176},"\"取款成功\"",[128,165501,180],{"class":138},[128,165503,165504],{"class":130,"line":584},[128,165505,165389],{"class":138},[128,165507,165508],{"class":130,"line":593},[128,165509,160],{"emptyLinePlaceholder":159},[128,165511,165512],{"class":130,"line":598},[128,165513,160],{"emptyLinePlaceholder":159},[128,165515,165516,165518,165520],{"class":130,"line":603},[128,165517,3329],{"class":134},[128,165519,620],{"class":166},[128,165521,241],{"class":138},[128,165523,165524],{"class":130,"line":614},[128,165525,165526],{"class":138},"    show_menu()\n",[128,165528,165529,165531,165533,165535,165537,165539],{"class":130,"line":625},[128,165530,163571],{"class":138},[128,165532,270],{"class":134},[128,165534,772],{"class":166},[128,165536,253],{"class":138},[128,165538,1623],{"class":176},[128,165540,180],{"class":138},[128,165542,165543],{"class":130,"line":633},[128,165544,160],{"emptyLinePlaceholder":159},[128,165546,165547,165549,165551,165553,165555],{"class":130,"line":649},[128,165548,209],{"class":134},[128,165550,1638],{"class":138},[128,165552,570],{"class":134},[128,165554,1643],{"class":176},[128,165556,241],{"class":138},[128,165558,165559],{"class":130,"line":660},[128,165560,165561],{"class":138},"        show_balance()\n",[128,165563,165564,165566,165568,165570,165572],{"class":130,"line":673},[128,165565,42679],{"class":134},[128,165567,1638],{"class":138},[128,165569,570],{"class":134},[128,165571,1664],{"class":176},[128,165573,241],{"class":138},[128,165575,165576],{"class":130,"line":678},[128,165577,165578],{"class":138},"        save_money()\n",[128,165580,165581,165583,165585,165587,165589],{"class":130,"line":683},[128,165582,42679],{"class":134},[128,165584,1638],{"class":138},[128,165586,570],{"class":134},[128,165588,1684],{"class":176},[128,165590,241],{"class":138},[128,165592,165593],{"class":130,"line":693},[128,165594,165595],{"class":138},"        withdraw_money()\n",[128,165597,165598,165600,165602,165604,165606],{"class":130,"line":702},[128,165599,42679],{"class":134},[128,165601,1638],{"class":138},[128,165603,570],{"class":134},[128,165605,1744],{"class":176},[128,165607,241],{"class":138},[128,165609,165610,165612,165614,165616],{"class":130,"line":709},[128,165611,313],{"class":166},[128,165613,253],{"class":138},[128,165615,1756],{"class":176},[128,165617,180],{"class":138},[128,165619,165620],{"class":130,"line":723},[128,165621,35096],{"class":134},[128,165623,165624,165626],{"class":130,"line":732},[128,165625,160901],{"class":134},[128,165627,241],{"class":138},[128,165629,165630,165632,165634,165636],{"class":130,"line":744},[128,165631,313],{"class":166},[128,165633,253],{"class":138},[128,165635,1782],{"class":176},[128,165637,180],{"class":138},[19,165639,165640],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,165642,165644],{"id":165643},"_514-易错点","5.14 易错点",[26,165646,165647,165650,165653,165658,165663,165666],{},[29,165648,165649],{},"函数定义后必须调用才会执行。",[29,165651,165652],{},"函数名后面有括号才是调用。",[29,165654,165655,165657],{},[114,165656,20533],{}," 后面的代码不会执行。",[29,165659,165660,165661,1842],{},"没有返回值的函数默认返回 ",[114,165662,99055],{},[29,165664,165665],{},"局部变量不能在函数外部访问。",[29,165667,165668,165669,165671],{},"不要滥用 ",[114,165670,164705],{},"，更好的方式是让函数返回新值。",[19,165673,165674,165675,165677],{},"例如不用 ",[114,165676,164705],{}," 改写存款：",[106,165679,165681],{"className":122,"code":165680,"language":124,"meta":112,"style":112},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[114,165682,165683,165692,165703,165707,165711,165719,165732],{"__ignoreMap":112},[128,165684,165685,165687,165689],{"class":130,"line":131},[128,165686,196],{"class":134},[128,165688,165309],{"class":199},[128,165690,165691],{"class":138},"(balance, money):\n",[128,165693,165694,165696,165699,165701],{"class":130,"line":142},[128,165695,587],{"class":134},[128,165697,165698],{"class":138}," balance ",[128,165700,2457],{"class":134},[128,165702,153492],{"class":138},[128,165704,165705],{"class":130,"line":156},[128,165706,160],{"emptyLinePlaceholder":159},[128,165708,165709],{"class":130,"line":163},[128,165710,160],{"emptyLinePlaceholder":159},[128,165712,165713,165715,165717],{"class":130,"line":183},[128,165714,165183],{"class":138},[128,165716,270],{"class":134},[128,165718,165188],{"class":166},[128,165720,165721,165723,165725,165728,165730],{"class":130,"line":188},[128,165722,165183],{"class":138},[128,165724,270],{"class":134},[128,165726,165727],{"class":138}," save_money(balance, ",[128,165729,3143],{"class":166},[128,165731,180],{"class":138},[128,165733,165734,165736],{"class":130,"line":193},[128,165735,2469],{"class":166},[128,165737,165738],{"class":138},"(balance)\n",[14,165740,165742],{"id":165741},"_515-本章练习","5.15 本章练习",[26,165744,165745,165752,165758,165764,165770],{},[29,165746,165747,165748,165751],{},"定义函数 ",[114,165749,165750],{},"print_student(name, age)","，输出学生信息。",[29,165753,165747,165754,165757],{},[114,165755,165756],{},"get_max(a, b, c)","，返回三个数中的最大值。",[29,165759,165747,165760,165763],{},[114,165761,165762],{},"is_even(num)","，判断一个数是否为偶数。",[29,165765,165747,165766,165769],{},[114,165767,165768],{},"calculate_bmi(weight, height)","，返回 BMI。",[29,165771,165772],{},"把第 4 章的菜单程序拆分成多个函数。",[3659,165774,165775],{},"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":112,"searchDepth":142,"depth":142,"links":165777},[165778,165779,165780,165781,165782,165783,165784,165785,165786,165790,165791,165792,165793,165794,165795],{"id":163798,"depth":142,"text":163799},{"id":163839,"depth":142,"text":163840},{"id":163929,"depth":142,"text":163930},{"id":164010,"depth":142,"text":164011},{"id":164143,"depth":142,"text":164144},{"id":164265,"depth":142,"text":164266},{"id":164387,"depth":142,"text":164388},{"id":164464,"depth":142,"text":164465},{"id":164586,"depth":142,"text":164587,"children":165787},[165788,165789],{"id":164590,"depth":156,"text":164591},{"id":164648,"depth":156,"text":164649},{"id":164777,"depth":142,"text":164778},{"id":164903,"depth":142,"text":164904},{"id":165016,"depth":142,"text":165017},{"id":165172,"depth":142,"text":165173},{"id":165643,"depth":142,"text":165644},{"id":165741,"depth":142,"text":165742},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":163790,"description":3686},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":165802,"title":165803,"body":165804,"description":3686,"extension":3687,"meta":168848,"navigation":159,"path":168849,"seo":168850,"stem":168851,"__hash__":168852},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":165805,"toc":168829},[165806,165809,165813,165816,165819,165923,165926,165930,165933,166013,166016,166020,166023,166083,166086,166122,166125,166140,166144,166217,166220,166275,166278,166348,166351,166435,166445,166503,166507,166552,166555,166581,166584,166690,166694,166697,166739,166742,166806,166809,166813,166816,166877,166880,166910,166913,166951,166955,166958,166967,166970,167094,167097,167138,167142,167145,167156,167196,167199,167214,167219,167222,167289,167292,167382,167386,167389,167437,167440,167467,167469,167499,167502,167522,167525,167556,167559,167592,167596,167599,167623,167626,167650,167653,167677,167681,167684,167814,167817,167897,167900,167975,167979,167982,168032,168035,168077,168080,168104,168106,168130,168133,168188,168191,168257,168261,168264,168267,168305,168308,168361,168364,168410,168413,168446,168449,168453,168772,168776,168805,168809,168826],[10,165807,165803],{"id":165808},"_6-数据容器",[14,165810,165812],{"id":165811},"_61-什么是数据容器","6.1 什么是数据容器",[19,165814,165815],{},"数据容器用于一次保存多个数据。",[19,165817,165818],{},"常见容器：",[3891,165820,165821,165838],{},[3894,165822,165823],{},[3897,165824,165825,165827,165830,165833,165836],{},[3900,165826,29257],{},[3900,165828,165829],{},"是否有序",[3900,165831,165832],{},"是否可变",[3900,165834,165835],{},"是否允许重复",[3900,165837,30977],{},[3938,165839,165840,165858,165874,165889,165906],{},[3897,165841,165842,165845,165848,165851,165854],{},[3943,165843,165844],{},"list列表",[3943,165846,165847],{},"有序",[3943,165849,165850],{},"可变",[3943,165852,165853],{},"允许",[3943,165855,165856],{},[114,165857,158136],{},[3897,165859,165860,165863,165865,165868,165870],{},[3943,165861,165862],{},"tuple元组",[3943,165864,165847],{},[3943,165866,165867],{},"不可变",[3943,165869,165853],{},[3943,165871,165872],{},[114,165873,158149],{},[3897,165875,165876,165879,165881,165883,165885],{},[3943,165877,165878],{},"str字符串",[3943,165880,165847],{},[3943,165882,165867],{},[3943,165884,165853],{},[3943,165886,165887],{},[114,165888,158759],{},[3897,165890,165891,165894,165897,165899,165902],{},[3943,165892,165893],{},"set集合",[3943,165895,165896],{},"无序",[3943,165898,165850],{},[3943,165900,165901],{},"不允许",[3943,165903,165904],{},[114,165905,158174],{},[3897,165907,165908,165911,165913,165915,165918],{},[3943,165909,165910],{},"dict字典",[3943,165912,165847],{},[3943,165914,165850],{},[3943,165916,165917],{},"key不允许重复",[3943,165919,165920],{},[114,165921,165922],{},"{\"name\": \"小明\"}",[19,165924,165925],{},"Python 3.7 之后，字典保持插入顺序。",[14,165927,165929],{"id":165928},"_62-列表list","6.2 列表list",[19,165931,165932],{},"列表用于保存一组有顺序的数据。",[106,165934,165936],{"className":122,"code":165935,"language":124,"meta":112,"style":112},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[114,165937,165938,165958,165983,166004],{"__ignoreMap":112},[128,165939,165940,165942,165944,165946,165948,165950,165952,165954,165956],{"class":130,"line":131},[128,165941,163259],{"class":138},[128,165943,270],{"class":134},[128,165945,55608],{"class":138},[128,165947,153205],{"class":176},[128,165949,258],{"class":138},[128,165951,154253],{"class":176},[128,165953,258],{"class":138},[128,165955,162610],{"class":176},[128,165957,2376],{"class":138},[128,165959,165960,165963,165965,165967,165969,165971,165973,165975,165977,165979,165981],{"class":130,"line":142},[128,165961,165962],{"class":138},"numbers ",[128,165964,270],{"class":134},[128,165966,55608],{"class":138},[128,165968,2592],{"class":166},[128,165970,258],{"class":138},[128,165972,409],{"class":166},[128,165974,258],{"class":138},[128,165976,3827],{"class":166},[128,165978,258],{"class":138},[128,165980,4043],{"class":166},[128,165982,2376],{"class":138},[128,165984,165985,165988,165990,165992,165994,165996,165998,166000,166002],{"class":130,"line":156},[128,165986,165987],{"class":138},"mixed ",[128,165989,270],{"class":134},[128,165991,55608],{"class":138},[128,165993,153205],{"class":176},[128,165995,258],{"class":138},[128,165997,4399],{"class":166},[128,165999,258],{"class":138},[128,166001,34945],{"class":166},[128,166003,2376],{"class":138},[128,166005,166006,166009,166011],{"class":130,"line":163},[128,166007,166008],{"class":138},"empty ",[128,166010,270],{"class":134},[128,166012,227],{"class":138},[19,166014,166015],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,166017,166019],{"id":166018},"_63-列表索引","6.3 列表索引",[19,166021,166022],{},"正向索引从 0 开始：",[106,166024,166026],{"className":122,"code":166025,"language":124,"meta":112,"style":112},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[114,166027,166028,166048,166052,166063,166073],{"__ignoreMap":112},[128,166029,166030,166032,166034,166036,166038,166040,166042,166044,166046],{"class":130,"line":131},[128,166031,163259],{"class":138},[128,166033,270],{"class":134},[128,166035,55608],{"class":138},[128,166037,153205],{"class":176},[128,166039,258],{"class":138},[128,166041,154253],{"class":176},[128,166043,258],{"class":138},[128,166045,162610],{"class":176},[128,166047,2376],{"class":138},[128,166049,166050],{"class":130,"line":142},[128,166051,160],{"emptyLinePlaceholder":159},[128,166053,166054,166056,166059,166061],{"class":130,"line":156},[128,166055,2469],{"class":166},[128,166057,166058],{"class":138},"(names[",[128,166060,2452],{"class":166},[128,166062,2595],{"class":138},[128,166064,166065,166067,166069,166071],{"class":130,"line":163},[128,166066,2469],{"class":166},[128,166068,166058],{"class":138},[128,166070,2592],{"class":166},[128,166072,2595],{"class":138},[128,166074,166075,166077,166079,166081],{"class":130,"line":183},[128,166076,2469],{"class":166},[128,166078,166058],{"class":138},[128,166080,409],{"class":166},[128,166082,2595],{"class":138},[19,166084,166085],{},"反向索引从 -1 开始：",[106,166087,166089],{"className":122,"code":166088,"language":124,"meta":112,"style":112},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[114,166090,166091,166107],{"__ignoreMap":112},[128,166092,166093,166095,166097,166099,166101,166104],{"class":130,"line":131},[128,166094,2469],{"class":166},[128,166096,166058],{"class":138},[128,166098,4281],{"class":134},[128,166100,2592],{"class":166},[128,166102,166103],{"class":138},"])  ",[128,166105,166106],{"class":3814},"# 小刚\n",[128,166108,166109,166111,166113,166115,166117,166119],{"class":130,"line":142},[128,166110,2469],{"class":166},[128,166112,166058],{"class":138},[128,166114,4281],{"class":134},[128,166116,409],{"class":166},[128,166118,166103],{"class":138},[128,166120,166121],{"class":3814},"# 小红\n",[19,166123,166124],{},"索引越界会报错：",[106,166126,166128],{"className":122,"code":166127,"language":124,"meta":112,"style":112},"print(names[3])\n",[114,166129,166130],{"__ignoreMap":112},[128,166131,166132,166134,166136,166138],{"class":130,"line":131},[128,166133,2469],{"class":166},[128,166135,166058],{"class":138},[128,166137,3827],{"class":166},[128,166139,2595],{"class":138},[14,166141,166143],{"id":166142},"_64-列表常用方法","6.4 列表常用方法",[106,166145,166147],{"className":122,"code":166146,"language":124,"meta":112,"style":112},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[114,166148,166149,166165,166169,166178,166192,166206,166210],{"__ignoreMap":112},[128,166150,166151,166153,166155,166157,166159,166161,166163],{"class":130,"line":131},[128,166152,163259],{"class":138},[128,166154,270],{"class":134},[128,166156,55608],{"class":138},[128,166158,153205],{"class":176},[128,166160,258],{"class":138},[128,166162,154253],{"class":176},[128,166164,2376],{"class":138},[128,166166,166167],{"class":130,"line":142},[128,166168,160],{"emptyLinePlaceholder":159},[128,166170,166171,166174,166176],{"class":130,"line":156},[128,166172,166173],{"class":138},"names.append(",[128,166175,162610],{"class":176},[128,166177,180],{"class":138},[128,166179,166180,166183,166185,166187,166190],{"class":130,"line":163},[128,166181,166182],{"class":138},"names.insert(",[128,166184,2592],{"class":166},[128,166186,258],{"class":138},[128,166188,166189],{"class":176},"\"小李\"",[128,166191,180],{"class":138},[128,166193,166194,166197,166199,166201,166204],{"class":130,"line":183},[128,166195,166196],{"class":138},"names.extend([",[128,166198,12229],{"class":176},[128,166200,258],{"class":138},[128,166202,166203],{"class":176},"\"小赵\"",[128,166205,2595],{"class":138},[128,166207,166208],{"class":130,"line":188},[128,166209,160],{"emptyLinePlaceholder":159},[128,166211,166212,166214],{"class":130,"line":193},[128,166213,2469],{"class":166},[128,166215,166216],{"class":138},"(names)\n",[19,166218,166219],{},"删除元素：",[106,166221,166223],{"className":122,"code":166222,"language":124,"meta":112,"style":112},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[114,166224,166225,166234,166244,166258,166270],{"__ignoreMap":112},[128,166226,166227,166230,166232],{"class":130,"line":131},[128,166228,166229],{"class":138},"names.remove(",[128,166231,154253],{"class":176},[128,166233,180],{"class":138},[128,166235,166236,166239,166241],{"class":130,"line":142},[128,166237,166238],{"class":138},"last ",[128,166240,270],{"class":134},[128,166242,166243],{"class":138}," names.pop()\n",[128,166245,166246,166249,166251,166254,166256],{"class":130,"line":156},[128,166247,166248],{"class":138},"first ",[128,166250,270],{"class":134},[128,166252,166253],{"class":138}," names.pop(",[128,166255,2452],{"class":166},[128,166257,180],{"class":138},[128,166259,166260,166263,166266,166268],{"class":130,"line":163},[128,166261,166262],{"class":134},"del",[128,166264,166265],{"class":138}," names[",[128,166267,2452],{"class":166},[128,166269,2376],{"class":138},[128,166271,166272],{"class":130,"line":183},[128,166273,166274],{"class":138},"names.clear()\n",[19,166276,166277],{},"查询和统计：",[106,166279,166281],{"className":122,"code":166280,"language":124,"meta":112,"style":112},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[114,166282,166283,166311,166315,166326,166337],{"__ignoreMap":112},[128,166284,166285,166287,166289,166291,166293,166295,166297,166299,166301,166303,166305,166307,166309],{"class":130,"line":131},[128,166286,165962],{"class":138},[128,166288,270],{"class":134},[128,166290,55608],{"class":138},[128,166292,2592],{"class":166},[128,166294,258],{"class":138},[128,166296,409],{"class":166},[128,166298,258],{"class":138},[128,166300,3827],{"class":166},[128,166302,258],{"class":138},[128,166304,409],{"class":166},[128,166306,258],{"class":138},[128,166308,4043],{"class":166},[128,166310,2376],{"class":138},[128,166312,166313],{"class":130,"line":142},[128,166314,160],{"emptyLinePlaceholder":159},[128,166316,166317,166319,166322,166324],{"class":130,"line":156},[128,166318,2469],{"class":166},[128,166320,166321],{"class":138},"(numbers.index(",[128,166323,3827],{"class":166},[128,166325,3034],{"class":138},[128,166327,166328,166330,166333,166335],{"class":130,"line":163},[128,166329,2469],{"class":166},[128,166331,166332],{"class":138},"(numbers.count(",[128,166334,409],{"class":166},[128,166336,3034],{"class":138},[128,166338,166339,166341,166343,166345],{"class":130,"line":183},[128,166340,2469],{"class":166},[128,166342,253],{"class":138},[128,166344,10915],{"class":166},[128,166346,166347],{"class":138},"(numbers))\n",[19,166349,166350],{},"排序：",[106,166352,166354],{"className":122,"code":166353,"language":124,"meta":112,"style":112},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[114,166355,166356,166380,166384,166389,166396,166400,166414,166420,166424,166429],{"__ignoreMap":112},[128,166357,166358,166360,166362,166364,166366,166368,166370,166372,166374,166376,166378],{"class":130,"line":131},[128,166359,165962],{"class":138},[128,166361,270],{"class":134},[128,166363,55608],{"class":138},[128,166365,3827],{"class":166},[128,166367,258],{"class":138},[128,166369,2592],{"class":166},[128,166371,258],{"class":138},[128,166373,4069],{"class":166},[128,166375,258],{"class":138},[128,166377,409],{"class":166},[128,166379,2376],{"class":138},[128,166381,166382],{"class":130,"line":142},[128,166383,160],{"emptyLinePlaceholder":159},[128,166385,166386],{"class":130,"line":156},[128,166387,166388],{"class":138},"numbers.sort()\n",[128,166390,166391,166393],{"class":130,"line":163},[128,166392,2469],{"class":166},[128,166394,166395],{"class":138},"(numbers)\n",[128,166397,166398],{"class":130,"line":183},[128,166399,160],{"emptyLinePlaceholder":159},[128,166401,166402,166405,166408,166410,166412],{"class":130,"line":188},[128,166403,166404],{"class":138},"numbers.sort(",[128,166406,166407],{"class":266},"reverse",[128,166409,270],{"class":134},[128,166411,34945],{"class":166},[128,166413,180],{"class":138},[128,166415,166416,166418],{"class":130,"line":193},[128,166417,2469],{"class":166},[128,166419,166395],{"class":138},[128,166421,166422],{"class":130,"line":206},[128,166423,160],{"emptyLinePlaceholder":159},[128,166425,166426],{"class":130,"line":221},[128,166427,166428],{"class":138},"numbers.reverse()\n",[128,166430,166431,166433],{"class":130,"line":230},[128,166432,2469],{"class":166},[128,166434,166395],{"class":138},[19,166436,166437,166440,166441,166444],{},[114,166438,166439],{},"sort()"," 会修改原列表，",[114,166442,166443],{},"sorted()"," 返回新列表。",[106,166446,166448],{"className":122,"code":166447,"language":124,"meta":112,"style":112},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[114,166449,166450,166474,166486,166490,166496],{"__ignoreMap":112},[128,166451,166452,166454,166456,166458,166460,166462,166464,166466,166468,166470,166472],{"class":130,"line":131},[128,166453,165962],{"class":138},[128,166455,270],{"class":134},[128,166457,55608],{"class":138},[128,166459,3827],{"class":166},[128,166461,258],{"class":138},[128,166463,2592],{"class":166},[128,166465,258],{"class":138},[128,166467,4069],{"class":166},[128,166469,258],{"class":138},[128,166471,409],{"class":166},[128,166473,2376],{"class":138},[128,166475,166476,166479,166481,166484],{"class":130,"line":142},[128,166477,166478],{"class":138},"new_numbers ",[128,166480,270],{"class":134},[128,166482,166483],{"class":166}," sorted",[128,166485,166395],{"class":138},[128,166487,166488],{"class":130,"line":156},[128,166489,160],{"emptyLinePlaceholder":159},[128,166491,166492,166494],{"class":130,"line":163},[128,166493,2469],{"class":166},[128,166495,166395],{"class":138},[128,166497,166498,166500],{"class":130,"line":183},[128,166499,2469],{"class":166},[128,166501,166502],{"class":138},"(new_numbers)\n",[14,166504,166506],{"id":166505},"_65-列表遍历","6.5 列表遍历",[106,166508,166510],{"className":122,"code":166509,"language":124,"meta":112,"style":112},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[114,166511,166512,166532,166536,166546],{"__ignoreMap":112},[128,166513,166514,166516,166518,166520,166522,166524,166526,166528,166530],{"class":130,"line":131},[128,166515,163259],{"class":138},[128,166517,270],{"class":134},[128,166519,55608],{"class":138},[128,166521,153205],{"class":176},[128,166523,258],{"class":138},[128,166525,154253],{"class":176},[128,166527,258],{"class":138},[128,166529,162610],{"class":176},[128,166531,2376],{"class":138},[128,166533,166534],{"class":130,"line":142},[128,166535,160],{"emptyLinePlaceholder":159},[128,166537,166538,166540,166542,166544],{"class":130,"line":156},[128,166539,2404],{"class":134},[128,166541,163295],{"class":138},[128,166543,549],{"class":134},[128,166545,163300],{"class":138},[128,166547,166548,166550],{"class":130,"line":163},[128,166549,437],{"class":166},[128,166551,153977],{"class":138},[19,166553,166554],{},"需要索引时：",[106,166556,166558],{"className":122,"code":166557,"language":124,"meta":112,"style":112},"for index, name in enumerate(names):\n    print(index, name)\n",[114,166559,166560,166574],{"__ignoreMap":112},[128,166561,166562,166564,166567,166569,166571],{"class":130,"line":131},[128,166563,2404],{"class":134},[128,166565,166566],{"class":138}," index, name ",[128,166568,549],{"class":134},[128,166570,35075],{"class":166},[128,166572,166573],{"class":138},"(names):\n",[128,166575,166576,166578],{"class":130,"line":142},[128,166577,437],{"class":166},[128,166579,166580],{"class":138},"(index, name)\n",[19,166582,166583],{},"统计总分：",[106,166585,166587],{"className":122,"code":166586,"language":124,"meta":112,"style":112},"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",[114,166588,166589,166614,166622,166626,166637,166645,166649,166666],{"__ignoreMap":112},[128,166590,166591,166594,166596,166598,166600,166602,166604,166606,166608,166610,166612],{"class":130,"line":131},[128,166592,166593],{"class":138},"scores ",[128,166595,270],{"class":134},[128,166597,55608],{"class":138},[128,166599,4610],{"class":166},[128,166601,258],{"class":138},[128,166603,4485],{"class":166},[128,166605,258],{"class":138},[128,166607,4004],{"class":166},[128,166609,258],{"class":138},[128,166611,4310],{"class":166},[128,166613,2376],{"class":138},[128,166615,166616,166618,166620],{"class":130,"line":142},[128,166617,160139],{"class":138},[128,166619,270],{"class":134},[128,166621,50718],{"class":166},[128,166623,166624],{"class":130,"line":156},[128,166625,160],{"emptyLinePlaceholder":159},[128,166627,166628,166630,166632,166634],{"class":130,"line":163},[128,166629,2404],{"class":134},[128,166631,160662],{"class":138},[128,166633,549],{"class":134},[128,166635,166636],{"class":138}," scores:\n",[128,166638,166639,166641,166643],{"class":130,"line":183},[128,166640,162186],{"class":138},[128,166642,13023],{"class":134},[128,166644,1226],{"class":138},[128,166646,166647],{"class":130,"line":188},[128,166648,160],{"emptyLinePlaceholder":159},[128,166650,166651,166654,166656,166659,166661,166663],{"class":130,"line":193},[128,166652,166653],{"class":138},"avg ",[128,166655,270],{"class":134},[128,166657,166658],{"class":138}," total ",[128,166660,4333],{"class":134},[128,166662,10888],{"class":166},[128,166664,166665],{"class":138},"(scores)\n",[128,166667,166668,166670,166672,166674,166677,166679,166682,166684,166686,166688],{"class":130,"line":206},[128,166669,2469],{"class":166},[128,166671,253],{"class":138},[128,166673,3019],{"class":134},[128,166675,166676],{"class":176},"\"平均分:",[128,166678,1379],{"class":166},[128,166680,166681],{"class":138},"avg",[128,166683,160038],{"class":134},[128,166685,1453],{"class":166},[128,166687,1376],{"class":176},[128,166689,180],{"class":138},[14,166691,166693],{"id":166692},"_66-元组tuple","6.6 元组tuple",[19,166695,166696],{},"元组和列表类似，但不可修改。",[106,166698,166700],{"className":122,"code":166699,"language":124,"meta":112,"style":112},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[114,166701,166702,166719],{"__ignoreMap":112},[128,166703,166704,166707,166709,166711,166713,166715,166717],{"class":130,"line":131},[128,166705,166706],{"class":138},"point ",[128,166708,270],{"class":134},[128,166710,5260],{"class":138},[128,166712,4196],{"class":166},[128,166714,258],{"class":138},[128,166716,4449],{"class":166},[128,166718,180],{"class":138},[128,166720,166721,166723,166725,166727,166729,166731,166733,166735,166737],{"class":130,"line":142},[128,166722,119670],{"class":138},[128,166724,270],{"class":134},[128,166726,5260],{"class":138},[128,166728,153205],{"class":176},[128,166730,258],{"class":138},[128,166732,4399],{"class":166},[128,166734,258],{"class":138},[128,166736,3110],{"class":176},[128,166738,180],{"class":138},[19,166740,166741],{},"单元素元组必须加逗号：",[106,166743,166745],{"className":122,"code":166744,"language":124,"meta":112,"style":112},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[114,166746,166747,166761,166774,166778,166792],{"__ignoreMap":112},[128,166748,166749,166752,166754,166756,166758],{"class":130,"line":131},[128,166750,166751],{"class":138},"t1 ",[128,166753,270],{"class":134},[128,166755,5260],{"class":138},[128,166757,4196],{"class":166},[128,166759,166760],{"class":138},",)\n",[128,166762,166763,166766,166768,166770,166772],{"class":130,"line":142},[128,166764,166765],{"class":138},"t2 ",[128,166767,270],{"class":134},[128,166769,5260],{"class":138},[128,166771,4196],{"class":166},[128,166773,180],{"class":138},[128,166775,166776],{"class":130,"line":156},[128,166777,160],{"emptyLinePlaceholder":159},[128,166779,166780,166782,166784,166786,166789],{"class":130,"line":163},[128,166781,2469],{"class":166},[128,166783,253],{"class":138},[128,166785,106470],{"class":166},[128,166787,166788],{"class":138},"(t1))  ",[128,166790,166791],{"class":3814},"# tuple\n",[128,166793,166794,166796,166798,166800,166803],{"class":130,"line":183},[128,166795,2469],{"class":166},[128,166797,253],{"class":138},[128,166799,106470],{"class":166},[128,166801,166802],{"class":138},"(t2))  ",[128,166804,166805],{"class":3814},"# int\n",[19,166807,166808],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,166810,166812],{"id":166811},"_67-字符串str","6.7 字符串str",[19,166814,166815],{},"字符串也是序列，可以索引、切片和遍历。",[106,166817,166819],{"className":122,"code":166818,"language":124,"meta":112,"style":112},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[114,166820,166821,166829,166833,166844,166856,166860,166871],{"__ignoreMap":112},[128,166822,166823,166825,166827],{"class":130,"line":131},[128,166824,159323],{"class":138},[128,166826,270],{"class":134},[128,166828,162560],{"class":176},[128,166830,166831],{"class":130,"line":142},[128,166832,160],{"emptyLinePlaceholder":159},[128,166834,166835,166837,166840,166842],{"class":130,"line":156},[128,166836,2469],{"class":166},[128,166838,166839],{"class":138},"(text[",[128,166841,2452],{"class":166},[128,166843,2595],{"class":138},[128,166845,166846,166848,166850,166852,166854],{"class":130,"line":163},[128,166847,2469],{"class":166},[128,166849,166839],{"class":138},[128,166851,4281],{"class":134},[128,166853,2592],{"class":166},[128,166855,2595],{"class":138},[128,166857,166858],{"class":130,"line":183},[128,166859,160],{"emptyLinePlaceholder":159},[128,166861,166862,166864,166866,166868],{"class":130,"line":188},[128,166863,2404],{"class":134},[128,166865,162571],{"class":138},[128,166867,549],{"class":134},[128,166869,166870],{"class":138}," text:\n",[128,166872,166873,166875],{"class":130,"line":193},[128,166874,437],{"class":166},[128,166876,162582],{"class":138},[19,166878,166879],{},"字符串不可变：",[106,166881,166883],{"className":122,"code":166882,"language":124,"meta":112,"style":112},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[114,166884,166885,166893],{"__ignoreMap":112},[128,166886,166887,166889,166891],{"class":130,"line":131},[128,166888,159323],{"class":138},[128,166890,270],{"class":134},[128,166892,162560],{"class":176},[128,166894,166895,166898,166900,166902,166904,166907],{"class":130,"line":142},[128,166896,166897],{"class":138},"text[",[128,166899,2452],{"class":166},[128,166901,567],{"class":138},[128,166903,270],{"class":134},[128,166905,166906],{"class":176}," \"P\"",[128,166908,166909],{"class":3814},"  # 报错\n",[19,166911,166912],{},"如果要得到新字符串：",[106,166914,166916],{"className":122,"code":166915,"language":124,"meta":112,"style":112},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[114,166917,166918,166926,166944],{"__ignoreMap":112},[128,166919,166920,166922,166924],{"class":130,"line":131},[128,166921,159323],{"class":138},[128,166923,270],{"class":134},[128,166925,162560],{"class":176},[128,166927,166928,166930,166932,166934,166936,166939,166941],{"class":130,"line":142},[128,166929,159323],{"class":138},[128,166931,270],{"class":134},[128,166933,166906],{"class":176},[128,166935,48951],{"class":134},[128,166937,166938],{"class":138}," text[",[128,166940,2592],{"class":166},[128,166942,166943],{"class":138},":]\n",[128,166945,166946,166948],{"class":130,"line":156},[128,166947,2469],{"class":166},[128,166949,166950],{"class":138},"(text)\n",[14,166952,166954],{"id":166953},"_68-切片","6.8 切片",[19,166956,166957],{},"切片用于从序列中取一部分。",[106,166959,166961],{"className":122,"code":166960,"language":124,"meta":112,"style":112},"序列[开始:结束:步长]\n",[114,166962,166963],{"__ignoreMap":112},[128,166964,166965],{"class":130,"line":131},[128,166966,166960],{"class":138},[19,166968,166969],{},"结束位置不包含。",[106,166971,166973],{"className":122,"code":166972,"language":124,"meta":112,"style":112},"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",[114,166974,166975,167012,167016,167035,167050,167064,167078],{"__ignoreMap":112},[128,166976,166977,166980,166982,166984,166986,166988,166990,166992,166994,166996,166998,167000,167002,167004,167006,167008,167010],{"class":130,"line":131},[128,166978,166979],{"class":138},"nums ",[128,166981,270],{"class":134},[128,166983,55608],{"class":138},[128,166985,2452],{"class":166},[128,166987,258],{"class":138},[128,166989,2592],{"class":166},[128,166991,258],{"class":138},[128,166993,409],{"class":166},[128,166995,258],{"class":138},[128,166997,3827],{"class":166},[128,166999,258],{"class":138},[128,167001,4043],{"class":166},[128,167003,258],{"class":138},[128,167005,4069],{"class":166},[128,167007,258],{"class":138},[128,167009,4094],{"class":166},[128,167011,2376],{"class":138},[128,167013,167014],{"class":130,"line":142},[128,167015,160],{"emptyLinePlaceholder":159},[128,167017,167018,167020,167023,167025,167027,167029,167032],{"class":130,"line":156},[128,167019,2469],{"class":166},[128,167021,167022],{"class":138},"(nums[",[128,167024,2592],{"class":166},[128,167026,4607],{"class":138},[128,167028,4043],{"class":166},[128,167030,167031],{"class":138},"])    ",[128,167033,167034],{"class":3814},"# [1, 2, 3]\n",[128,167036,167037,167039,167042,167044,167047],{"class":130,"line":163},[128,167038,2469],{"class":166},[128,167040,167041],{"class":138},"(nums[:",[128,167043,3827],{"class":166},[128,167045,167046],{"class":138},"])     ",[128,167048,167049],{"class":3814},"# [0, 1, 2]\n",[128,167051,167052,167054,167056,167058,167061],{"class":130,"line":183},[128,167053,2469],{"class":166},[128,167055,167022],{"class":138},[128,167057,3827],{"class":166},[128,167059,167060],{"class":138},":])     ",[128,167062,167063],{"class":3814},"# [3, 4, 5, 6]\n",[128,167065,167066,167068,167071,167073,167075],{"class":130,"line":188},[128,167067,2469],{"class":166},[128,167069,167070],{"class":138},"(nums[::",[128,167072,409],{"class":166},[128,167074,167031],{"class":138},[128,167076,167077],{"class":3814},"# [0, 2, 4, 6]\n",[128,167079,167080,167082,167084,167086,167088,167091],{"class":130,"line":193},[128,167081,2469],{"class":166},[128,167083,167070],{"class":138},[128,167085,4281],{"class":134},[128,167087,2592],{"class":166},[128,167089,167090],{"class":138},"])   ",[128,167092,167093],{"class":3814},"# 反转\n",[19,167095,167096],{},"字符串切片：",[106,167098,167100],{"className":122,"code":167099,"language":124,"meta":112,"style":112},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[114,167101,167102,167111,167125],{"__ignoreMap":112},[128,167103,167104,167106,167108],{"class":130,"line":131},[128,167105,159323],{"class":138},[128,167107,270],{"class":134},[128,167109,167110],{"class":176}," \"abcdef\"\n",[128,167112,167113,167115,167117,167119,167121,167123],{"class":130,"line":142},[128,167114,2469],{"class":166},[128,167116,166839],{"class":138},[128,167118,2592],{"class":166},[128,167120,4607],{"class":138},[128,167122,4043],{"class":166},[128,167124,2595],{"class":138},[128,167126,167127,167129,167132,167134,167136],{"class":130,"line":156},[128,167128,2469],{"class":166},[128,167130,167131],{"class":138},"(text[::",[128,167133,4281],{"class":134},[128,167135,2592],{"class":166},[128,167137,2595],{"class":138},[14,167139,167141],{"id":167140},"_69-集合set","6.9 集合set",[19,167143,167144],{},"集合特点：",[26,167146,167147,167150,167153],{},[29,167148,167149],{},"无序。",[29,167151,167152],{},"元素不重复。",[29,167154,167155],{},"可以做交集、并集、差集。",[106,167157,167159],{"className":122,"code":167158,"language":124,"meta":112,"style":112},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[114,167160,167161,167189],{"__ignoreMap":112},[128,167162,167163,167165,167167,167169,167171,167173,167175,167177,167179,167181,167183,167185,167187],{"class":130,"line":131},[128,167164,166979],{"class":138},[128,167166,270],{"class":134},[128,167168,8013],{"class":138},[128,167170,2592],{"class":166},[128,167172,258],{"class":138},[128,167174,409],{"class":166},[128,167176,258],{"class":138},[128,167178,3827],{"class":166},[128,167180,258],{"class":138},[128,167182,3827],{"class":166},[128,167184,258],{"class":138},[128,167186,4043],{"class":166},[128,167188,2694],{"class":138},[128,167190,167191,167193],{"class":130,"line":142},[128,167192,2469],{"class":166},[128,167194,167195],{"class":138},"(nums)\n",[19,167197,167198],{},"创建空集合：",[106,167200,167202],{"className":122,"code":167201,"language":124,"meta":112,"style":112},"s = set()\n",[114,167203,167204],{"__ignoreMap":112},[128,167205,167206,167208,167210,167212],{"class":130,"line":131},[128,167207,14106],{"class":138},[128,167209,270],{"class":134},[128,167211,123078],{"class":166},[128,167213,5563],{"class":138},[19,167215,12571,167216,167218],{},[114,167217,35925],{}," 是空字典，不是空集合。",[19,167220,167221],{},"集合常用操作：",[106,167223,167225],{"className":122,"code":167224,"language":124,"meta":112,"style":112},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[114,167226,167227,167247,167251,167260,167269,167278],{"__ignoreMap":112},[128,167228,167229,167231,167233,167235,167237,167239,167241,167243,167245],{"class":130,"line":131},[128,167230,14106],{"class":138},[128,167232,270],{"class":134},[128,167234,8013],{"class":138},[128,167236,2592],{"class":166},[128,167238,258],{"class":138},[128,167240,409],{"class":166},[128,167242,258],{"class":138},[128,167244,3827],{"class":166},[128,167246,2694],{"class":138},[128,167248,167249],{"class":130,"line":142},[128,167250,160],{"emptyLinePlaceholder":159},[128,167252,167253,167256,167258],{"class":130,"line":156},[128,167254,167255],{"class":138},"s.add(",[128,167257,4043],{"class":166},[128,167259,180],{"class":138},[128,167261,167262,167265,167267],{"class":130,"line":163},[128,167263,167264],{"class":138},"s.remove(",[128,167266,409],{"class":166},[128,167268,180],{"class":138},[128,167270,167271,167274,167276],{"class":130,"line":183},[128,167272,167273],{"class":138},"s.discard(",[128,167275,4196],{"class":166},[128,167277,180],{"class":138},[128,167279,167280,167282,167284,167286],{"class":130,"line":188},[128,167281,2469],{"class":166},[128,167283,253],{"class":138},[128,167285,10915],{"class":166},[128,167287,167288],{"class":138},"(s))\n",[19,167290,167291],{},"交并差：",[106,167293,167295],{"className":122,"code":167294,"language":124,"meta":112,"style":112},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[114,167296,167297,167317,167337,167341,167356,167369],{"__ignoreMap":112},[128,167298,167299,167301,167303,167305,167307,167309,167311,167313,167315],{"class":130,"line":131},[128,167300,14446],{"class":138},[128,167302,270],{"class":134},[128,167304,8013],{"class":138},[128,167306,2592],{"class":166},[128,167308,258],{"class":138},[128,167310,409],{"class":166},[128,167312,258],{"class":138},[128,167314,3827],{"class":166},[128,167316,2694],{"class":138},[128,167318,167319,167321,167323,167325,167327,167329,167331,167333,167335],{"class":130,"line":142},[128,167320,14472],{"class":138},[128,167322,270],{"class":134},[128,167324,8013],{"class":138},[128,167326,3827],{"class":166},[128,167328,258],{"class":138},[128,167330,4043],{"class":166},[128,167332,258],{"class":138},[128,167334,4069],{"class":166},[128,167336,2694],{"class":138},[128,167338,167339],{"class":130,"line":156},[128,167340,160],{"emptyLinePlaceholder":159},[128,167342,167343,167345,167348,167350,167353],{"class":130,"line":163},[128,167344,2469],{"class":166},[128,167346,167347],{"class":138},"(a ",[128,167349,4103],{"class":134},[128,167351,167352],{"class":138}," b)  ",[128,167354,167355],{"class":3814},"# 交集\n",[128,167357,167358,167360,167362,167364,167366],{"class":130,"line":183},[128,167359,2469],{"class":166},[128,167361,167347],{"class":138},[128,167363,4668],{"class":134},[128,167365,167352],{"class":138},[128,167367,167368],{"class":3814},"# 并集\n",[128,167370,167371,167373,167375,167377,167379],{"class":130,"line":188},[128,167372,2469],{"class":166},[128,167374,167347],{"class":138},[128,167376,4281],{"class":134},[128,167378,167352],{"class":138},[128,167380,167381],{"class":3814},"# 差集\n",[14,167383,167385],{"id":167384},"_610-字典dict","6.10 字典dict",[19,167387,167388],{},"字典通过 key-value 保存数据。",[106,167390,167392],{"className":122,"code":167391,"language":124,"meta":112,"style":112},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[114,167393,167394,167402,167412,167423,167433],{"__ignoreMap":112},[128,167395,167396,167398,167400],{"class":130,"line":131},[128,167397,152801],{"class":138},[128,167399,270],{"class":134},[128,167401,1959],{"class":138},[128,167403,167404,167406,167408,167410],{"class":130,"line":142},[128,167405,150363],{"class":176},[128,167407,1967],{"class":138},[128,167409,153205],{"class":176},[128,167411,2665],{"class":138},[128,167413,167414,167417,167419,167421],{"class":130,"line":156},[128,167415,167416],{"class":176},"    \"age\"",[128,167418,1967],{"class":138},[128,167420,4399],{"class":166},[128,167422,2665],{"class":138},[128,167424,167425,167428,167430],{"class":130,"line":163},[128,167426,167427],{"class":176},"    \"score\"",[128,167429,1967],{"class":138},[128,167431,167432],{"class":166},"95\n",[128,167434,167435],{"class":130,"line":183},[128,167436,2694],{"class":138},[19,167438,167439],{},"获取值：",[106,167441,167443],{"className":122,"code":167442,"language":124,"meta":112,"style":112},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[114,167444,167445,167456],{"__ignoreMap":112},[128,167446,167447,167449,167452,167454],{"class":130,"line":131},[128,167448,2469],{"class":166},[128,167450,167451],{"class":138},"(student[",[128,167453,1189],{"class":176},[128,167455,2595],{"class":138},[128,167457,167458,167460,167463,167465],{"class":130,"line":142},[128,167459,2469],{"class":166},[128,167461,167462],{"class":138},"(student.get(",[128,167464,1189],{"class":176},[128,167466,3034],{"class":138},[19,167468,18909],{},[106,167470,167472],{"className":122,"code":167471,"language":124,"meta":112,"style":112},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[114,167473,167474,167487],{"__ignoreMap":112},[128,167475,167476,167478,167481,167484],{"class":130,"line":131},[128,167477,1382],{"class":138},[128,167479,167480],{"class":176},"\"address\"",[128,167482,167483],{"class":138},"]     ",[128,167485,167486],{"class":3814},"# key不存在会报错\n",[128,167488,167489,167492,167494,167496],{"class":130,"line":142},[128,167490,167491],{"class":138},"student.get(",[128,167493,167480],{"class":176},[128,167495,276],{"class":138},[128,167497,167498],{"class":3814},"# key不存在返回None\n",[19,167500,167501],{},"设置默认值：",[106,167503,167505],{"className":122,"code":167504,"language":124,"meta":112,"style":112},"print(student.get(\"address\", \"未知\"))\n",[114,167506,167507],{"__ignoreMap":112},[128,167508,167509,167511,167513,167515,167517,167520],{"class":130,"line":131},[128,167510,2469],{"class":166},[128,167512,167462],{"class":138},[128,167514,167480],{"class":176},[128,167516,258],{"class":138},[128,167518,167519],{"class":176},"\"未知\"",[128,167521,3034],{"class":138},[19,167523,167524],{},"新增和修改：",[106,167526,167528],{"className":122,"code":167527,"language":124,"meta":112,"style":112},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[114,167529,167530,167543],{"__ignoreMap":112},[128,167531,167532,167534,167536,167538,167540],{"class":130,"line":131},[128,167533,1382],{"class":138},[128,167535,1204],{"class":176},[128,167537,567],{"class":138},[128,167539,270],{"class":134},[128,167541,167542],{"class":166}," 19\n",[128,167544,167545,167547,167549,167551,167553],{"class":130,"line":142},[128,167546,1382],{"class":138},[128,167548,167480],{"class":176},[128,167550,567],{"class":138},[128,167552,270],{"class":134},[128,167554,167555],{"class":176}," \"北京\"\n",[19,167557,167558],{},"删除：",[106,167560,167562],{"className":122,"code":167561,"language":124,"meta":112,"style":112},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[114,167563,167564,167577,167587],{"__ignoreMap":112},[128,167565,167566,167568,167570,167573,167575],{"class":130,"line":131},[128,167567,158237],{"class":138},[128,167569,270],{"class":134},[128,167571,167572],{"class":138}," student.pop(",[128,167574,1219],{"class":176},[128,167576,180],{"class":138},[128,167578,167579,167581,167583,167585],{"class":130,"line":142},[128,167580,166262],{"class":134},[128,167582,561],{"class":138},[128,167584,1204],{"class":176},[128,167586,2376],{"class":138},[128,167588,167589],{"class":130,"line":156},[128,167590,167591],{"class":138},"student.clear()\n",[14,167593,167595],{"id":167594},"_611-字典遍历","6.11 字典遍历",[19,167597,167598],{},"遍历 key：",[106,167600,167602],{"className":122,"code":167601,"language":124,"meta":112,"style":112},"for key in student:\n    print(key, student[key])\n",[114,167603,167604,167616],{"__ignoreMap":112},[128,167605,167606,167608,167611,167613],{"class":130,"line":131},[128,167607,2404],{"class":134},[128,167609,167610],{"class":138}," key ",[128,167612,549],{"class":134},[128,167614,167615],{"class":138}," student:\n",[128,167617,167618,167620],{"class":130,"line":142},[128,167619,437],{"class":166},[128,167621,167622],{"class":138},"(key, student[key])\n",[19,167624,167625],{},"遍历 value：",[106,167627,167629],{"className":122,"code":167628,"language":124,"meta":112,"style":112},"for value in student.values():\n    print(value)\n",[114,167630,167631,167643],{"__ignoreMap":112},[128,167632,167633,167635,167638,167640],{"class":130,"line":131},[128,167634,2404],{"class":134},[128,167636,167637],{"class":138}," value ",[128,167639,549],{"class":134},[128,167641,167642],{"class":138}," student.values():\n",[128,167644,167645,167647],{"class":130,"line":142},[128,167646,437],{"class":166},[128,167648,167649],{"class":138},"(value)\n",[19,167651,167652],{},"遍历 key 和 value：",[106,167654,167656],{"className":122,"code":167655,"language":124,"meta":112,"style":112},"for key, value in student.items():\n    print(key, value)\n",[114,167657,167658,167670],{"__ignoreMap":112},[128,167659,167660,167662,167665,167667],{"class":130,"line":131},[128,167661,2404],{"class":134},[128,167663,167664],{"class":138}," key, value ",[128,167666,549],{"class":134},[128,167668,167669],{"class":138}," student.items():\n",[128,167671,167672,167674],{"class":130,"line":142},[128,167673,437],{"class":166},[128,167675,167676],{"class":138},"(key, value)\n",[14,167678,167680],{"id":167679},"_612-嵌套容器","6.12 嵌套容器",[19,167682,167683],{},"列表中保存字典，是项目中最常见的结构之一。",[106,167685,167687],{"className":122,"code":167686,"language":124,"meta":112,"style":112},"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",[114,167688,167689,167697,167725,167753,167781,167785,167789,167799],{"__ignoreMap":112},[128,167690,167691,167693,167695],{"class":130,"line":131},[128,167692,162595],{"class":138},[128,167694,270],{"class":134},[128,167696,2246],{"class":138},[128,167698,167699,167701,167703,167705,167707,167709,167711,167713,167715,167717,167719,167721,167723],{"class":130,"line":142},[128,167700,2251],{"class":138},[128,167702,1189],{"class":176},[128,167704,1967],{"class":138},[128,167706,153205],{"class":176},[128,167708,258],{"class":138},[128,167710,1204],{"class":176},[128,167712,1967],{"class":138},[128,167714,4399],{"class":166},[128,167716,258],{"class":138},[128,167718,1219],{"class":176},[128,167720,1967],{"class":138},[128,167722,4734],{"class":166},[128,167724,2282],{"class":138},[128,167726,167727,167729,167731,167733,167735,167737,167739,167741,167743,167745,167747,167749,167751],{"class":130,"line":156},[128,167728,2251],{"class":138},[128,167730,1189],{"class":176},[128,167732,1967],{"class":138},[128,167734,154253],{"class":176},[128,167736,258],{"class":138},[128,167738,1204],{"class":176},[128,167740,1967],{"class":138},[128,167742,4374],{"class":166},[128,167744,258],{"class":138},[128,167746,1219],{"class":176},[128,167748,1967],{"class":138},[128,167750,4560],{"class":166},[128,167752,2282],{"class":138},[128,167754,167755,167757,167759,167761,167763,167765,167767,167769,167771,167773,167775,167777,167779],{"class":130,"line":163},[128,167756,2251],{"class":138},[128,167758,1189],{"class":176},[128,167760,1967],{"class":138},[128,167762,162610],{"class":176},[128,167764,258],{"class":138},[128,167766,1204],{"class":176},[128,167768,1967],{"class":138},[128,167770,4424],{"class":166},[128,167772,258],{"class":138},[128,167774,1219],{"class":176},[128,167776,1967],{"class":138},[128,167778,4156],{"class":166},[128,167780,2282],{"class":138},[128,167782,167783],{"class":130,"line":183},[128,167784,2376],{"class":138},[128,167786,167787],{"class":130,"line":188},[128,167788,160],{"emptyLinePlaceholder":159},[128,167790,167791,167793,167795,167797],{"class":130,"line":193},[128,167792,2404],{"class":134},[128,167794,546],{"class":138},[128,167796,549],{"class":134},[128,167798,552],{"class":138},[128,167800,167801,167803,167805,167807,167810,167812],{"class":130,"line":206},[128,167802,437],{"class":166},[128,167804,167451],{"class":138},[128,167806,1189],{"class":176},[128,167808,167809],{"class":138},"], student[",[128,167811,1219],{"class":176},[128,167813,2595],{"class":138},[19,167815,167816],{},"统计平均分：",[106,167818,167820],{"className":122,"code":167819,"language":124,"meta":112,"style":112},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[114,167821,167822,167830,167834,167844,167856,167860,167875],{"__ignoreMap":112},[128,167823,167824,167826,167828],{"class":130,"line":131},[128,167825,160139],{"class":138},[128,167827,270],{"class":134},[128,167829,50718],{"class":166},[128,167831,167832],{"class":130,"line":142},[128,167833,160],{"emptyLinePlaceholder":159},[128,167835,167836,167838,167840,167842],{"class":130,"line":156},[128,167837,2404],{"class":134},[128,167839,546],{"class":138},[128,167841,549],{"class":134},[128,167843,552],{"class":138},[128,167845,167846,167848,167850,167852,167854],{"class":130,"line":163},[128,167847,162186],{"class":138},[128,167849,13023],{"class":134},[128,167851,561],{"class":138},[128,167853,1219],{"class":176},[128,167855,2376],{"class":138},[128,167857,167858],{"class":130,"line":183},[128,167859,160],{"emptyLinePlaceholder":159},[128,167861,167862,167864,167866,167868,167870,167872],{"class":130,"line":188},[128,167863,166653],{"class":138},[128,167865,270],{"class":134},[128,167867,166658],{"class":138},[128,167869,4333],{"class":134},[128,167871,10888],{"class":166},[128,167873,167874],{"class":138},"(students)\n",[128,167876,167877,167879,167881,167883,167885,167887,167889,167891,167893,167895],{"class":130,"line":193},[128,167878,2469],{"class":166},[128,167880,253],{"class":138},[128,167882,3019],{"class":134},[128,167884,166676],{"class":176},[128,167886,1379],{"class":166},[128,167888,166681],{"class":138},[128,167890,160038],{"class":134},[128,167892,1453],{"class":166},[128,167894,1376],{"class":176},[128,167896,180],{"class":138},[19,167898,167899],{},"查找学生：",[106,167901,167903],{"className":122,"code":167902,"language":124,"meta":112,"style":112},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[114,167904,167905,167920,167924,167934,167948,167954,167958,167964],{"__ignoreMap":112},[128,167906,167907,167909,167911,167913,167915,167918],{"class":130,"line":131},[128,167908,114935],{"class":138},[128,167910,270],{"class":134},[128,167912,772],{"class":166},[128,167914,253],{"class":138},[128,167916,167917],{"class":176},"\"请输入学生姓名:\"",[128,167919,180],{"class":138},[128,167921,167922],{"class":130,"line":142},[128,167923,160],{"emptyLinePlaceholder":159},[128,167925,167926,167928,167930,167932],{"class":130,"line":156},[128,167927,2404],{"class":134},[128,167929,546],{"class":138},[128,167931,549],{"class":134},[128,167933,552],{"class":138},[128,167935,167936,167938,167940,167942,167944,167946],{"class":130,"line":163},[128,167937,209],{"class":134},[128,167939,561],{"class":138},[128,167941,1189],{"class":176},[128,167943,567],{"class":138},[128,167945,570],{"class":134},[128,167947,163311],{"class":138},[128,167949,167950,167952],{"class":130,"line":183},[128,167951,313],{"class":166},[128,167953,153359],{"class":138},[128,167955,167956],{"class":130,"line":188},[128,167957,35096],{"class":134},[128,167959,167960,167962],{"class":130,"line":193},[128,167961,5299],{"class":134},[128,167963,241],{"class":138},[128,167965,167966,167968,167970,167973],{"class":130,"line":206},[128,167967,437],{"class":166},[128,167969,253],{"class":138},[128,167971,167972],{"class":176},"\"没有找到\"",[128,167974,180],{"class":138},[14,167976,167978],{"id":167977},"_613-容器通用操作","6.13 容器通用操作",[19,167980,167981],{},"长度：",[106,167983,167985],{"className":122,"code":167984,"language":124,"meta":112,"style":112},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[114,167986,167987,168006,168016],{"__ignoreMap":112},[128,167988,167989,167991,167994,167996,167998,168000,168002,168004],{"class":130,"line":131},[128,167990,10915],{"class":166},[128,167992,167993],{"class":138},"([",[128,167995,2592],{"class":166},[128,167997,258],{"class":138},[128,167999,409],{"class":166},[128,168001,258],{"class":138},[128,168003,3827],{"class":166},[128,168005,2595],{"class":138},[128,168007,168008,168010,168012,168014],{"class":130,"line":142},[128,168009,10915],{"class":166},[128,168011,253],{"class":138},[128,168013,158759],{"class":176},[128,168015,180],{"class":138},[128,168017,168018,168020,168023,168025,168027,168029],{"class":130,"line":156},[128,168019,10915],{"class":166},[128,168021,168022],{"class":138},"({",[128,168024,1189],{"class":176},[128,168026,1967],{"class":138},[128,168028,153205],{"class":176},[128,168030,168031],{"class":138},"})\n",[19,168033,168034],{},"最大最小：",[106,168036,168038],{"className":122,"code":168037,"language":124,"meta":112,"style":112},"max([1, 2, 3])\nmin([1, 2, 3])\n",[114,168039,168040,168058],{"__ignoreMap":112},[128,168041,168042,168044,168046,168048,168050,168052,168054,168056],{"class":130,"line":131},[128,168043,9572],{"class":166},[128,168045,167993],{"class":138},[128,168047,2592],{"class":166},[128,168049,258],{"class":138},[128,168051,409],{"class":166},[128,168053,258],{"class":138},[128,168055,3827],{"class":166},[128,168057,2595],{"class":138},[128,168059,168060,168063,168065,168067,168069,168071,168073,168075],{"class":130,"line":142},[128,168061,168062],{"class":166},"min",[128,168064,167993],{"class":138},[128,168066,2592],{"class":166},[128,168068,258],{"class":138},[128,168070,409],{"class":166},[128,168072,258],{"class":138},[128,168074,3827],{"class":166},[128,168076,2595],{"class":138},[19,168078,168079],{},"求和：",[106,168081,168083],{"className":122,"code":168082,"language":124,"meta":112,"style":112},"sum([1, 2, 3])\n",[114,168084,168085],{"__ignoreMap":112},[128,168086,168087,168090,168092,168094,168096,168098,168100,168102],{"class":130,"line":131},[128,168088,168089],{"class":166},"sum",[128,168091,167993],{"class":138},[128,168093,2592],{"class":166},[128,168095,258],{"class":138},[128,168097,409],{"class":166},[128,168099,258],{"class":138},[128,168101,3827],{"class":166},[128,168103,2595],{"class":138},[19,168105,166350],{},[106,168107,168109],{"className":122,"code":168108,"language":124,"meta":112,"style":112},"sorted([3, 1, 2])\n",[114,168110,168111],{"__ignoreMap":112},[128,168112,168113,168116,168118,168120,168122,168124,168126,168128],{"class":130,"line":131},[128,168114,168115],{"class":166},"sorted",[128,168117,167993],{"class":138},[128,168119,3827],{"class":166},[128,168121,258],{"class":138},[128,168123,2592],{"class":166},[128,168125,258],{"class":138},[128,168127,409],{"class":166},[128,168129,2595],{"class":138},[19,168131,168132],{},"类型转换：",[106,168134,168136],{"className":122,"code":168135,"language":124,"meta":112,"style":112},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[114,168137,168138,168148,168166],{"__ignoreMap":112},[128,168139,168140,168142,168144,168146],{"class":130,"line":131},[128,168141,2716],{"class":166},[128,168143,253],{"class":138},[128,168145,158759],{"class":176},[128,168147,180],{"class":138},[128,168149,168150,168152,168154,168156,168158,168160,168162,168164],{"class":130,"line":142},[128,168151,158144],{"class":166},[128,168153,167993],{"class":138},[128,168155,2592],{"class":166},[128,168157,258],{"class":138},[128,168159,409],{"class":166},[128,168161,258],{"class":138},[128,168163,3827],{"class":166},[128,168165,2595],{"class":138},[128,168167,168168,168170,168172,168174,168176,168178,168180,168182,168184,168186],{"class":130,"line":156},[128,168169,158169],{"class":166},[128,168171,167993],{"class":138},[128,168173,2592],{"class":166},[128,168175,258],{"class":138},[128,168177,2592],{"class":166},[128,168179,258],{"class":138},[128,168181,409],{"class":166},[128,168183,258],{"class":138},[128,168185,3827],{"class":166},[128,168187,2595],{"class":138},[19,168189,168190],{},"成员判断：",[106,168192,168194],{"className":122,"code":168193,"language":124,"meta":112,"style":112},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[114,168195,168196,168213,168237],{"__ignoreMap":112},[128,168197,168198,168200,168202,168205,168208,168211],{"class":130,"line":131},[128,168199,2469],{"class":166},[128,168201,253],{"class":138},[128,168203,168204],{"class":176},"\"a\"",[128,168206,168207],{"class":134}," in",[128,168209,168210],{"class":176}," \"abc\"",[128,168212,180],{"class":138},[128,168214,168215,168217,168219,168221,168223,168225,168227,168229,168231,168233,168235],{"class":130,"line":142},[128,168216,2469],{"class":166},[128,168218,253],{"class":138},[128,168220,2592],{"class":166},[128,168222,168207],{"class":134},[128,168224,55608],{"class":138},[128,168226,2592],{"class":166},[128,168228,258],{"class":138},[128,168230,409],{"class":166},[128,168232,258],{"class":138},[128,168234,3827],{"class":166},[128,168236,2595],{"class":138},[128,168238,168239,168241,168243,168245,168247,168249,168251,168253,168255],{"class":130,"line":156},[128,168240,2469],{"class":166},[128,168242,253],{"class":138},[128,168244,1189],{"class":176},[128,168246,168207],{"class":134},[128,168248,8013],{"class":138},[128,168250,1189],{"class":176},[128,168252,1967],{"class":138},[128,168254,153205],{"class":176},[128,168256,168031],{"class":138},[14,168258,168260],{"id":168259},"_614-推导式","6.14 推导式",[19,168262,168263],{},"推导式用于快速生成容器。",[19,168265,168266],{},"列表推导式：",[106,168268,168270],{"className":122,"code":168269,"language":124,"meta":112,"style":112},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[114,168271,168272,168299],{"__ignoreMap":112},[128,168273,168274,168276,168278,168281,168283,168285,168287,168289,168291,168293,168295,168297],{"class":130,"line":131},[128,168275,166979],{"class":138},[128,168277,270],{"class":134},[128,168279,168280],{"class":138}," [i ",[128,168282,2404],{"class":134},[128,168284,12984],{"class":138},[128,168286,549],{"class":134},[128,168288,35910],{"class":166},[128,168290,253],{"class":138},[128,168292,2592],{"class":166},[128,168294,258],{"class":138},[128,168296,4094],{"class":166},[128,168298,100669],{"class":138},[128,168300,168301,168303],{"class":130,"line":142},[128,168302,2469],{"class":166},[128,168304,167195],{"class":138},[19,168306,168307],{},"带条件：",[106,168309,168311],{"className":122,"code":168310,"language":124,"meta":112,"style":112},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[114,168312,168313,168354],{"__ignoreMap":112},[128,168314,168315,168318,168320,168322,168324,168326,168328,168330,168332,168334,168336,168338,168340,168342,168344,168346,168348,168350,168352],{"class":130,"line":131},[128,168316,168317],{"class":138},"even_nums ",[128,168319,270],{"class":134},[128,168321,168280],{"class":138},[128,168323,2404],{"class":134},[128,168325,12984],{"class":138},[128,168327,549],{"class":134},[128,168329,35910],{"class":166},[128,168331,253],{"class":138},[128,168333,2592],{"class":166},[128,168335,258],{"class":138},[128,168337,4087],{"class":166},[128,168339,276],{"class":138},[128,168341,1800],{"class":134},[128,168343,12984],{"class":138},[128,168345,4078],{"class":134},[128,168347,18277],{"class":166},[128,168349,1806],{"class":134},[128,168351,7659],{"class":166},[128,168353,2376],{"class":138},[128,168355,168356,168358],{"class":130,"line":142},[128,168357,2469],{"class":166},[128,168359,168360],{"class":138},"(even_nums)\n",[19,168362,168363],{},"字典推导式：",[106,168365,168367],{"className":122,"code":168366,"language":124,"meta":112,"style":112},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[114,168368,168369,168403],{"__ignoreMap":112},[128,168370,168371,168374,168376,168379,168381,168383,168386,168388,168390,168392,168394,168396,168398,168400],{"class":130,"line":131},[128,168372,168373],{"class":138},"squares ",[128,168375,270],{"class":134},[128,168377,168378],{"class":138}," {i: i ",[128,168380,14188],{"class":134},[128,168382,18277],{"class":166},[128,168384,168385],{"class":134}," for",[128,168387,12984],{"class":138},[128,168389,549],{"class":134},[128,168391,35910],{"class":166},[128,168393,253],{"class":138},[128,168395,2592],{"class":166},[128,168397,258],{"class":138},[128,168399,4094],{"class":166},[128,168401,168402],{"class":138},")}\n",[128,168404,168405,168407],{"class":130,"line":142},[128,168406,2469],{"class":166},[128,168408,168409],{"class":138},"(squares)\n",[19,168411,168412],{},"集合推导式：",[106,168414,168416],{"className":122,"code":168415,"language":124,"meta":112,"style":112},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[114,168417,168418,168439],{"__ignoreMap":112},[128,168419,168420,168423,168425,168428,168430,168432,168434,168437],{"class":130,"line":131},[128,168421,168422],{"class":138},"chars ",[128,168424,270],{"class":134},[128,168426,168427],{"class":138}," {ch ",[128,168429,2404],{"class":134},[128,168431,162571],{"class":138},[128,168433,549],{"class":134},[128,168435,168436],{"class":176}," \"hello\"",[128,168438,2694],{"class":138},[128,168440,168441,168443],{"class":130,"line":142},[128,168442,2469],{"class":166},[128,168444,168445],{"class":138},"(chars)\n",[19,168447,168448],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,168450,168452],{"id":168451},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[106,168454,168456],{"className":122,"code":168455,"language":124,"meta":112,"style":112},"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",[114,168457,168458,168466,168486,168506,168526,168546,168550,168554,168562,168576,168585,168589,168599,168611,168615,168635,168644,168648,168664,168669,168673,168687,168691,168713,168749],{"__ignoreMap":112},[128,168459,168460,168462,168464],{"class":130,"line":131},[128,168461,162595],{"class":138},[128,168463,270],{"class":134},[128,168465,2246],{"class":138},[128,168467,168468,168470,168472,168474,168476,168478,168480,168482,168484],{"class":130,"line":142},[128,168469,2251],{"class":138},[128,168471,1189],{"class":176},[128,168473,1967],{"class":138},[128,168475,153205],{"class":176},[128,168477,258],{"class":138},[128,168479,1219],{"class":176},[128,168481,1967],{"class":138},[128,168483,4734],{"class":166},[128,168485,2282],{"class":138},[128,168487,168488,168490,168492,168494,168496,168498,168500,168502,168504],{"class":130,"line":156},[128,168489,2251],{"class":138},[128,168491,1189],{"class":176},[128,168493,1967],{"class":138},[128,168495,154253],{"class":176},[128,168497,258],{"class":138},[128,168499,1219],{"class":176},[128,168501,1967],{"class":138},[128,168503,4560],{"class":166},[128,168505,2282],{"class":138},[128,168507,168508,168510,168512,168514,168516,168518,168520,168522,168524],{"class":130,"line":163},[128,168509,2251],{"class":138},[128,168511,1189],{"class":176},[128,168513,1967],{"class":138},[128,168515,162610],{"class":176},[128,168517,258],{"class":138},[128,168519,1219],{"class":176},[128,168521,1967],{"class":138},[128,168523,4156],{"class":166},[128,168525,2282],{"class":138},[128,168527,168528,168530,168532,168534,168536,168538,168540,168542,168544],{"class":130,"line":183},[128,168529,2251],{"class":138},[128,168531,1189],{"class":176},[128,168533,1967],{"class":138},[128,168535,166189],{"class":176},[128,168537,258],{"class":138},[128,168539,1219],{"class":176},[128,168541,1967],{"class":138},[128,168543,4630],{"class":166},[128,168545,2282],{"class":138},[128,168547,168548],{"class":130,"line":188},[128,168549,2376],{"class":138},[128,168551,168552],{"class":130,"line":193},[128,168553,160],{"emptyLinePlaceholder":159},[128,168555,168556,168558,168560],{"class":130,"line":206},[128,168557,160139],{"class":138},[128,168559,270],{"class":134},[128,168561,50718],{"class":166},[128,168563,168564,168567,168569,168572,168574],{"class":130,"line":221},[128,168565,168566],{"class":138},"max_student ",[128,168568,270],{"class":134},[128,168570,168571],{"class":138}," students[",[128,168573,2452],{"class":166},[128,168575,2376],{"class":138},[128,168577,168578,168581,168583],{"class":130,"line":230},[128,168579,168580],{"class":138},"passed ",[128,168582,270],{"class":134},[128,168584,227],{"class":138},[128,168586,168587],{"class":130,"line":235},[128,168588,160],{"emptyLinePlaceholder":159},[128,168590,168591,168593,168595,168597],{"class":130,"line":244},[128,168592,2404],{"class":134},[128,168594,546],{"class":138},[128,168596,549],{"class":134},[128,168598,552],{"class":138},[128,168600,168601,168603,168605,168607,168609],{"class":130,"line":287},[128,168602,162186],{"class":138},[128,168604,13023],{"class":134},[128,168606,561],{"class":138},[128,168608,1219],{"class":176},[128,168610,2376],{"class":138},[128,168612,168613],{"class":130,"line":301},[128,168614,160],{"emptyLinePlaceholder":159},[128,168616,168617,168619,168621,168623,168625,168627,168630,168632],{"class":130,"line":310},[128,168618,209],{"class":134},[128,168620,561],{"class":138},[128,168622,1219],{"class":176},[128,168624,567],{"class":138},[128,168626,4705],{"class":134},[128,168628,168629],{"class":138}," max_student[",[128,168631,1219],{"class":176},[128,168633,168634],{"class":138},"]:\n",[128,168636,168637,168640,168642],{"class":130,"line":323},[128,168638,168639],{"class":138},"        max_student ",[128,168641,270],{"class":134},[128,168643,581],{"class":138},[128,168645,168646],{"class":130,"line":330},[128,168647,160],{"emptyLinePlaceholder":159},[128,168649,168650,168652,168654,168656,168658,168660,168662],{"class":130,"line":335},[128,168651,209],{"class":134},[128,168653,561],{"class":138},[128,168655,1219],{"class":176},[128,168657,567],{"class":138},[128,168659,5308],{"class":134},[128,168661,160716],{"class":166},[128,168663,241],{"class":138},[128,168665,168666],{"class":130,"line":340},[128,168667,168668],{"class":138},"        passed.append(student)\n",[128,168670,168671],{"class":130,"line":351},[128,168672,160],{"emptyLinePlaceholder":159},[128,168674,168675,168677,168679,168681,168683,168685],{"class":130,"line":384},[128,168676,166653],{"class":138},[128,168678,270],{"class":134},[128,168680,166658],{"class":138},[128,168682,4333],{"class":134},[128,168684,10888],{"class":166},[128,168686,167874],{"class":138},[128,168688,168689],{"class":130,"line":414},[128,168690,160],{"emptyLinePlaceholder":159},[128,168692,168693,168695,168697,168699,168701,168703,168705,168707,168709,168711],{"class":130,"line":419},[128,168694,2469],{"class":166},[128,168696,253],{"class":138},[128,168698,3019],{"class":134},[128,168700,166676],{"class":176},[128,168702,1379],{"class":166},[128,168704,166681],{"class":138},[128,168706,160038],{"class":134},[128,168708,1453],{"class":166},[128,168710,1376],{"class":176},[128,168712,180],{"class":138},[128,168714,168715,168717,168719,168721,168724,168726,168729,168731,168733,168735,168737,168739,168741,168743,168745,168747],{"class":130,"line":424},[128,168716,2469],{"class":166},[128,168718,253],{"class":138},[128,168720,3019],{"class":134},[128,168722,168723],{"class":176},"\"最高分学生:",[128,168725,1379],{"class":166},[128,168727,168728],{"class":138},"max_student[",[128,168730,1408],{"class":176},[128,168732,1388],{"class":138},[128,168734,1453],{"class":166},[128,168736,8013],{"class":166},[128,168738,168728],{"class":138},[128,168740,1448],{"class":176},[128,168742,1388],{"class":138},[128,168744,1453],{"class":166},[128,168746,1376],{"class":176},[128,168748,180],{"class":138},[128,168750,168751,168753,168755,168757,168760,168763,168766,168768,168770],{"class":130,"line":434},[128,168752,2469],{"class":166},[128,168754,253],{"class":138},[128,168756,3019],{"class":134},[128,168758,168759],{"class":176},"\"及格人数:",[128,168761,168762],{"class":166},"{len",[128,168764,168765],{"class":138},"(passed)",[128,168767,1453],{"class":166},[128,168769,1376],{"class":176},[128,168771,180],{"class":138},[14,168773,168775],{"id":168774},"_616-易错点","6.16 易错点",[26,168777,168778,168781,168784,168787,168793,168802],{},[29,168779,168780],{},"列表可变，元组和字符串不可变。",[29,168782,168783],{},"切片结束位置不包含。",[29,168785,168786],{},"字典通过 key 取值，不是通过索引。",[29,168788,168789,168790,1842],{},"空集合要用 ",[114,168791,168792],{},"set()",[29,168794,107729,168795,168798,168799,1842],{},[114,168796,168797],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[114,168800,168801],{},"get()",[29,168803,168804],{},"嵌套容器要先看清楚每一层是什么类型。",[14,168806,168808],{"id":168807},"_617-本章练习","6.17 本章练习",[26,168810,168811,168814,168817,168820,168823],{},[29,168812,168813],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[29,168815,168816],{},"输入一句话，统计每个字符出现次数。",[29,168818,168819],{},"使用集合去除列表中的重复元素。",[29,168821,168822],{},"使用字典保存一个学生的信息，并实现修改成绩。",[29,168824,168825],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[3659,168827,168828],{},"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":112,"searchDepth":142,"depth":142,"links":168830},[168831,168832,168833,168834,168835,168836,168837,168838,168839,168840,168841,168842,168843,168844,168845,168846,168847],{"id":165811,"depth":142,"text":165812},{"id":165928,"depth":142,"text":165929},{"id":166018,"depth":142,"text":166019},{"id":166142,"depth":142,"text":166143},{"id":166505,"depth":142,"text":166506},{"id":166692,"depth":142,"text":166693},{"id":166811,"depth":142,"text":166812},{"id":166953,"depth":142,"text":166954},{"id":167140,"depth":142,"text":167141},{"id":167384,"depth":142,"text":167385},{"id":167594,"depth":142,"text":167595},{"id":167679,"depth":142,"text":167680},{"id":167977,"depth":142,"text":167978},{"id":168259,"depth":142,"text":168260},{"id":168451,"depth":142,"text":168452},{"id":168774,"depth":142,"text":168775},{"id":168807,"depth":142,"text":168808},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":165803,"description":3686},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":168854,"title":168855,"body":168856,"description":3686,"extension":3687,"meta":171028,"navigation":159,"path":171029,"seo":171030,"stem":171031,"__hash__":171032},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":168857,"toc":171003},[168858,168861,168865,168868,168948,168951,168972,168975,168979,168982,169044,169047,169064,169068,169071,169116,169118,169126,169130,169133,169215,169218,169221,169246,169249,169272,169276,169279,169281,169343,169346,169348,169399,169403,169407,169413,169518,169522,169528,169599,169603,169606,169674,169677,169757,169761,169767,169803,169806,169809,169919,169925,169929,169932,170004,170007,170011,170015,170020,170082,170086,170091,170159,170163,170168,170284,170288,170291,170371,170374,170378,170381,170485,170487,170502,170505,170509,170647,170655,170659,170661,170672,170674,170932,170936,170968,170972,171000],[10,168859,168855],{"id":168860},"_7-函数进阶",[14,168862,168864],{"id":168863},"_71-多返回值","7.1 多返回值",[19,168866,168867],{},"Python 函数可以返回多个值，本质上返回的是元组。",[106,168869,168871],{"className":122,"code":168870,"language":124,"meta":112,"style":112},"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",[114,168872,168873,168882,168890,168898,168907,168914,168918,168922,168931,168937],{"__ignoreMap":112},[128,168874,168875,168877,168880],{"class":130,"line":131},[128,168876,196],{"class":134},[128,168878,168879],{"class":199}," get_info",[128,168881,203],{"class":138},[128,168883,168884,168886,168888],{"class":130,"line":142},[128,168885,821],{"class":138},[128,168887,270],{"class":134},[128,168889,152673],{"class":176},[128,168891,168892,168894,168896],{"class":130,"line":156},[128,168893,838],{"class":138},[128,168895,270],{"class":134},[128,168897,149898],{"class":166},[128,168899,168900,168902,168904],{"class":130,"line":163},[128,168901,854],{"class":138},[128,168903,270],{"class":134},[128,168905,168906],{"class":166}," 95\n",[128,168908,168909,168911],{"class":130,"line":183},[128,168910,587],{"class":134},[128,168912,168913],{"class":138}," name, age, score\n",[128,168915,168916],{"class":130,"line":188},[128,168917,160],{"emptyLinePlaceholder":159},[128,168919,168920],{"class":130,"line":193},[128,168921,160],{"emptyLinePlaceholder":159},[128,168923,168924,168926,168928],{"class":130,"line":206},[128,168925,164185],{"class":138},[128,168927,270],{"class":134},[128,168929,168930],{"class":138}," get_info()\n",[128,168932,168933,168935],{"class":130,"line":221},[128,168934,2469],{"class":166},[128,168936,79959],{"class":138},[128,168938,168939,168941,168943,168945],{"class":130,"line":230},[128,168940,2469],{"class":166},[128,168942,253],{"class":138},[128,168944,106470],{"class":166},[128,168946,168947],{"class":138},"(result))\n",[19,168949,168950],{},"可以直接解包：",[106,168952,168954],{"className":122,"code":168953,"language":124,"meta":112,"style":112},"name, age, score = get_info()\nprint(name, age, score)\n",[114,168955,168956,168965],{"__ignoreMap":112},[128,168957,168958,168961,168963],{"class":130,"line":131},[128,168959,168960],{"class":138},"name, age, score ",[128,168962,270],{"class":134},[128,168964,168930],{"class":138},[128,168966,168967,168969],{"class":130,"line":142},[128,168968,2469],{"class":166},[128,168970,168971],{"class":138},"(name, age, score)\n",[19,168973,168974],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,168976,168978],{"id":168977},"_72-位置参数","7.2 位置参数",[19,168980,168981],{},"位置参数按顺序传递。",[106,168983,168985],{"className":122,"code":168984,"language":124,"meta":112,"style":112},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[114,168986,168987,168995,169023,169027,169031],{"__ignoreMap":112},[128,168988,168989,168991,168993],{"class":130,"line":131},[128,168990,196],{"class":134},[128,168992,152692],{"class":199},[128,168994,152695],{"class":138},[128,168996,168997,168999,169001,169003,169005,169007,169009,169011,169013,169015,169017,169019,169021],{"class":130,"line":142},[128,168998,437],{"class":166},[128,169000,253],{"class":138},[128,169002,3019],{"class":134},[128,169004,152706],{"class":176},[128,169006,1379],{"class":166},[128,169008,2773],{"class":138},[128,169010,1453],{"class":166},[128,169012,152715],{"class":176},[128,169014,1379],{"class":166},[128,169016,73596],{"class":138},[128,169018,1453],{"class":166},[128,169020,152724],{"class":176},[128,169022,180],{"class":138},[128,169024,169025],{"class":130,"line":156},[128,169026,160],{"emptyLinePlaceholder":159},[128,169028,169029],{"class":130,"line":163},[128,169030,160],{"emptyLinePlaceholder":159},[128,169032,169033,169036,169038,169040,169042],{"class":130,"line":183},[128,169034,169035],{"class":138},"introduce(",[128,169037,153205],{"class":176},[128,169039,258],{"class":138},[128,169041,4399],{"class":166},[128,169043,180],{"class":138},[19,169045,169046],{},"顺序错了就会得到错误含义：",[106,169048,169050],{"className":122,"code":169049,"language":124,"meta":112,"style":112},"introduce(18, \"小明\")\n",[114,169051,169052],{"__ignoreMap":112},[128,169053,169054,169056,169058,169060,169062],{"class":130,"line":131},[128,169055,169035],{"class":138},[128,169057,4399],{"class":166},[128,169059,258],{"class":138},[128,169061,153205],{"class":176},[128,169063,180],{"class":138},[14,169065,169067],{"id":169066},"_73-关键字参数","7.3 关键字参数",[19,169069,169070],{},"关键字参数按参数名传递。",[106,169072,169074],{"className":122,"code":169073,"language":124,"meta":112,"style":112},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[114,169075,169076,169096],{"__ignoreMap":112},[128,169077,169078,169080,169082,169084,169086,169088,169090,169092,169094],{"class":130,"line":131},[128,169079,169035],{"class":138},[128,169081,2773],{"class":266},[128,169083,270],{"class":134},[128,169085,153205],{"class":176},[128,169087,258],{"class":138},[128,169089,73596],{"class":266},[128,169091,270],{"class":134},[128,169093,4399],{"class":166},[128,169095,180],{"class":138},[128,169097,169098,169100,169102,169104,169106,169108,169110,169112,169114],{"class":130,"line":142},[128,169099,169035],{"class":138},[128,169101,73596],{"class":266},[128,169103,270],{"class":134},[128,169105,4399],{"class":166},[128,169107,258],{"class":138},[128,169109,2773],{"class":266},[128,169111,270],{"class":134},[128,169113,153205],{"class":176},[128,169115,180],{"class":138},[19,169117,121290],{},[26,169119,169120,169123],{},[29,169121,169122],{},"顺序不容易错。",[29,169124,169125],{},"调用时可读性更强。",[14,169127,169129],{"id":169128},"_74-默认参数","7.4 默认参数",[19,169131,169132],{},"默认参数给参数设置默认值。",[106,169134,169136],{"className":122,"code":169135,"language":124,"meta":112,"style":112},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[114,169137,169138,169154,169184,169188,169192,169202],{"__ignoreMap":112},[128,169139,169140,169142,169144,169147,169149,169152],{"class":130,"line":131},[128,169141,196],{"class":134},[128,169143,125449],{"class":199},[128,169145,169146],{"class":138},"(host, port",[128,169148,270],{"class":134},[128,169150,169151],{"class":166},"3306",[128,169153,34264],{"class":138},[128,169155,169156,169158,169160,169162,169165,169167,169169,169171,169173,169175,169178,169180,169182],{"class":130,"line":142},[128,169157,437],{"class":166},[128,169159,253],{"class":138},[128,169161,3019],{"class":134},[128,169163,169164],{"class":176},"\"连接",[128,169166,1379],{"class":166},[128,169168,30880],{"class":138},[128,169170,1453],{"class":166},[128,169172,4607],{"class":176},[128,169174,1379],{"class":166},[128,169176,169177],{"class":138},"port",[128,169179,1453],{"class":166},[128,169181,1376],{"class":176},[128,169183,180],{"class":138},[128,169185,169186],{"class":130,"line":156},[128,169187,160],{"emptyLinePlaceholder":159},[128,169189,169190],{"class":130,"line":163},[128,169191,160],{"emptyLinePlaceholder":159},[128,169193,169194,169197,169200],{"class":130,"line":183},[128,169195,169196],{"class":138},"connect(",[128,169198,169199],{"class":176},"\"localhost\"",[128,169201,180],{"class":138},[128,169203,169204,169206,169208,169210,169213],{"class":130,"line":188},[128,169205,169196],{"class":138},[128,169207,169199],{"class":176},[128,169209,258],{"class":138},[128,169211,169212],{"class":166},"6379",[128,169214,180],{"class":138},[19,169216,169217],{},"注意：默认参数必须放在非默认参数后面。",[19,169219,169220],{},"错误：",[106,169222,169224],{"className":122,"code":169223,"language":124,"meta":112,"style":112},"def connect(port=3306, host):\n    pass\n",[114,169225,169226,169242],{"__ignoreMap":112},[128,169227,169228,169230,169232,169235,169237,169239],{"class":130,"line":131},[128,169229,196],{"class":134},[128,169231,125449],{"class":199},[128,169233,169234],{"class":138},"(port",[128,169236,270],{"class":134},[128,169238,169151],{"class":166},[128,169240,169241],{"class":138},", host):\n",[128,169243,169244],{"class":130,"line":142},[128,169245,152857],{"class":134},[19,169247,169248],{},"正确：",[106,169250,169252],{"className":122,"code":169251,"language":124,"meta":112,"style":112},"def connect(host, port=3306):\n    pass\n",[114,169253,169254,169268],{"__ignoreMap":112},[128,169255,169256,169258,169260,169262,169264,169266],{"class":130,"line":131},[128,169257,196],{"class":134},[128,169259,125449],{"class":199},[128,169261,169146],{"class":138},[128,169263,270],{"class":134},[128,169265,169151],{"class":166},[128,169267,34264],{"class":138},[128,169269,169270],{"class":130,"line":142},[128,169271,152857],{"class":134},[14,169273,169275],{"id":169274},"_75-默认参数的坑","7.5 默认参数的坑",[19,169277,169278],{},"不要使用可变对象作为默认参数。",[19,169280,160502],{},[106,169282,169284],{"className":122,"code":169283,"language":124,"meta":112,"style":112},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[114,169285,169286,169301,169306,169313,169317,169321,169332],{"__ignoreMap":112},[128,169287,169288,169290,169293,169296,169298],{"class":130,"line":131},[128,169289,196],{"class":134},[128,169291,169292],{"class":199}," add_item",[128,169294,169295],{"class":138},"(item, items",[128,169297,270],{"class":134},[128,169299,169300],{"class":138},"[]):\n",[128,169302,169303],{"class":130,"line":142},[128,169304,169305],{"class":138},"    items.append(item)\n",[128,169307,169308,169310],{"class":130,"line":156},[128,169309,587],{"class":134},[128,169311,169312],{"class":138}," items\n",[128,169314,169315],{"class":130,"line":163},[128,169316,160],{"emptyLinePlaceholder":159},[128,169318,169319],{"class":130,"line":183},[128,169320,160],{"emptyLinePlaceholder":159},[128,169322,169323,169325,169328,169330],{"class":130,"line":188},[128,169324,2469],{"class":166},[128,169326,169327],{"class":138},"(add_item(",[128,169329,168204],{"class":176},[128,169331,3034],{"class":138},[128,169333,169334,169336,169338,169341],{"class":130,"line":193},[128,169335,2469],{"class":166},[128,169337,169327],{"class":138},[128,169339,169340],{"class":176},"\"b\"",[128,169342,3034],{"class":138},[19,169344,169345],{},"第二次调用会复用第一次的列表。",[19,169347,158767],{},[106,169349,169351],{"className":122,"code":169350,"language":124,"meta":112,"style":112},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[114,169352,169353,169367,169380,169389,169393],{"__ignoreMap":112},[128,169354,169355,169357,169359,169361,169363,169365],{"class":130,"line":131},[128,169356,196],{"class":134},[128,169358,169292],{"class":199},[128,169360,169295],{"class":138},[128,169362,270],{"class":134},[128,169364,99055],{"class":166},[128,169366,34264],{"class":138},[128,169368,169369,169371,169374,169376,169378],{"class":130,"line":142},[128,169370,209],{"class":134},[128,169372,169373],{"class":138}," items ",[128,169375,997],{"class":134},[128,169377,1000],{"class":166},[128,169379,241],{"class":138},[128,169381,169382,169385,169387],{"class":130,"line":156},[128,169383,169384],{"class":138},"        items ",[128,169386,270],{"class":134},[128,169388,227],{"class":138},[128,169390,169391],{"class":130,"line":163},[128,169392,169305],{"class":138},[128,169394,169395,169397],{"class":130,"line":183},[128,169396,587],{"class":134},[128,169398,169312],{"class":138},[14,169400,169402],{"id":169401},"_76-不定长参数","7.6 不定长参数",[72,169404,169406],{"id":169405},"_761-args","7.6.1 *args",[19,169408,169409,169412],{},[114,169410,169411],{},"*args"," 接收任意数量的位置参数，得到元组。",[106,169414,169416],{"className":122,"code":169415,"language":124,"meta":112,"style":112},"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",[114,169417,169418,169431,169439,169450,169459,169465,169469,169473,169492],{"__ignoreMap":112},[128,169419,169420,169422,169424,169426,169428],{"class":130,"line":131},[128,169421,196],{"class":134},[128,169423,2187],{"class":199},[128,169425,253],{"class":138},[128,169427,4205],{"class":134},[128,169429,169430],{"class":138},"args):\n",[128,169432,169433,169435,169437],{"class":130,"line":142},[128,169434,162186],{"class":138},[128,169436,270],{"class":134},[128,169438,50718],{"class":166},[128,169440,169441,169443,169445,169447],{"class":130,"line":156},[128,169442,543],{"class":134},[128,169444,159059],{"class":138},[128,169446,549],{"class":134},[128,169448,169449],{"class":138}," args:\n",[128,169451,169452,169454,169456],{"class":130,"line":163},[128,169453,162861],{"class":138},[128,169455,13023],{"class":134},[128,169457,169458],{"class":138}," num\n",[128,169460,169461,169463],{"class":130,"line":183},[128,169462,587],{"class":134},[128,169464,165166],{"class":138},[128,169466,169467],{"class":130,"line":188},[128,169468,160],{"emptyLinePlaceholder":159},[128,169470,169471],{"class":130,"line":193},[128,169472,160],{"emptyLinePlaceholder":159},[128,169474,169475,169477,169480,169482,169484,169486,169488,169490],{"class":130,"line":206},[128,169476,2469],{"class":166},[128,169478,169479],{"class":138},"(add(",[128,169481,2592],{"class":166},[128,169483,258],{"class":138},[128,169485,409],{"class":166},[128,169487,258],{"class":138},[128,169489,3827],{"class":166},[128,169491,3034],{"class":138},[128,169493,169494,169496,169498,169500,169502,169504,169506,169508,169510,169512,169514,169516],{"class":130,"line":221},[128,169495,2469],{"class":166},[128,169497,169479],{"class":138},[128,169499,2592],{"class":166},[128,169501,258],{"class":138},[128,169503,409],{"class":166},[128,169505,258],{"class":138},[128,169507,3827],{"class":166},[128,169509,258],{"class":138},[128,169511,4043],{"class":166},[128,169513,258],{"class":138},[128,169515,4069],{"class":166},[128,169517,3034],{"class":138},[72,169519,169521],{"id":169520},"_762-kwargs","7.6.2 **kwargs",[19,169523,169524,169527],{},[114,169525,169526],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[106,169529,169531],{"className":122,"code":169530,"language":124,"meta":112,"style":112},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[114,169532,169533,169546,169557,169563,169567,169571],{"__ignoreMap":112},[128,169534,169535,169537,169539,169541,169543],{"class":130,"line":131},[128,169536,196],{"class":134},[128,169538,164824],{"class":199},[128,169540,253],{"class":138},[128,169542,14188],{"class":134},[128,169544,169545],{"class":138},"kwargs):\n",[128,169547,169548,169550,169552,169554],{"class":130,"line":142},[128,169549,543],{"class":134},[128,169551,167664],{"class":138},[128,169553,549],{"class":134},[128,169555,169556],{"class":138}," kwargs.items():\n",[128,169558,169559,169561],{"class":130,"line":156},[128,169560,313],{"class":166},[128,169562,167676],{"class":138},[128,169564,169565],{"class":130,"line":163},[128,169566,160],{"emptyLinePlaceholder":159},[128,169568,169569],{"class":130,"line":183},[128,169570,160],{"emptyLinePlaceholder":159},[128,169572,169573,169575,169577,169579,169581,169583,169585,169587,169589,169591,169593,169595,169597],{"class":130,"line":188},[128,169574,164889],{"class":138},[128,169576,2773],{"class":266},[128,169578,270],{"class":134},[128,169580,153205],{"class":176},[128,169582,258],{"class":138},[128,169584,73596],{"class":266},[128,169586,270],{"class":134},[128,169588,4399],{"class":166},[128,169590,258],{"class":138},[128,169592,73647],{"class":266},[128,169594,270],{"class":134},[128,169596,3110],{"class":176},[128,169598,180],{"class":138},[14,169600,169602],{"id":169601},"_77-参数解包","7.7 参数解包",[19,169604,169605],{},"列表或元组解包为位置参数：",[106,169607,169609],{"className":122,"code":169608,"language":124,"meta":112,"style":112},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[114,169610,169611,169620,169635,169639,169643,169663],{"__ignoreMap":112},[128,169612,169613,169615,169617],{"class":130,"line":131},[128,169614,196],{"class":134},[128,169616,2187],{"class":199},[128,169618,169619],{"class":138},"(a, b, c):\n",[128,169621,169622,169624,169626,169628,169630,169632],{"class":130,"line":142},[128,169623,587],{"class":134},[128,169625,14396],{"class":138},[128,169627,2457],{"class":134},[128,169629,14409],{"class":138},[128,169631,2457],{"class":134},[128,169633,169634],{"class":138}," c\n",[128,169636,169637],{"class":130,"line":156},[128,169638,160],{"emptyLinePlaceholder":159},[128,169640,169641],{"class":130,"line":163},[128,169642,160],{"emptyLinePlaceholder":159},[128,169644,169645,169647,169649,169651,169653,169655,169657,169659,169661],{"class":130,"line":183},[128,169646,166979],{"class":138},[128,169648,270],{"class":134},[128,169650,55608],{"class":138},[128,169652,2592],{"class":166},[128,169654,258],{"class":138},[128,169656,409],{"class":166},[128,169658,258],{"class":138},[128,169660,3827],{"class":166},[128,169662,2376],{"class":138},[128,169664,169665,169667,169669,169671],{"class":130,"line":188},[128,169666,2469],{"class":166},[128,169668,169479],{"class":138},[128,169670,4205],{"class":134},[128,169672,169673],{"class":138},"nums))\n",[19,169675,169676],{},"字典解包为关键字参数：",[106,169678,169680],{"className":122,"code":169679,"language":124,"meta":112,"style":112},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[114,169681,169682,169690,169716,169720,169724,169748],{"__ignoreMap":112},[128,169683,169684,169686,169688],{"class":130,"line":131},[128,169685,196],{"class":134},[128,169687,152692],{"class":199},[128,169689,152695],{"class":138},[128,169691,169692,169694,169696,169698,169700,169702,169704,169706,169708,169710,169712,169714],{"class":130,"line":142},[128,169693,437],{"class":166},[128,169695,253],{"class":138},[128,169697,3019],{"class":134},[128,169699,1376],{"class":176},[128,169701,1379],{"class":166},[128,169703,2773],{"class":138},[128,169705,1453],{"class":166},[128,169707,8013],{"class":166},[128,169709,73596],{"class":138},[128,169711,1453],{"class":166},[128,169713,1376],{"class":176},[128,169715,180],{"class":138},[128,169717,169718],{"class":130,"line":156},[128,169719,160],{"emptyLinePlaceholder":159},[128,169721,169722],{"class":130,"line":163},[128,169723,160],{"emptyLinePlaceholder":159},[128,169725,169726,169728,169730,169732,169734,169736,169738,169740,169742,169744,169746],{"class":130,"line":183},[128,169727,119670],{"class":138},[128,169729,270],{"class":134},[128,169731,8013],{"class":138},[128,169733,1189],{"class":176},[128,169735,1967],{"class":138},[128,169737,153205],{"class":176},[128,169739,258],{"class":138},[128,169741,1204],{"class":176},[128,169743,1967],{"class":138},[128,169745,4399],{"class":166},[128,169747,2694],{"class":138},[128,169749,169750,169752,169754],{"class":130,"line":188},[128,169751,169035],{"class":138},[128,169753,14188],{"class":134},[128,169755,169756],{"class":138},"info)\n",[14,169758,169760],{"id":169759},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,169762,169763,169766],{},[114,169764,169765],{},"lambda"," 用于定义简单匿名函数。",[106,169768,169770],{"className":122,"code":169769,"language":124,"meta":112,"style":112},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[114,169771,169772,169789],{"__ignoreMap":112},[128,169773,169774,169777,169779,169782,169785,169787],{"class":130,"line":131},[128,169775,169776],{"class":138},"add ",[128,169778,270],{"class":134},[128,169780,169781],{"class":134}," lambda",[128,169783,169784],{"class":138}," a, b: a ",[128,169786,2457],{"class":134},[128,169788,154418],{"class":138},[128,169790,169791,169793,169795,169797,169799,169801],{"class":130,"line":142},[128,169792,2469],{"class":166},[128,169794,169479],{"class":138},[128,169796,2592],{"class":166},[128,169798,258],{"class":138},[128,169800,409],{"class":166},[128,169802,3034],{"class":138},[19,169804,169805],{},"常和排序、过滤等函数一起使用。",[19,169807,169808],{},"按分数排序：",[106,169810,169812],{"className":122,"code":169811,"language":124,"meta":112,"style":112},"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",[114,169813,169814,169822,169842,169862,169882,169886,169890,169913],{"__ignoreMap":112},[128,169815,169816,169818,169820],{"class":130,"line":131},[128,169817,162595],{"class":138},[128,169819,270],{"class":134},[128,169821,2246],{"class":138},[128,169823,169824,169826,169828,169830,169832,169834,169836,169838,169840],{"class":130,"line":142},[128,169825,2251],{"class":138},[128,169827,1189],{"class":176},[128,169829,1967],{"class":138},[128,169831,153205],{"class":176},[128,169833,258],{"class":138},[128,169835,1219],{"class":176},[128,169837,1967],{"class":138},[128,169839,4734],{"class":166},[128,169841,2282],{"class":138},[128,169843,169844,169846,169848,169850,169852,169854,169856,169858,169860],{"class":130,"line":156},[128,169845,2251],{"class":138},[128,169847,1189],{"class":176},[128,169849,1967],{"class":138},[128,169851,154253],{"class":176},[128,169853,258],{"class":138},[128,169855,1219],{"class":176},[128,169857,1967],{"class":138},[128,169859,4560],{"class":166},[128,169861,2282],{"class":138},[128,169863,169864,169866,169868,169870,169872,169874,169876,169878,169880],{"class":130,"line":163},[128,169865,2251],{"class":138},[128,169867,1189],{"class":176},[128,169869,1967],{"class":138},[128,169871,162610],{"class":176},[128,169873,258],{"class":138},[128,169875,1219],{"class":176},[128,169877,1967],{"class":138},[128,169879,4156],{"class":166},[128,169881,2282],{"class":138},[128,169883,169884],{"class":130,"line":183},[128,169885,2376],{"class":138},[128,169887,169888],{"class":130,"line":188},[128,169889,160],{"emptyLinePlaceholder":159},[128,169891,169892,169895,169897,169899,169901,169903,169905,169907,169909,169911],{"class":130,"line":193},[128,169893,169894],{"class":138},"students.sort(",[128,169896,2583],{"class":266},[128,169898,2586],{"class":134},[128,169900,2589],{"class":138},[128,169902,1219],{"class":176},[128,169904,115559],{"class":138},[128,169906,166407],{"class":266},[128,169908,270],{"class":134},[128,169910,34945],{"class":166},[128,169912,180],{"class":138},[128,169914,169915,169917],{"class":130,"line":206},[128,169916,2469],{"class":166},[128,169918,167874],{"class":138},[19,169920,169921,169922,169924],{},"如果逻辑复杂，不要硬写 ",[114,169923,169765],{},"，定义普通函数更清晰。",[14,169926,169928],{"id":169927},"_79-函数作为参数","7.9 函数作为参数",[19,169930,169931],{},"函数可以作为参数传给另一个函数。",[106,169933,169935],{"className":122,"code":169934,"language":124,"meta":112,"style":112},"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",[114,169936,169937,169945,169955,169959,169963,169973,169980,169984,169988],{"__ignoreMap":112},[128,169938,169939,169941,169943],{"class":130,"line":131},[128,169940,196],{"class":134},[128,169942,2187],{"class":199},[128,169944,154407],{"class":138},[128,169946,169947,169949,169951,169953],{"class":130,"line":142},[128,169948,587],{"class":134},[128,169950,14396],{"class":138},[128,169952,2457],{"class":134},[128,169954,154418],{"class":138},[128,169956,169957],{"class":130,"line":156},[128,169958,160],{"emptyLinePlaceholder":159},[128,169960,169961],{"class":130,"line":163},[128,169962,160],{"emptyLinePlaceholder":159},[128,169964,169965,169967,169970],{"class":130,"line":183},[128,169966,196],{"class":134},[128,169968,169969],{"class":199}," calculate",[128,169971,169972],{"class":138},"(a, b, func):\n",[128,169974,169975,169977],{"class":130,"line":188},[128,169976,587],{"class":134},[128,169978,169979],{"class":138}," func(a, b)\n",[128,169981,169982],{"class":130,"line":193},[128,169983,160],{"emptyLinePlaceholder":159},[128,169985,169986],{"class":130,"line":206},[128,169987,160],{"emptyLinePlaceholder":159},[128,169989,169990,169992,169995,169997,169999,170001],{"class":130,"line":221},[128,169991,2469],{"class":166},[128,169993,169994],{"class":138},"(calculate(",[128,169996,4196],{"class":166},[128,169998,258],{"class":138},[128,170000,4449],{"class":166},[128,170002,170003],{"class":138},", add))\n",[19,170005,170006],{},"这种思想在排序、回调、框架中经常出现。",[14,170008,170010],{"id":170009},"_710-mapfiltersorted","7.10 map、filter、sorted",[72,170012,170014],{"id":170013},"_7101-map","7.10.1 map",[19,170016,170017,170019],{},[114,170018,77418],{}," 对每个元素执行函数。",[106,170021,170023],{"className":122,"code":170022,"language":124,"meta":112,"style":112},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[114,170024,170025,170049,170072],{"__ignoreMap":112},[128,170026,170027,170029,170031,170033,170035,170037,170039,170041,170043,170045,170047],{"class":130,"line":131},[128,170028,166979],{"class":138},[128,170030,270],{"class":134},[128,170032,55608],{"class":138},[128,170034,2592],{"class":166},[128,170036,258],{"class":138},[128,170038,409],{"class":166},[128,170040,258],{"class":138},[128,170042,3827],{"class":166},[128,170044,258],{"class":138},[128,170046,4043],{"class":166},[128,170048,2376],{"class":138},[128,170050,170051,170053,170055,170058,170060,170062,170065,170067,170069],{"class":130,"line":142},[128,170052,164185],{"class":138},[128,170054,270],{"class":134},[128,170056,170057],{"class":166}," map",[128,170059,253],{"class":138},[128,170061,169765],{"class":134},[128,170063,170064],{"class":138}," x: x ",[128,170066,4205],{"class":134},[128,170068,18277],{"class":166},[128,170070,170071],{"class":138},", nums)\n",[128,170073,170074,170076,170078,170080],{"class":130,"line":156},[128,170075,2469],{"class":166},[128,170077,253],{"class":138},[128,170079,2716],{"class":166},[128,170081,168947],{"class":138},[72,170083,170085],{"id":170084},"_7102-filter","7.10.2 filter",[19,170087,170088,170090],{},[114,170089,83424],{}," 保留满足条件的元素。",[106,170092,170094],{"className":122,"code":170093,"language":124,"meta":112,"style":112},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[114,170095,170096,170124,170149],{"__ignoreMap":112},[128,170097,170098,170100,170102,170104,170106,170108,170110,170112,170114,170116,170118,170120,170122],{"class":130,"line":131},[128,170099,166979],{"class":138},[128,170101,270],{"class":134},[128,170103,55608],{"class":138},[128,170105,2592],{"class":166},[128,170107,258],{"class":138},[128,170109,409],{"class":166},[128,170111,258],{"class":138},[128,170113,3827],{"class":166},[128,170115,258],{"class":138},[128,170117,4043],{"class":166},[128,170119,258],{"class":138},[128,170121,4069],{"class":166},[128,170123,2376],{"class":138},[128,170125,170126,170128,170130,170133,170135,170137,170139,170141,170143,170145,170147],{"class":130,"line":142},[128,170127,164185],{"class":138},[128,170129,270],{"class":134},[128,170131,170132],{"class":166}," filter",[128,170134,253],{"class":138},[128,170136,169765],{"class":134},[128,170138,170064],{"class":138},[128,170140,4078],{"class":134},[128,170142,18277],{"class":166},[128,170144,1806],{"class":134},[128,170146,7659],{"class":166},[128,170148,170071],{"class":138},[128,170150,170151,170153,170155,170157],{"class":130,"line":156},[128,170152,2469],{"class":166},[128,170154,253],{"class":138},[128,170156,2716],{"class":166},[128,170158,168947],{"class":138},[72,170160,170162],{"id":170161},"_7103-sorted","7.10.3 sorted",[19,170164,170165,170167],{},[114,170166,168115],{}," 返回排序后的新列表。",[106,170169,170171],{"className":122,"code":170170,"language":124,"meta":112,"style":112},"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",[114,170172,170173,170181,170201,170221,170241,170245,170249,170278],{"__ignoreMap":112},[128,170174,170175,170177,170179],{"class":130,"line":131},[128,170176,162595],{"class":138},[128,170178,270],{"class":134},[128,170180,2246],{"class":138},[128,170182,170183,170185,170187,170189,170191,170193,170195,170197,170199],{"class":130,"line":142},[128,170184,2251],{"class":138},[128,170186,1189],{"class":176},[128,170188,1967],{"class":138},[128,170190,153205],{"class":176},[128,170192,258],{"class":138},[128,170194,1219],{"class":176},[128,170196,1967],{"class":138},[128,170198,4734],{"class":166},[128,170200,2282],{"class":138},[128,170202,170203,170205,170207,170209,170211,170213,170215,170217,170219],{"class":130,"line":156},[128,170204,2251],{"class":138},[128,170206,1189],{"class":176},[128,170208,1967],{"class":138},[128,170210,154253],{"class":176},[128,170212,258],{"class":138},[128,170214,1219],{"class":176},[128,170216,1967],{"class":138},[128,170218,4560],{"class":166},[128,170220,2282],{"class":138},[128,170222,170223,170225,170227,170229,170231,170233,170235,170237,170239],{"class":130,"line":163},[128,170224,2251],{"class":138},[128,170226,1189],{"class":176},[128,170228,1967],{"class":138},[128,170230,162610],{"class":176},[128,170232,258],{"class":138},[128,170234,1219],{"class":176},[128,170236,1967],{"class":138},[128,170238,4156],{"class":166},[128,170240,2282],{"class":138},[128,170242,170243],{"class":130,"line":183},[128,170244,2376],{"class":138},[128,170246,170247],{"class":130,"line":188},[128,170248,160],{"emptyLinePlaceholder":159},[128,170250,170251,170253,170255,170257,170260,170262,170264,170266,170268,170270,170272,170274,170276],{"class":130,"line":193},[128,170252,164185],{"class":138},[128,170254,270],{"class":134},[128,170256,166483],{"class":166},[128,170258,170259],{"class":138},"(students, ",[128,170261,2583],{"class":266},[128,170263,2586],{"class":134},[128,170265,2589],{"class":138},[128,170267,1219],{"class":176},[128,170269,115559],{"class":138},[128,170271,166407],{"class":266},[128,170273,270],{"class":134},[128,170275,34945],{"class":166},[128,170277,180],{"class":138},[128,170279,170280,170282],{"class":130,"line":206},[128,170281,2469],{"class":166},[128,170283,79959],{"class":138},[14,170285,170287],{"id":170286},"_711-闭包入门","7.11 闭包入门",[19,170289,170290],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[106,170292,170294],{"className":122,"code":170293,"language":124,"meta":112,"style":112},"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",[114,170295,170296,170306,170316,170327,170331,170338,170342,170346,170360],{"__ignoreMap":112},[128,170297,170298,170300,170303],{"class":130,"line":131},[128,170299,196],{"class":134},[128,170301,170302],{"class":199}," outer",[128,170304,170305],{"class":138},"(base):\n",[128,170307,170308,170310,170313],{"class":130,"line":142},[128,170309,1946],{"class":134},[128,170311,170312],{"class":199}," inner",[128,170314,170315],{"class":138},"(num):\n",[128,170317,170318,170320,170323,170325],{"class":130,"line":156},[128,170319,224],{"class":134},[128,170321,170322],{"class":138}," base ",[128,170324,2457],{"class":134},[128,170326,169458],{"class":138},[128,170328,170329],{"class":130,"line":163},[128,170330,160],{"emptyLinePlaceholder":159},[128,170332,170333,170335],{"class":130,"line":183},[128,170334,587],{"class":134},[128,170336,170337],{"class":138}," inner\n",[128,170339,170340],{"class":130,"line":188},[128,170341,160],{"emptyLinePlaceholder":159},[128,170343,170344],{"class":130,"line":193},[128,170345,160],{"emptyLinePlaceholder":159},[128,170347,170348,170351,170353,170356,170358],{"class":130,"line":206},[128,170349,170350],{"class":138},"add_10 ",[128,170352,270],{"class":134},[128,170354,170355],{"class":138}," outer(",[128,170357,4196],{"class":166},[128,170359,180],{"class":138},[128,170361,170362,170364,170367,170369],{"class":130,"line":221},[128,170363,2469],{"class":166},[128,170365,170366],{"class":138},"(add_10(",[128,170368,4069],{"class":166},[128,170370,3034],{"class":138},[19,170372,170373],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,170375,170377],{"id":170376},"_712-装饰器入门","7.12 装饰器入门",[19,170379,170380],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[106,170382,170384],{"className":122,"code":170383,"language":124,"meta":112,"style":112},"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",[114,170385,170386,170395,170404,170415,170420,170431,170435,170442,170446,170450,170455,170463,170473,170477,170481],{"__ignoreMap":112},[128,170387,170388,170390,170392],{"class":130,"line":131},[128,170389,196],{"class":134},[128,170391,90563],{"class":199},[128,170393,170394],{"class":138},"(func):\n",[128,170396,170397,170399,170402],{"class":130,"line":142},[128,170398,1946],{"class":134},[128,170400,170401],{"class":199}," wrapper",[128,170403,203],{"class":138},[128,170405,170406,170408,170410,170413],{"class":130,"line":156},[128,170407,313],{"class":166},[128,170409,253],{"class":138},[128,170411,170412],{"class":176},"\"函数开始执行\"",[128,170414,180],{"class":138},[128,170416,170417],{"class":130,"line":163},[128,170418,170419],{"class":138},"        func()\n",[128,170421,170422,170424,170426,170429],{"class":130,"line":183},[128,170423,313],{"class":166},[128,170425,253],{"class":138},[128,170427,170428],{"class":176},"\"函数执行结束\"",[128,170430,180],{"class":138},[128,170432,170433],{"class":130,"line":188},[128,170434,160],{"emptyLinePlaceholder":159},[128,170436,170437,170439],{"class":130,"line":193},[128,170438,587],{"class":134},[128,170440,170441],{"class":138}," wrapper\n",[128,170443,170444],{"class":130,"line":206},[128,170445,160],{"emptyLinePlaceholder":159},[128,170447,170448],{"class":130,"line":221},[128,170449,160],{"emptyLinePlaceholder":159},[128,170451,170452],{"class":130,"line":230},[128,170453,170454],{"class":199},"@log\n",[128,170456,170457,170459,170461],{"class":130,"line":235},[128,170458,196],{"class":134},[128,170460,163875],{"class":199},[128,170462,203],{"class":138},[128,170464,170465,170467,170469,170471],{"class":130,"line":244},[128,170466,437],{"class":166},[128,170468,253],{"class":138},[128,170470,9402],{"class":176},[128,170472,180],{"class":138},[128,170474,170475],{"class":130,"line":287},[128,170476,160],{"emptyLinePlaceholder":159},[128,170478,170479],{"class":130,"line":301},[128,170480,160],{"emptyLinePlaceholder":159},[128,170482,170483],{"class":130,"line":310},[128,170484,163910],{"class":138},[19,170486,161153],{},[106,170488,170490],{"className":122,"code":170489,"language":124,"meta":112,"style":112},"say_hello = log(say_hello)\n",[114,170491,170492],{"__ignoreMap":112},[128,170493,170494,170497,170499],{"class":130,"line":131},[128,170495,170496],{"class":138},"say_hello ",[128,170498,270],{"class":134},[128,170500,170501],{"class":138}," log(say_hello)\n",[19,170503,170504],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,170506,170508],{"id":170507},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[106,170510,170512],{"className":122,"code":170511,"language":124,"meta":112,"style":112},"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",[114,170513,170514,170522,170539,170549,170568,170578,170585,170589,170595,170599,170603,170607,170615,170625,170629,170633],{"__ignoreMap":112},[128,170515,170516,170518,170520],{"class":130,"line":131},[128,170517,196],{"class":134},[128,170519,90563],{"class":199},[128,170521,170394],{"class":138},[128,170523,170524,170526,170528,170530,170532,170535,170537],{"class":130,"line":142},[128,170525,1946],{"class":134},[128,170527,170401],{"class":199},[128,170529,253],{"class":138},[128,170531,4205],{"class":134},[128,170533,170534],{"class":138},"args, ",[128,170536,14188],{"class":134},[128,170538,169545],{"class":138},[128,170540,170541,170543,170545,170547],{"class":130,"line":156},[128,170542,313],{"class":166},[128,170544,253],{"class":138},[128,170546,170412],{"class":176},[128,170548,180],{"class":138},[128,170550,170551,170554,170556,170559,170561,170563,170565],{"class":130,"line":163},[128,170552,170553],{"class":138},"        result ",[128,170555,270],{"class":134},[128,170557,170558],{"class":138}," func(",[128,170560,4205],{"class":134},[128,170562,170534],{"class":138},[128,170564,14188],{"class":134},[128,170566,170567],{"class":138},"kwargs)\n",[128,170569,170570,170572,170574,170576],{"class":130,"line":183},[128,170571,313],{"class":166},[128,170573,253],{"class":138},[128,170575,170428],{"class":176},[128,170577,180],{"class":138},[128,170579,170580,170582],{"class":130,"line":188},[128,170581,224],{"class":134},[128,170583,170584],{"class":138}," result\n",[128,170586,170587],{"class":130,"line":193},[128,170588,160],{"emptyLinePlaceholder":159},[128,170590,170591,170593],{"class":130,"line":206},[128,170592,587],{"class":134},[128,170594,170441],{"class":138},[128,170596,170597],{"class":130,"line":221},[128,170598,160],{"emptyLinePlaceholder":159},[128,170600,170601],{"class":130,"line":230},[128,170602,160],{"emptyLinePlaceholder":159},[128,170604,170605],{"class":130,"line":235},[128,170606,170454],{"class":199},[128,170608,170609,170611,170613],{"class":130,"line":244},[128,170610,196],{"class":134},[128,170612,2187],{"class":199},[128,170614,154407],{"class":138},[128,170616,170617,170619,170621,170623],{"class":130,"line":287},[128,170618,587],{"class":134},[128,170620,14396],{"class":138},[128,170622,2457],{"class":134},[128,170624,154418],{"class":138},[128,170626,170627],{"class":130,"line":301},[128,170628,160],{"emptyLinePlaceholder":159},[128,170630,170631],{"class":130,"line":310},[128,170632,160],{"emptyLinePlaceholder":159},[128,170634,170635,170637,170639,170641,170643,170645],{"class":130,"line":323},[128,170636,2469],{"class":166},[128,170638,169479],{"class":138},[128,170640,4196],{"class":166},[128,170642,258],{"class":138},[128,170644,4449],{"class":166},[128,170646,3034],{"class":138},[19,170648,170649,170650,3330,170652,170654],{},"这个写法使用 ",[114,170651,169411],{},[114,170653,169526],{}," 接收原函数的所有参数。",[14,170656,170658],{"id":170657},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,170660,126648],{},[26,170662,170663,170666,170669],{},[29,170664,170665],{},"给定一组学生数据。",[29,170667,170668],{},"封装函数，根据传入规则筛选学生。",[29,170670,170671],{},"筛选及格、优秀、未成年学生。",[19,170673,13562],{},[106,170675,170677],{"className":122,"code":170676,"language":124,"meta":112,"style":112},"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",[114,170678,170679,170687,170715,170743,170771,170775,170779,170783,170793,170801,170811,170818,170823,170829,170833,170837,170861,170884,170907,170911,170918,170925],{"__ignoreMap":112},[128,170680,170681,170683,170685],{"class":130,"line":131},[128,170682,162595],{"class":138},[128,170684,270],{"class":134},[128,170686,2246],{"class":138},[128,170688,170689,170691,170693,170695,170697,170699,170701,170703,170705,170707,170709,170711,170713],{"class":130,"line":142},[128,170690,2251],{"class":138},[128,170692,1189],{"class":176},[128,170694,1967],{"class":138},[128,170696,153205],{"class":176},[128,170698,258],{"class":138},[128,170700,1204],{"class":176},[128,170702,1967],{"class":138},[128,170704,4399],{"class":166},[128,170706,258],{"class":138},[128,170708,1219],{"class":176},[128,170710,1967],{"class":138},[128,170712,4734],{"class":166},[128,170714,2282],{"class":138},[128,170716,170717,170719,170721,170723,170725,170727,170729,170731,170733,170735,170737,170739,170741],{"class":130,"line":156},[128,170718,2251],{"class":138},[128,170720,1189],{"class":176},[128,170722,1967],{"class":138},[128,170724,154253],{"class":176},[128,170726,258],{"class":138},[128,170728,1204],{"class":176},[128,170730,1967],{"class":138},[128,170732,4374],{"class":166},[128,170734,258],{"class":138},[128,170736,1219],{"class":176},[128,170738,1967],{"class":138},[128,170740,4560],{"class":166},[128,170742,2282],{"class":138},[128,170744,170745,170747,170749,170751,170753,170755,170757,170759,170761,170763,170765,170767,170769],{"class":130,"line":163},[128,170746,2251],{"class":138},[128,170748,1189],{"class":176},[128,170750,1967],{"class":138},[128,170752,162610],{"class":176},[128,170754,258],{"class":138},[128,170756,1204],{"class":176},[128,170758,1967],{"class":138},[128,170760,4424],{"class":166},[128,170762,258],{"class":138},[128,170764,1219],{"class":176},[128,170766,1967],{"class":138},[128,170768,4630],{"class":166},[128,170770,2282],{"class":138},[128,170772,170773],{"class":130,"line":183},[128,170774,2376],{"class":138},[128,170776,170777],{"class":130,"line":188},[128,170778,160],{"emptyLinePlaceholder":159},[128,170780,170781],{"class":130,"line":193},[128,170782,160],{"emptyLinePlaceholder":159},[128,170784,170785,170787,170790],{"class":130,"line":206},[128,170786,196],{"class":134},[128,170788,170789],{"class":199}," filter_students",[128,170791,170792],{"class":138},"(students, condition):\n",[128,170794,170795,170797,170799],{"class":130,"line":221},[128,170796,164102],{"class":138},[128,170798,270],{"class":134},[128,170800,227],{"class":138},[128,170802,170803,170805,170807,170809],{"class":130,"line":230},[128,170804,543],{"class":134},[128,170806,546],{"class":138},[128,170808,549],{"class":134},[128,170810,552],{"class":138},[128,170812,170813,170815],{"class":130,"line":235},[128,170814,558],{"class":134},[128,170816,170817],{"class":138}," condition(student):\n",[128,170819,170820],{"class":130,"line":244},[128,170821,170822],{"class":138},"            result.append(student)\n",[128,170824,170825,170827],{"class":130,"line":287},[128,170826,587],{"class":134},[128,170828,170584],{"class":138},[128,170830,170831],{"class":130,"line":301},[128,170832,160],{"emptyLinePlaceholder":159},[128,170834,170835],{"class":130,"line":310},[128,170836,160],{"emptyLinePlaceholder":159},[128,170838,170839,170841,170843,170846,170848,170851,170853,170855,170857,170859],{"class":130,"line":323},[128,170840,168580],{"class":138},[128,170842,270],{"class":134},[128,170844,170845],{"class":138}," filter_students(students, ",[128,170847,169765],{"class":134},[128,170849,170850],{"class":138}," s: s[",[128,170852,1219],{"class":176},[128,170854,567],{"class":138},[128,170856,5308],{"class":134},[128,170858,160716],{"class":166},[128,170860,180],{"class":138},[128,170862,170863,170866,170868,170870,170872,170874,170876,170878,170880,170882],{"class":130,"line":330},[128,170864,170865],{"class":138},"excellent ",[128,170867,270],{"class":134},[128,170869,170845],{"class":138},[128,170871,169765],{"class":134},[128,170873,170850],{"class":138},[128,170875,1219],{"class":176},[128,170877,567],{"class":138},[128,170879,5308],{"class":134},[128,170881,160667],{"class":166},[128,170883,180],{"class":138},[128,170885,170886,170889,170891,170893,170895,170897,170899,170901,170903,170905],{"class":130,"line":335},[128,170887,170888],{"class":138},"under_age ",[128,170890,270],{"class":134},[128,170892,170845],{"class":138},[128,170894,169765],{"class":134},[128,170896,170850],{"class":138},[128,170898,1204],{"class":176},[128,170900,567],{"class":138},[128,170902,4657],{"class":134},[128,170904,159164],{"class":166},[128,170906,180],{"class":138},[128,170908,170909],{"class":130,"line":340},[128,170910,160],{"emptyLinePlaceholder":159},[128,170912,170913,170915],{"class":130,"line":351},[128,170914,2469],{"class":166},[128,170916,170917],{"class":138},"(passed)\n",[128,170919,170920,170922],{"class":130,"line":384},[128,170921,2469],{"class":166},[128,170923,170924],{"class":138},"(excellent)\n",[128,170926,170927,170929],{"class":130,"line":414},[128,170928,2469],{"class":166},[128,170930,170931],{"class":138},"(under_age)\n",[14,170933,170935],{"id":170934},"_715-易错点","7.15 易错点",[26,170937,170938,170941,170949,170954,170965],{},[29,170939,170940],{},"默认参数不要写可变对象。",[29,170942,170943,170945,170946,170948],{},[114,170944,169411],{}," 是元组，",[114,170947,169526],{}," 是字典。",[29,170950,170951,170953],{},[114,170952,169765],{}," 只适合简单表达式。",[29,170955,170956,3330,170958,170960,170961,170964],{},[114,170957,77418],{},[114,170959,83424],{}," 的结果是迭代器，常用 ",[114,170962,170963],{},"list()"," 转换查看。",[29,170966,170967],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,170969,170971],{"id":170970},"_716-本章练习","7.16 本章练习",[26,170973,170974,170981,170987,170992,170997],{},[29,170975,170976,170977,170980],{},"写函数 ",[114,170978,170979],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[29,170982,170976,170983,170986],{},[114,170984,170985],{},"print_user(**kwargs)","，输出用户所有字段。",[29,170988,107729,170989,170991],{},[114,170990,169765],{}," 对学生列表按年龄排序。",[29,170993,107729,170994,170996],{},[114,170995,83424],{}," 找出成绩不及格的学生。",[29,170998,170999],{},"写一个装饰器，统计函数执行前后的提示信息。",[3659,171001,171002],{},"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":112,"searchDepth":142,"depth":142,"links":171004},[171005,171006,171007,171008,171009,171010,171014,171015,171016,171017,171022,171023,171024,171025,171026,171027],{"id":168863,"depth":142,"text":168864},{"id":168977,"depth":142,"text":168978},{"id":169066,"depth":142,"text":169067},{"id":169128,"depth":142,"text":169129},{"id":169274,"depth":142,"text":169275},{"id":169401,"depth":142,"text":169402,"children":171011},[171012,171013],{"id":169405,"depth":156,"text":169406},{"id":169520,"depth":156,"text":169521},{"id":169601,"depth":142,"text":169602},{"id":169759,"depth":142,"text":169760},{"id":169927,"depth":142,"text":169928},{"id":170009,"depth":142,"text":170010,"children":171018},[171019,171020,171021],{"id":170013,"depth":156,"text":170014},{"id":170084,"depth":156,"text":170085},{"id":170161,"depth":156,"text":170162},{"id":170286,"depth":142,"text":170287},{"id":170376,"depth":142,"text":170377},{"id":170507,"depth":142,"text":170508},{"id":170657,"depth":142,"text":170658},{"id":170934,"depth":142,"text":170935},{"id":170970,"depth":142,"text":170971},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":168855,"description":3686},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":171034,"title":171035,"body":171036,"description":3686,"extension":3687,"meta":173555,"navigation":159,"path":173556,"seo":173557,"stem":173558,"__hash__":173559},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":171037,"toc":173530},[171038,171041,171045,171048,171051,171082,171086,171090,171093,171120,171124,171127,171178,171181,171196,171199,171234,171238,171240,171264,171267,171327,171331,171335,171338,171395,171398,171418,171422,171425,171488,171492,171495,171551,171558,171582,171586,171589,171652,171656,171661,171712,171715,171719,171724,171791,171794,171876,171880,171885,171936,171939,171943,171946,171949,171957,171960,172006,172009,172055,172059,172065,172109,172112,172158,172161,172201,172204,172265,172269,172272,172362,172365,172507,172510,172577,172581,172584,172587,172728,172731,172809,172812,172988,172992,172994,173005,173007,173206,173210,173454,173458,173492,173496,173527],[10,171039,171035],{"id":171040},"_8-文件操作",[14,171042,171044],{"id":171043},"_81-文件操作的意义","8.1 文件操作的意义",[19,171046,171047],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,171049,171050],{},"常见文件类型：",[26,171052,171053,171059,171065,171071,171077],{},[29,171054,171055,171058],{},[114,171056,171057],{},".txt","：普通文本。",[29,171060,171061,171064],{},[114,171062,171063],{},".csv","：表格文本。",[29,171066,171067,171070],{},[114,171068,171069],{},".json","：结构化数据。",[29,171072,171073,171076],{},[114,171074,171075],{},".log","：日志文件。",[29,171078,171079,171081],{},[114,171080,149699],{},"：Python 源代码。",[14,171083,171085],{"id":171084},"_82-路径","8.2 路径",[72,171087,171089],{"id":171088},"_821-相对路径","8.2.1 相对路径",[19,171091,171092],{},"相对当前运行目录：",[106,171094,171096],{"className":122,"code":171095,"language":124,"meta":112,"style":112},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[114,171097,171098],{"__ignoreMap":112},[128,171099,171100,171102,171104,171106,171108,171110,171112,171114,171116,171118],{"class":130,"line":131},[128,171101,90287],{"class":166},[128,171103,253],{"class":138},[128,171105,150142],{"class":176},[128,171107,258],{"class":138},[128,171109,261],{"class":176},[128,171111,258],{"class":138},[128,171113,267],{"class":266},[128,171115,270],{"class":134},[128,171117,273],{"class":176},[128,171119,180],{"class":138},[72,171121,171123],{"id":171122},"_822-绝对路径","8.2.2 绝对路径",[19,171125,171126],{},"从根目录或盘符开始：",[106,171128,171130],{"className":122,"code":171129,"language":124,"meta":112,"style":112},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[114,171131,171132,171155],{"__ignoreMap":112},[128,171133,171134,171136,171138,171141,171143,171145,171147,171149,171151,171153],{"class":130,"line":131},[128,171135,90287],{"class":166},[128,171137,253],{"class":138},[128,171139,171140],{"class":176},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[128,171142,258],{"class":138},[128,171144,261],{"class":176},[128,171146,258],{"class":138},[128,171148,267],{"class":266},[128,171150,270],{"class":134},[128,171152,273],{"class":176},[128,171154,180],{"class":138},[128,171156,171157,171159,171161,171164,171166,171168,171170,171172,171174,171176],{"class":130,"line":142},[128,171158,90287],{"class":166},[128,171160,253],{"class":138},[128,171162,171163],{"class":176},"\"D:\u002Fdata\u002Fdata.txt\"",[128,171165,258],{"class":138},[128,171167,261],{"class":176},[128,171169,258],{"class":138},[128,171171,267],{"class":266},[128,171173,270],{"class":134},[128,171175,273],{"class":176},[128,171177,180],{"class":138},[19,171179,171180],{},"Windows 路径建议写成：",[106,171182,171184],{"className":122,"code":171183,"language":124,"meta":112,"style":112},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[114,171185,171186],{"__ignoreMap":112},[128,171187,171188,171191,171193],{"class":130,"line":131},[128,171189,171190],{"class":138},"path ",[128,171192,270],{"class":134},[128,171194,171195],{"class":176}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,171197,171198],{},"或原始字符串：",[106,171200,171202],{"className":122,"code":171201,"language":124,"meta":112,"style":112},"path = r\"D:\\data\\data.txt\"\n",[114,171203,171204],{"__ignoreMap":112},[128,171205,171206,171208,171210,171212,171214,171217,171220,171223,171225,171227,171229,171232],{"class":130,"line":131},[128,171207,171190],{"class":138},[128,171209,270],{"class":134},[128,171211,20608],{"class":134},[128,171213,1376],{"class":176},[128,171215,171216],{"class":51362},"D:",[128,171218,171219],{"class":166},"\\d",[128,171221,171222],{"class":51362},"ata",[128,171224,171219],{"class":166},[128,171226,171222],{"class":51362},[128,171228,4307],{"class":166},[128,171230,171231],{"class":51362},"txt",[128,171233,1394],{"class":176},[14,171235,171237],{"id":171236},"_83-open函数","8.3 open函数",[19,171239,8743],{},[106,171241,171243],{"className":122,"code":171242,"language":124,"meta":112,"style":112},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[114,171244,171245],{"__ignoreMap":112},[128,171246,171247,171249,171251,171253,171256,171258,171260,171262],{"class":130,"line":131},[128,171248,296],{"class":266},[128,171250,170],{"class":134},[128,171252,250],{"class":166},[128,171254,171255],{"class":138},"(文件路径, 打开模式, ",[128,171257,267],{"class":266},[128,171259,270],{"class":134},[128,171261,273],{"class":176},[128,171263,180],{"class":138},[19,171265,171266],{},"常见模式：",[3891,171268,171269,171278],{},[3894,171270,171271],{},[3897,171272,171273,171276],{},[3900,171274,171275],{},"模式",[3900,171277,29355],{},[3938,171279,171280,171289,171298,171307,171317],{},[3897,171281,171282,171286],{},[3943,171283,171284],{},[114,171285,4419],{},[3943,171287,171288],{},"只读，文件不存在会报错",[3897,171290,171291,171295],{},[3943,171292,171293],{},[114,171294,4544],{},[3943,171296,171297],{},"只写，文件不存在会创建，存在会清空",[3897,171299,171300,171304],{},[3943,171301,171302],{},[114,171303,3989],{},[3943,171305,171306],{},"追加，文件不存在会创建",[3897,171308,171309,171314],{},[3943,171310,171311],{},[114,171312,171313],{},"rb",[3943,171315,171316],{},"二进制只读",[3897,171318,171319,171324],{},[3943,171320,171321],{},[114,171322,171323],{},"wb",[3943,171325,171326],{},"二进制只写",[14,171328,171330],{"id":171329},"_84-读取文件","8.4 读取文件",[72,171332,171334],{"id":171333},"_841-read","8.4.1 read",[19,171336,171337],{},"一次读取全部内容：",[106,171339,171341],{"className":122,"code":171340,"language":124,"meta":112,"style":112},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[114,171342,171343,171369,171381,171388],{"__ignoreMap":112},[128,171344,171345,171347,171349,171351,171353,171355,171357,171359,171361,171363,171365,171367],{"class":130,"line":131},[128,171346,296],{"class":266},[128,171348,170],{"class":134},[128,171350,250],{"class":166},[128,171352,253],{"class":138},[128,171354,150142],{"class":176},[128,171356,258],{"class":138},[128,171358,261],{"class":176},[128,171360,258],{"class":138},[128,171362,267],{"class":266},[128,171364,270],{"class":134},[128,171366,273],{"class":176},[128,171368,180],{"class":138},[128,171370,171371,171374,171376,171378],{"class":130,"line":142},[128,171372,171373],{"class":138},"content ",[128,171375,270],{"class":134},[128,171377,282],{"class":266},[128,171379,171380],{"class":138},".read()\n",[128,171382,171383,171385],{"class":130,"line":156},[128,171384,2469],{"class":166},[128,171386,171387],{"class":138},"(content)\n",[128,171389,171390,171392],{"class":130,"line":163},[128,171391,296],{"class":266},[128,171393,171394],{"class":138},".close()\n",[19,171396,171397],{},"可以指定读取字符数：",[106,171399,171401],{"className":122,"code":171400,"language":124,"meta":112,"style":112},"content = file.read(10)\n",[114,171402,171403],{"__ignoreMap":112},[128,171404,171405,171407,171409,171411,171414,171416],{"class":130,"line":131},[128,171406,171373],{"class":138},[128,171408,270],{"class":134},[128,171410,282],{"class":266},[128,171412,171413],{"class":138},".read(",[128,171415,4196],{"class":166},[128,171417,180],{"class":138},[72,171419,171421],{"id":171420},"_842-readline","8.4.2 readline",[19,171423,171424],{},"一次读取一行：",[106,171426,171428],{"className":122,"code":171427,"language":124,"meta":112,"style":112},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[114,171429,171430,171456,171460,171471,171478,171482],{"__ignoreMap":112},[128,171431,171432,171434,171436,171438,171440,171442,171444,171446,171448,171450,171452,171454],{"class":130,"line":131},[128,171433,296],{"class":266},[128,171435,170],{"class":134},[128,171437,250],{"class":166},[128,171439,253],{"class":138},[128,171441,150142],{"class":176},[128,171443,258],{"class":138},[128,171445,261],{"class":176},[128,171447,258],{"class":138},[128,171449,267],{"class":266},[128,171451,270],{"class":134},[128,171453,273],{"class":176},[128,171455,180],{"class":138},[128,171457,171458],{"class":130,"line":142},[128,171459,160],{"emptyLinePlaceholder":159},[128,171461,171462,171464,171466,171468],{"class":130,"line":156},[128,171463,150592],{"class":138},[128,171465,270],{"class":134},[128,171467,282],{"class":266},[128,171469,171470],{"class":138},".readline()\n",[128,171472,171473,171475],{"class":130,"line":163},[128,171474,2469],{"class":166},[128,171476,171477],{"class":138},"(line)\n",[128,171479,171480],{"class":130,"line":183},[128,171481,160],{"emptyLinePlaceholder":159},[128,171483,171484,171486],{"class":130,"line":188},[128,171485,296],{"class":266},[128,171487,171394],{"class":138},[72,171489,171491],{"id":171490},"_843-readlines","8.4.3 readlines",[19,171493,171494],{},"读取所有行，返回列表：",[106,171496,171498],{"className":122,"code":171497,"language":124,"meta":112,"style":112},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[114,171499,171500,171526,171538,171545],{"__ignoreMap":112},[128,171501,171502,171504,171506,171508,171510,171512,171514,171516,171518,171520,171522,171524],{"class":130,"line":131},[128,171503,296],{"class":266},[128,171505,170],{"class":134},[128,171507,250],{"class":166},[128,171509,253],{"class":138},[128,171511,150142],{"class":176},[128,171513,258],{"class":138},[128,171515,261],{"class":176},[128,171517,258],{"class":138},[128,171519,267],{"class":266},[128,171521,270],{"class":134},[128,171523,273],{"class":176},[128,171525,180],{"class":138},[128,171527,171528,171531,171533,171535],{"class":130,"line":142},[128,171529,171530],{"class":138},"lines ",[128,171532,270],{"class":134},[128,171534,282],{"class":266},[128,171536,171537],{"class":138},".readlines()\n",[128,171539,171540,171542],{"class":130,"line":156},[128,171541,2469],{"class":166},[128,171543,171544],{"class":138},"(lines)\n",[128,171546,171547,171549],{"class":130,"line":163},[128,171548,296],{"class":266},[128,171550,171394],{"class":138},[19,171552,171553,171554,171557],{},"每一行通常带有换行符，可以用 ",[114,171555,171556],{},"strip()"," 去掉：",[106,171559,171561],{"className":122,"code":171560,"language":124,"meta":112,"style":112},"for line in lines:\n    print(line.strip())\n",[114,171562,171563,171575],{"__ignoreMap":112},[128,171564,171565,171567,171570,171572],{"class":130,"line":131},[128,171566,2404],{"class":134},[128,171568,171569],{"class":138}," line ",[128,171571,549],{"class":134},[128,171573,171574],{"class":138}," lines:\n",[128,171576,171577,171579],{"class":130,"line":142},[128,171578,437],{"class":166},[128,171580,171581],{"class":138},"(line.strip())\n",[72,171583,171585],{"id":171584},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,171587,171588],{},"推荐读取大文件时使用：",[106,171590,171592],{"className":122,"code":171591,"language":124,"meta":112,"style":112},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[114,171593,171594,171620,171624,171636,171642,171646],{"__ignoreMap":112},[128,171595,171596,171598,171600,171602,171604,171606,171608,171610,171612,171614,171616,171618],{"class":130,"line":131},[128,171597,296],{"class":266},[128,171599,170],{"class":134},[128,171601,250],{"class":166},[128,171603,253],{"class":138},[128,171605,150142],{"class":176},[128,171607,258],{"class":138},[128,171609,261],{"class":176},[128,171611,258],{"class":138},[128,171613,267],{"class":266},[128,171615,270],{"class":134},[128,171617,273],{"class":176},[128,171619,180],{"class":138},[128,171621,171622],{"class":130,"line":142},[128,171623,160],{"emptyLinePlaceholder":159},[128,171625,171626,171628,171630,171632,171634],{"class":130,"line":156},[128,171627,2404],{"class":134},[128,171629,171569],{"class":138},[128,171631,549],{"class":134},[128,171633,282],{"class":266},[128,171635,241],{"class":138},[128,171637,171638,171640],{"class":130,"line":163},[128,171639,437],{"class":166},[128,171641,171581],{"class":138},[128,171643,171644],{"class":130,"line":183},[128,171645,160],{"emptyLinePlaceholder":159},[128,171647,171648,171650],{"class":130,"line":188},[128,171649,296],{"class":266},[128,171651,171394],{"class":138},[14,171653,171655],{"id":171654},"_85-with语句","8.5 with语句",[19,171657,171658,171660],{},[114,171659,111195],{}," 会自动关闭文件，推荐使用。",[106,171662,171664],{"className":122,"code":171663,"language":124,"meta":112,"style":112},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[114,171665,171666,171696,171706],{"__ignoreMap":112},[128,171667,171668,171670,171672,171674,171676,171678,171680,171682,171684,171686,171688,171690,171692,171694],{"class":130,"line":131},[128,171669,111195],{"class":134},[128,171671,250],{"class":166},[128,171673,253],{"class":138},[128,171675,150142],{"class":176},[128,171677,258],{"class":138},[128,171679,261],{"class":176},[128,171681,258],{"class":138},[128,171683,267],{"class":266},[128,171685,270],{"class":134},[128,171687,273],{"class":176},[128,171689,276],{"class":138},[128,171691,279],{"class":134},[128,171693,282],{"class":266},[128,171695,241],{"class":138},[128,171697,171698,171700,171702,171704],{"class":130,"line":142},[128,171699,150166],{"class":138},[128,171701,270],{"class":134},[128,171703,282],{"class":266},[128,171705,171380],{"class":138},[128,171707,171708,171710],{"class":130,"line":156},[128,171709,437],{"class":166},[128,171711,171387],{"class":138},[19,171713,171714],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,171716,171718],{"id":171717},"_86-写入文件","8.6 写入文件",[19,171720,171721,171723],{},[114,171722,4544],{}," 模式会清空原文件。",[106,171725,171727],{"className":122,"code":171726,"language":124,"meta":112,"style":112},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[114,171728,171729,171759,171776],{"__ignoreMap":112},[128,171730,171731,171733,171735,171737,171739,171741,171743,171745,171747,171749,171751,171753,171755,171757],{"class":130,"line":131},[128,171732,111195],{"class":134},[128,171734,250],{"class":166},[128,171736,253],{"class":138},[128,171738,150142],{"class":176},[128,171740,258],{"class":138},[128,171742,365],{"class":176},[128,171744,258],{"class":138},[128,171746,267],{"class":266},[128,171748,270],{"class":134},[128,171750,273],{"class":176},[128,171752,276],{"class":138},[128,171754,279],{"class":134},[128,171756,282],{"class":266},[128,171758,241],{"class":138},[128,171760,171761,171764,171767,171770,171772,171774],{"class":130,"line":142},[128,171762,171763],{"class":266},"    file",[128,171765,171766],{"class":138},".write(",[128,171768,171769],{"class":176},"\"hello",[128,171771,159404],{"class":166},[128,171773,1376],{"class":176},[128,171775,180],{"class":138},[128,171777,171778,171780,171782,171785,171787,171789],{"class":130,"line":156},[128,171779,171763],{"class":266},[128,171781,171766],{"class":138},[128,171783,171784],{"class":176},"\"python",[128,171786,159404],{"class":166},[128,171788,1376],{"class":176},[128,171790,180],{"class":138},[19,171792,171793],{},"写入多行：",[106,171795,171797],{"className":122,"code":171796,"language":124,"meta":112,"style":112},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[114,171798,171799,171834,171838,171869],{"__ignoreMap":112},[128,171800,171801,171803,171805,171807,171810,171812,171814,171816,171819,171821,171823,171825,171828,171830,171832],{"class":130,"line":131},[128,171802,171530],{"class":138},[128,171804,270],{"class":134},[128,171806,55608],{"class":138},[128,171808,171809],{"class":176},"\"小明,18",[128,171811,159404],{"class":166},[128,171813,1376],{"class":176},[128,171815,258],{"class":138},[128,171817,171818],{"class":176},"\"小红,17",[128,171820,159404],{"class":166},[128,171822,1376],{"class":176},[128,171824,258],{"class":138},[128,171826,171827],{"class":176},"\"小刚,19",[128,171829,159404],{"class":166},[128,171831,1376],{"class":176},[128,171833,2376],{"class":138},[128,171835,171836],{"class":130,"line":142},[128,171837,160],{"emptyLinePlaceholder":159},[128,171839,171840,171842,171844,171846,171849,171851,171853,171855,171857,171859,171861,171863,171865,171867],{"class":130,"line":156},[128,171841,111195],{"class":134},[128,171843,250],{"class":166},[128,171845,253],{"class":138},[128,171847,171848],{"class":176},"\"students.txt\"",[128,171850,258],{"class":138},[128,171852,365],{"class":176},[128,171854,258],{"class":138},[128,171856,267],{"class":266},[128,171858,270],{"class":134},[128,171860,273],{"class":176},[128,171862,276],{"class":138},[128,171864,279],{"class":134},[128,171866,282],{"class":266},[128,171868,241],{"class":138},[128,171870,171871,171873],{"class":130,"line":163},[128,171872,171763],{"class":266},[128,171874,171875],{"class":138},".writelines(lines)\n",[14,171877,171879],{"id":171878},"_87-追加文件","8.7 追加文件",[19,171881,171882,171884],{},[114,171883,3989],{}," 模式不会清空原内容，而是在末尾追加。",[106,171886,171888],{"className":122,"code":171887,"language":124,"meta":112,"style":112},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[114,171889,171890,171921],{"__ignoreMap":112},[128,171891,171892,171894,171896,171898,171901,171903,171905,171907,171909,171911,171913,171915,171917,171919],{"class":130,"line":131},[128,171893,111195],{"class":134},[128,171895,250],{"class":166},[128,171897,253],{"class":138},[128,171899,171900],{"class":176},"\"log.txt\"",[128,171902,258],{"class":138},[128,171904,168204],{"class":176},[128,171906,258],{"class":138},[128,171908,267],{"class":266},[128,171910,270],{"class":134},[128,171912,273],{"class":176},[128,171914,276],{"class":138},[128,171916,279],{"class":134},[128,171918,282],{"class":266},[128,171920,241],{"class":138},[128,171922,171923,171925,171927,171930,171932,171934],{"class":130,"line":142},[128,171924,171763],{"class":266},[128,171926,171766],{"class":138},[128,171928,171929],{"class":176},"\"程序启动",[128,171931,159404],{"class":166},[128,171933,1376],{"class":176},[128,171935,180],{"class":138},[19,171937,171938],{},"日志类文件常用追加模式。",[14,171940,171942],{"id":171941},"_88-文件编码","8.8 文件编码",[19,171944,171945],{},"编码决定文字如何保存为字节。",[19,171947,171948],{},"常见编码：",[26,171950,171951,171954],{},[29,171952,171953],{},"UTF-8：推荐。",[29,171955,171956],{},"GBK：部分 Windows 中文文件常见。",[19,171958,171959],{},"读取文件乱码时，可以尝试：",[106,171961,171963],{"className":122,"code":171962,"language":124,"meta":112,"style":112},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[114,171964,171965,171996],{"__ignoreMap":112},[128,171966,171967,171969,171971,171973,171975,171977,171979,171981,171983,171985,171988,171990,171992,171994],{"class":130,"line":131},[128,171968,111195],{"class":134},[128,171970,250],{"class":166},[128,171972,253],{"class":138},[128,171974,150142],{"class":176},[128,171976,258],{"class":138},[128,171978,261],{"class":176},[128,171980,258],{"class":138},[128,171982,267],{"class":266},[128,171984,270],{"class":134},[128,171986,171987],{"class":176},"\"gbk\"",[128,171989,276],{"class":138},[128,171991,279],{"class":134},[128,171993,282],{"class":266},[128,171995,241],{"class":138},[128,171997,171998,172000,172002,172004],{"class":130,"line":142},[128,171999,150166],{"class":138},[128,172001,270],{"class":134},[128,172003,282],{"class":266},[128,172005,171380],{"class":138},[19,172007,172008],{},"写文件时建议统一 UTF-8：",[106,172010,172012],{"className":122,"code":172011,"language":124,"meta":112,"style":112},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[114,172013,172014,172044],{"__ignoreMap":112},[128,172015,172016,172018,172020,172022,172024,172026,172028,172030,172032,172034,172036,172038,172040,172042],{"class":130,"line":131},[128,172017,111195],{"class":134},[128,172019,250],{"class":166},[128,172021,253],{"class":138},[128,172023,150142],{"class":176},[128,172025,258],{"class":138},[128,172027,365],{"class":176},[128,172029,258],{"class":138},[128,172031,267],{"class":266},[128,172033,270],{"class":134},[128,172035,273],{"class":176},[128,172037,276],{"class":138},[128,172039,279],{"class":134},[128,172041,282],{"class":266},[128,172043,241],{"class":138},[128,172045,172046,172048,172050,172053],{"class":130,"line":142},[128,172047,171763],{"class":266},[128,172049,171766],{"class":138},[128,172051,172052],{"class":176},"\"中文内容\"",[128,172054,180],{"class":138},[14,172056,172058],{"id":172057},"_89-pathlib","8.9 pathlib",[19,172060,172061,172064],{},[114,172062,172063],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[106,172066,172068],{"className":122,"code":172067,"language":124,"meta":112,"style":112},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[114,172069,172070,172080,172084,172102],{"__ignoreMap":112},[128,172071,172072,172074,172076,172078],{"class":130,"line":131},[128,172073,145],{"class":134},[128,172075,148],{"class":138},[128,172077,135],{"class":134},[128,172079,153],{"class":138},[128,172081,172082],{"class":130,"line":142},[128,172083,160],{"emptyLinePlaceholder":159},[128,172085,172086,172088,172090,172092,172095,172097,172099],{"class":130,"line":156},[128,172087,171190],{"class":138},[128,172089,270],{"class":134},[128,172091,173],{"class":138},[128,172093,172094],{"class":176},"\"data\"",[128,172096,276],{"class":138},[128,172098,4333],{"class":134},[128,172100,172101],{"class":176}," \"students.txt\"\n",[128,172103,172104,172106],{"class":130,"line":163},[128,172105,2469],{"class":166},[128,172107,172108],{"class":138},"(path)\n",[19,172110,172111],{},"创建目录：",[106,172113,172115],{"className":122,"code":172114,"language":124,"meta":112,"style":112},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[114,172116,172117,172127,172131,172144],{"__ignoreMap":112},[128,172118,172119,172121,172123,172125],{"class":130,"line":131},[128,172120,145],{"class":134},[128,172122,148],{"class":138},[128,172124,135],{"class":134},[128,172126,153],{"class":138},[128,172128,172129],{"class":130,"line":142},[128,172130,160],{"emptyLinePlaceholder":159},[128,172132,172133,172136,172138,172140,172142],{"class":130,"line":156},[128,172134,172135],{"class":138},"data_dir ",[128,172137,270],{"class":134},[128,172139,173],{"class":138},[128,172141,172094],{"class":176},[128,172143,180],{"class":138},[128,172145,172146,172149,172152,172154,172156],{"class":130,"line":163},[128,172147,172148],{"class":138},"data_dir.mkdir(",[128,172150,172151],{"class":266},"exist_ok",[128,172153,270],{"class":134},[128,172155,34945],{"class":166},[128,172157,180],{"class":138},[19,172159,172160],{},"判断文件是否存在：",[106,172162,172164],{"className":122,"code":172163,"language":124,"meta":112,"style":112},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[114,172165,172166,172179,172183,172190],{"__ignoreMap":112},[128,172167,172168,172170,172172,172174,172177],{"class":130,"line":131},[128,172169,171190],{"class":138},[128,172171,270],{"class":134},[128,172173,173],{"class":138},[128,172175,172176],{"class":176},"\"data\u002Fstudents.txt\"",[128,172178,180],{"class":138},[128,172180,172181],{"class":130,"line":142},[128,172182,160],{"emptyLinePlaceholder":159},[128,172184,172185,172187],{"class":130,"line":156},[128,172186,1800],{"class":134},[128,172188,172189],{"class":138}," path.exists():\n",[128,172191,172192,172194,172196,172199],{"class":130,"line":163},[128,172193,437],{"class":166},[128,172195,253],{"class":138},[128,172197,172198],{"class":176},"\"文件存在\"",[128,172200,180],{"class":138},[19,172202,172203],{},"读写文本：",[106,172205,172207],{"className":122,"code":172206,"language":124,"meta":112,"style":112},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[114,172208,172209,172221,172225,172242,172259],{"__ignoreMap":112},[128,172210,172211,172213,172215,172217,172219],{"class":130,"line":131},[128,172212,171190],{"class":138},[128,172214,270],{"class":134},[128,172216,173],{"class":138},[128,172218,150142],{"class":176},[128,172220,180],{"class":138},[128,172222,172223],{"class":130,"line":142},[128,172224,160],{"emptyLinePlaceholder":159},[128,172226,172227,172230,172232,172234,172236,172238,172240],{"class":130,"line":156},[128,172228,172229],{"class":138},"path.write_text(",[128,172231,149227],{"class":176},[128,172233,258],{"class":138},[128,172235,267],{"class":266},[128,172237,270],{"class":134},[128,172239,273],{"class":176},[128,172241,180],{"class":138},[128,172243,172244,172246,172248,172251,172253,172255,172257],{"class":130,"line":163},[128,172245,171373],{"class":138},[128,172247,270],{"class":134},[128,172249,172250],{"class":138}," path.read_text(",[128,172252,267],{"class":266},[128,172254,270],{"class":134},[128,172256,273],{"class":176},[128,172258,180],{"class":138},[128,172260,172261,172263],{"class":130,"line":183},[128,172262,2469],{"class":166},[128,172264,171387],{"class":138},[14,172266,172268],{"id":172267},"_810-json文件","8.10 JSON文件",[19,172270,172271],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[106,172273,172275],{"className":122,"code":172274,"language":124,"meta":112,"style":112},"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",[114,172276,172277,172283,172287,172295,172305,172315,172323,172327,172331,172356],{"__ignoreMap":112},[128,172278,172279,172281],{"class":130,"line":131},[128,172280,135],{"class":134},[128,172282,139],{"class":138},[128,172284,172285],{"class":130,"line":142},[128,172286,160],{"emptyLinePlaceholder":159},[128,172288,172289,172291,172293],{"class":130,"line":156},[128,172290,152801],{"class":138},[128,172292,270],{"class":134},[128,172294,1959],{"class":138},[128,172296,172297,172299,172301,172303],{"class":130,"line":163},[128,172298,150363],{"class":176},[128,172300,1967],{"class":138},[128,172302,153205],{"class":176},[128,172304,2665],{"class":138},[128,172306,172307,172309,172311,172313],{"class":130,"line":183},[128,172308,167416],{"class":176},[128,172310,1967],{"class":138},[128,172312,4399],{"class":166},[128,172314,2665],{"class":138},[128,172316,172317,172319,172321],{"class":130,"line":188},[128,172318,167427],{"class":176},[128,172320,1967],{"class":138},[128,172322,167432],{"class":166},[128,172324,172325],{"class":130,"line":193},[128,172326,2694],{"class":138},[128,172328,172329],{"class":130,"line":206},[128,172330,160],{"emptyLinePlaceholder":159},[128,172332,172333,172335,172337,172340,172342,172344,172346,172348,172350,172352,172354],{"class":130,"line":221},[128,172334,159323],{"class":138},[128,172336,270],{"class":134},[128,172338,172339],{"class":138}," json.dumps(student, ",[128,172341,394],{"class":266},[128,172343,270],{"class":134},[128,172345,399],{"class":166},[128,172347,258],{"class":138},[128,172349,404],{"class":266},[128,172351,270],{"class":134},[128,172353,409],{"class":166},[128,172355,180],{"class":138},[128,172357,172358,172360],{"class":130,"line":230},[128,172359,2469],{"class":166},[128,172361,166950],{"class":138},[19,172363,172364],{},"写入 JSON 文件：",[106,172366,172368],{"className":122,"code":172367,"language":124,"meta":112,"style":112},"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",[114,172369,172370,172376,172380,172388,172416,172444,172448,172452,172482],{"__ignoreMap":112},[128,172371,172372,172374],{"class":130,"line":131},[128,172373,135],{"class":134},[128,172375,139],{"class":138},[128,172377,172378],{"class":130,"line":142},[128,172379,160],{"emptyLinePlaceholder":159},[128,172381,172382,172384,172386],{"class":130,"line":156},[128,172383,162595],{"class":138},[128,172385,270],{"class":134},[128,172387,2246],{"class":138},[128,172389,172390,172392,172394,172396,172398,172400,172402,172404,172406,172408,172410,172412,172414],{"class":130,"line":163},[128,172391,2251],{"class":138},[128,172393,1189],{"class":176},[128,172395,1967],{"class":138},[128,172397,153205],{"class":176},[128,172399,258],{"class":138},[128,172401,1204],{"class":176},[128,172403,1967],{"class":138},[128,172405,4399],{"class":166},[128,172407,258],{"class":138},[128,172409,1219],{"class":176},[128,172411,1967],{"class":138},[128,172413,4734],{"class":166},[128,172415,2282],{"class":138},[128,172417,172418,172420,172422,172424,172426,172428,172430,172432,172434,172436,172438,172440,172442],{"class":130,"line":183},[128,172419,2251],{"class":138},[128,172421,1189],{"class":176},[128,172423,1967],{"class":138},[128,172425,154253],{"class":176},[128,172427,258],{"class":138},[128,172429,1204],{"class":176},[128,172431,1967],{"class":138},[128,172433,4374],{"class":166},[128,172435,258],{"class":138},[128,172437,1219],{"class":176},[128,172439,1967],{"class":138},[128,172441,4560],{"class":166},[128,172443,2282],{"class":138},[128,172445,172446],{"class":130,"line":188},[128,172447,2376],{"class":138},[128,172449,172450],{"class":130,"line":193},[128,172451,160],{"emptyLinePlaceholder":159},[128,172453,172454,172456,172458,172460,172462,172464,172466,172468,172470,172472,172474,172476,172478,172480],{"class":130,"line":206},[128,172455,111195],{"class":134},[128,172457,250],{"class":166},[128,172459,253],{"class":138},[128,172461,177],{"class":176},[128,172463,258],{"class":138},[128,172465,365],{"class":176},[128,172467,258],{"class":138},[128,172469,267],{"class":266},[128,172471,270],{"class":134},[128,172473,273],{"class":176},[128,172475,276],{"class":138},[128,172477,279],{"class":134},[128,172479,282],{"class":266},[128,172481,241],{"class":138},[128,172483,172484,172487,172489,172491,172493,172495,172497,172499,172501,172503,172505],{"class":130,"line":221},[128,172485,172486],{"class":138},"    json.dump(students, ",[128,172488,296],{"class":266},[128,172490,258],{"class":138},[128,172492,394],{"class":266},[128,172494,270],{"class":134},[128,172496,399],{"class":166},[128,172498,258],{"class":138},[128,172500,404],{"class":266},[128,172502,270],{"class":134},[128,172504,409],{"class":166},[128,172506,180],{"class":138},[19,172508,172509],{},"读取 JSON 文件：",[106,172511,172513],{"className":122,"code":172512,"language":124,"meta":112,"style":112},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[114,172514,172515,172521,172525,172555,172567,172571],{"__ignoreMap":112},[128,172516,172517,172519],{"class":130,"line":131},[128,172518,135],{"class":134},[128,172520,139],{"class":138},[128,172522,172523],{"class":130,"line":142},[128,172524,160],{"emptyLinePlaceholder":159},[128,172526,172527,172529,172531,172533,172535,172537,172539,172541,172543,172545,172547,172549,172551,172553],{"class":130,"line":156},[128,172528,111195],{"class":134},[128,172530,250],{"class":166},[128,172532,253],{"class":138},[128,172534,177],{"class":176},[128,172536,258],{"class":138},[128,172538,261],{"class":176},[128,172540,258],{"class":138},[128,172542,267],{"class":266},[128,172544,270],{"class":134},[128,172546,273],{"class":176},[128,172548,276],{"class":138},[128,172550,279],{"class":134},[128,172552,282],{"class":266},[128,172554,241],{"class":138},[128,172556,172557,172559,172561,172563,172565],{"class":130,"line":163},[128,172558,1583],{"class":138},[128,172560,270],{"class":134},[128,172562,293],{"class":138},[128,172564,296],{"class":266},[128,172566,180],{"class":138},[128,172568,172569],{"class":130,"line":183},[128,172570,160],{"emptyLinePlaceholder":159},[128,172572,172573,172575],{"class":130,"line":188},[128,172574,2469],{"class":166},[128,172576,167874],{"class":138},[14,172578,172580],{"id":172579},"_811-csv文件","8.11 CSV文件",[19,172582,172583],{},"CSV 是逗号分隔值，常用于表格数据。",[19,172585,172586],{},"写入 CSV：",[106,172588,172590],{"className":122,"code":172589,"language":124,"meta":112,"style":112},"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",[114,172591,172592,172599,172603,172611,172629,172645,172661,172665,172669,172709,172723],{"__ignoreMap":112},[128,172593,172594,172596],{"class":130,"line":131},[128,172595,135],{"class":134},[128,172597,172598],{"class":138}," csv\n",[128,172600,172601],{"class":130,"line":142},[128,172602,160],{"emptyLinePlaceholder":159},[128,172604,172605,172607,172609],{"class":130,"line":156},[128,172606,162595],{"class":138},[128,172608,270],{"class":134},[128,172610,2246],{"class":138},[128,172612,172613,172616,172618,172620,172622,172624,172627],{"class":130,"line":163},[128,172614,172615],{"class":138},"    [",[128,172617,76474],{"class":176},[128,172619,258],{"class":138},[128,172621,76507],{"class":176},[128,172623,258],{"class":138},[128,172625,172626],{"class":176},"\"成绩\"",[128,172628,2055],{"class":138},[128,172630,172631,172633,172635,172637,172639,172641,172643],{"class":130,"line":183},[128,172632,172615],{"class":138},[128,172634,153205],{"class":176},[128,172636,258],{"class":138},[128,172638,4399],{"class":166},[128,172640,258],{"class":138},[128,172642,4734],{"class":166},[128,172644,2055],{"class":138},[128,172646,172647,172649,172651,172653,172655,172657,172659],{"class":130,"line":188},[128,172648,172615],{"class":138},[128,172650,154253],{"class":176},[128,172652,258],{"class":138},[128,172654,4374],{"class":166},[128,172656,258],{"class":138},[128,172658,4560],{"class":166},[128,172660,2055],{"class":138},[128,172662,172663],{"class":130,"line":193},[128,172664,2376],{"class":138},[128,172666,172667],{"class":130,"line":206},[128,172668,160],{"emptyLinePlaceholder":159},[128,172670,172671,172673,172675,172677,172680,172682,172684,172686,172688,172690,172692,172694,172697,172699,172701,172703,172705,172707],{"class":130,"line":221},[128,172672,111195],{"class":134},[128,172674,250],{"class":166},[128,172676,253],{"class":138},[128,172678,172679],{"class":176},"\"students.csv\"",[128,172681,258],{"class":138},[128,172683,365],{"class":176},[128,172685,258],{"class":138},[128,172687,267],{"class":266},[128,172689,270],{"class":134},[128,172691,273],{"class":176},[128,172693,258],{"class":138},[128,172695,172696],{"class":266},"newline",[128,172698,270],{"class":134},[128,172700,11209],{"class":176},[128,172702,276],{"class":138},[128,172704,279],{"class":134},[128,172706,282],{"class":266},[128,172708,241],{"class":138},[128,172710,172711,172714,172716,172719,172721],{"class":130,"line":230},[128,172712,172713],{"class":138},"    writer ",[128,172715,270],{"class":134},[128,172717,172718],{"class":138}," csv.writer(",[128,172720,296],{"class":266},[128,172722,180],{"class":138},[128,172724,172725],{"class":130,"line":235},[128,172726,172727],{"class":138},"    writer.writerows(students)\n",[19,172729,172730],{},"读取 CSV：",[106,172732,172734],{"className":122,"code":172733,"language":124,"meta":112,"style":112},"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",[114,172735,172736,172742,172746,172776,172790,172802],{"__ignoreMap":112},[128,172737,172738,172740],{"class":130,"line":131},[128,172739,135],{"class":134},[128,172741,172598],{"class":138},[128,172743,172744],{"class":130,"line":142},[128,172745,160],{"emptyLinePlaceholder":159},[128,172747,172748,172750,172752,172754,172756,172758,172760,172762,172764,172766,172768,172770,172772,172774],{"class":130,"line":156},[128,172749,111195],{"class":134},[128,172751,250],{"class":166},[128,172753,253],{"class":138},[128,172755,172679],{"class":176},[128,172757,258],{"class":138},[128,172759,261],{"class":176},[128,172761,258],{"class":138},[128,172763,267],{"class":266},[128,172765,270],{"class":134},[128,172767,273],{"class":176},[128,172769,276],{"class":138},[128,172771,279],{"class":134},[128,172773,282],{"class":266},[128,172775,241],{"class":138},[128,172777,172778,172781,172783,172786,172788],{"class":130,"line":163},[128,172779,172780],{"class":138},"    reader ",[128,172782,270],{"class":134},[128,172784,172785],{"class":138}," csv.reader(",[128,172787,296],{"class":266},[128,172789,180],{"class":138},[128,172791,172792,172794,172797,172799],{"class":130,"line":183},[128,172793,543],{"class":134},[128,172795,172796],{"class":138}," row ",[128,172798,549],{"class":134},[128,172800,172801],{"class":138}," reader:\n",[128,172803,172804,172806],{"class":130,"line":188},[128,172805,313],{"class":166},[128,172807,172808],{"class":138},"(row)\n",[19,172810,172811],{},"使用字典写入：",[106,172813,172815],{"className":122,"code":172814,"language":124,"meta":112,"style":112},"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",[114,172816,172817,172823,172827,172835,172863,172891,172895,172899,172937,172958,172979,172984],{"__ignoreMap":112},[128,172818,172819,172821],{"class":130,"line":131},[128,172820,135],{"class":134},[128,172822,172598],{"class":138},[128,172824,172825],{"class":130,"line":142},[128,172826,160],{"emptyLinePlaceholder":159},[128,172828,172829,172831,172833],{"class":130,"line":156},[128,172830,162595],{"class":138},[128,172832,270],{"class":134},[128,172834,2246],{"class":138},[128,172836,172837,172839,172841,172843,172845,172847,172849,172851,172853,172855,172857,172859,172861],{"class":130,"line":163},[128,172838,2251],{"class":138},[128,172840,1189],{"class":176},[128,172842,1967],{"class":138},[128,172844,153205],{"class":176},[128,172846,258],{"class":138},[128,172848,1204],{"class":176},[128,172850,1967],{"class":138},[128,172852,4399],{"class":166},[128,172854,258],{"class":138},[128,172856,1219],{"class":176},[128,172858,1967],{"class":138},[128,172860,4734],{"class":166},[128,172862,2282],{"class":138},[128,172864,172865,172867,172869,172871,172873,172875,172877,172879,172881,172883,172885,172887,172889],{"class":130,"line":183},[128,172866,2251],{"class":138},[128,172868,1189],{"class":176},[128,172870,1967],{"class":138},[128,172872,154253],{"class":176},[128,172874,258],{"class":138},[128,172876,1204],{"class":176},[128,172878,1967],{"class":138},[128,172880,4374],{"class":166},[128,172882,258],{"class":138},[128,172884,1219],{"class":176},[128,172886,1967],{"class":138},[128,172888,4560],{"class":166},[128,172890,2282],{"class":138},[128,172892,172893],{"class":130,"line":188},[128,172894,2376],{"class":138},[128,172896,172897],{"class":130,"line":193},[128,172898,160],{"emptyLinePlaceholder":159},[128,172900,172901,172903,172905,172907,172909,172911,172913,172915,172917,172919,172921,172923,172925,172927,172929,172931,172933,172935],{"class":130,"line":206},[128,172902,111195],{"class":134},[128,172904,250],{"class":166},[128,172906,253],{"class":138},[128,172908,172679],{"class":176},[128,172910,258],{"class":138},[128,172912,365],{"class":176},[128,172914,258],{"class":138},[128,172916,267],{"class":266},[128,172918,270],{"class":134},[128,172920,273],{"class":176},[128,172922,258],{"class":138},[128,172924,172696],{"class":266},[128,172926,270],{"class":134},[128,172928,11209],{"class":176},[128,172930,276],{"class":138},[128,172932,279],{"class":134},[128,172934,282],{"class":266},[128,172936,241],{"class":138},[128,172938,172939,172942,172944,172946,172948,172950,172952,172954,172956],{"class":130,"line":221},[128,172940,172941],{"class":138},"    fieldnames ",[128,172943,270],{"class":134},[128,172945,55608],{"class":138},[128,172947,1189],{"class":176},[128,172949,258],{"class":138},[128,172951,1204],{"class":176},[128,172953,258],{"class":138},[128,172955,1219],{"class":176},[128,172957,2376],{"class":138},[128,172959,172960,172962,172964,172967,172969,172971,172974,172976],{"class":130,"line":230},[128,172961,172713],{"class":138},[128,172963,270],{"class":134},[128,172965,172966],{"class":138}," csv.DictWriter(",[128,172968,296],{"class":266},[128,172970,258],{"class":138},[128,172972,172973],{"class":266},"fieldnames",[128,172975,270],{"class":134},[128,172977,172978],{"class":138},"fieldnames)\n",[128,172980,172981],{"class":130,"line":235},[128,172982,172983],{"class":138},"    writer.writeheader()\n",[128,172985,172986],{"class":130,"line":244},[128,172987,172727],{"class":138},[14,172989,172991],{"id":172990},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,172993,126648],{},[26,172995,172996,172999,173002],{},[29,172997,172998],{},"读取文本文件。",[29,173000,173001],{},"统计每个单词出现次数。",[29,173003,173004],{},"输出出现次数最多的前 10 个单词。",[19,173006,13562],{},[106,173008,173010],{"className":122,"code":173009,"language":124,"meta":112,"style":112},"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",[114,173011,173012,173022,173026,173039,173055,173059,173069,173078,173082,173094,173114,173123,173127,173145,173149,173179,173183,173199],{"__ignoreMap":112},[128,173013,173014,173016,173018,173020],{"class":130,"line":131},[128,173015,145],{"class":134},[128,173017,148],{"class":138},[128,173019,135],{"class":134},[128,173021,153],{"class":138},[128,173023,173024],{"class":130,"line":142},[128,173025,160],{"emptyLinePlaceholder":159},[128,173027,173028,173030,173032,173034,173037],{"class":130,"line":156},[128,173029,171190],{"class":138},[128,173031,270],{"class":134},[128,173033,173],{"class":138},[128,173035,173036],{"class":176},"\"article.txt\"",[128,173038,180],{"class":138},[128,173040,173041,173043,173045,173047,173049,173051,173053],{"class":130,"line":163},[128,173042,171373],{"class":138},[128,173044,270],{"class":134},[128,173046,172250],{"class":138},[128,173048,267],{"class":266},[128,173050,270],{"class":134},[128,173052,273],{"class":176},[128,173054,180],{"class":138},[128,173056,173057],{"class":130,"line":183},[128,173058,160],{"emptyLinePlaceholder":159},[128,173060,173061,173064,173066],{"class":130,"line":188},[128,173062,173063],{"class":138},"words ",[128,173065,270],{"class":134},[128,173067,173068],{"class":138}," content.lower().split()\n",[128,173070,173071,173074,173076],{"class":130,"line":193},[128,173072,173073],{"class":138},"counter ",[128,173075,270],{"class":134},[128,173077,2395],{"class":138},[128,173079,173080],{"class":130,"line":206},[128,173081,160],{"emptyLinePlaceholder":159},[128,173083,173084,173086,173089,173091],{"class":130,"line":221},[128,173085,2404],{"class":134},[128,173087,173088],{"class":138}," word ",[128,173090,549],{"class":134},[128,173092,173093],{"class":138}," words:\n",[128,173095,173096,173099,173101,173104,173107,173109,173112],{"class":130,"line":230},[128,173097,173098],{"class":138},"    word ",[128,173100,270],{"class":134},[128,173102,173103],{"class":138}," word.strip(",[128,173105,173106],{"class":176},"\".,!?;:",[128,173108,159374],{"class":166},[128,173110,173111],{"class":176},"'()[]\"",[128,173113,180],{"class":138},[128,173115,173116,173118,173120],{"class":130,"line":235},[128,173117,209],{"class":134},[128,173119,212],{"class":134},[128,173121,173122],{"class":138}," word:\n",[128,173124,173125],{"class":130,"line":244},[128,173126,151835],{"class":134},[128,173128,173129,173132,173134,173137,173139,173141,173143],{"class":130,"line":287},[128,173130,173131],{"class":138},"    counter[word] ",[128,173133,270],{"class":134},[128,173135,173136],{"class":138}," counter.get(word, ",[128,173138,2452],{"class":166},[128,173140,276],{"class":138},[128,173142,2457],{"class":134},[128,173144,59079],{"class":166},[128,173146,173147],{"class":130,"line":301},[128,173148,160],{"emptyLinePlaceholder":159},[128,173150,173151,173154,173156,173158,173161,173163,173165,173167,173169,173171,173173,173175,173177],{"class":130,"line":310},[128,173152,173153],{"class":138},"items ",[128,173155,270],{"class":134},[128,173157,166483],{"class":166},[128,173159,173160],{"class":138},"(counter.items(), ",[128,173162,2583],{"class":266},[128,173164,2586],{"class":134},[128,173166,2589],{"class":138},[128,173168,2592],{"class":166},[128,173170,115559],{"class":138},[128,173172,166407],{"class":266},[128,173174,270],{"class":134},[128,173176,34945],{"class":166},[128,173178,180],{"class":138},[128,173180,173181],{"class":130,"line":323},[128,173182,160],{"emptyLinePlaceholder":159},[128,173184,173185,173187,173190,173192,173195,173197],{"class":130,"line":330},[128,173186,2404],{"class":134},[128,173188,173189],{"class":138}," word, count ",[128,173191,549],{"class":134},[128,173193,173194],{"class":138}," items[:",[128,173196,4196],{"class":166},[128,173198,168634],{"class":138},[128,173200,173201,173203],{"class":130,"line":335},[128,173202,437],{"class":166},[128,173204,173205],{"class":138},"(word, count)\n",[14,173207,173209],{"id":173208},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[106,173211,173213],{"className":122,"code":173212,"language":124,"meta":112,"style":112},"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",[114,173214,173215,173221,173231,173235,173247,173251,173255,173263,173273,173279,173283,173313,173323,173327,173331,173339,173369,173393,173397,173401,173409,173438,173443],{"__ignoreMap":112},[128,173216,173217,173219],{"class":130,"line":131},[128,173218,135],{"class":134},[128,173220,139],{"class":138},[128,173222,173223,173225,173227,173229],{"class":130,"line":142},[128,173224,145],{"class":134},[128,173226,148],{"class":138},[128,173228,135],{"class":134},[128,173230,153],{"class":138},[128,173232,173233],{"class":130,"line":156},[128,173234,160],{"emptyLinePlaceholder":159},[128,173236,173237,173239,173241,173243,173245],{"class":130,"line":163},[128,173238,167],{"class":166},[128,173240,170],{"class":134},[128,173242,173],{"class":138},[128,173244,177],{"class":176},[128,173246,180],{"class":138},[128,173248,173249],{"class":130,"line":183},[128,173250,160],{"emptyLinePlaceholder":159},[128,173252,173253],{"class":130,"line":188},[128,173254,160],{"emptyLinePlaceholder":159},[128,173256,173257,173259,173261],{"class":130,"line":193},[128,173258,196],{"class":134},[128,173260,200],{"class":199},[128,173262,203],{"class":138},[128,173264,173265,173267,173269,173271],{"class":130,"line":206},[128,173266,209],{"class":134},[128,173268,212],{"class":134},[128,173270,215],{"class":166},[128,173272,218],{"class":138},[128,173274,173275,173277],{"class":130,"line":221},[128,173276,224],{"class":134},[128,173278,227],{"class":138},[128,173280,173281],{"class":130,"line":230},[128,173282,160],{"emptyLinePlaceholder":159},[128,173284,173285,173287,173289,173291,173293,173295,173297,173299,173301,173303,173305,173307,173309,173311],{"class":130,"line":235},[128,173286,354],{"class":134},[128,173288,250],{"class":166},[128,173290,253],{"class":138},[128,173292,167],{"class":166},[128,173294,258],{"class":138},[128,173296,261],{"class":176},[128,173298,258],{"class":138},[128,173300,267],{"class":266},[128,173302,270],{"class":134},[128,173304,273],{"class":176},[128,173306,276],{"class":138},[128,173308,279],{"class":134},[128,173310,282],{"class":266},[128,173312,241],{"class":138},[128,173314,173315,173317,173319,173321],{"class":130,"line":244},[128,173316,224],{"class":134},[128,173318,293],{"class":138},[128,173320,296],{"class":266},[128,173322,180],{"class":138},[128,173324,173325],{"class":130,"line":287},[128,173326,160],{"emptyLinePlaceholder":159},[128,173328,173329],{"class":130,"line":301},[128,173330,160],{"emptyLinePlaceholder":159},[128,173332,173333,173335,173337],{"class":130,"line":310},[128,173334,196],{"class":134},[128,173336,345],{"class":199},[128,173338,348],{"class":138},[128,173340,173341,173343,173345,173347,173349,173351,173353,173355,173357,173359,173361,173363,173365,173367],{"class":130,"line":323},[128,173342,354],{"class":134},[128,173344,250],{"class":166},[128,173346,253],{"class":138},[128,173348,167],{"class":166},[128,173350,258],{"class":138},[128,173352,365],{"class":176},[128,173354,258],{"class":138},[128,173356,267],{"class":266},[128,173358,270],{"class":134},[128,173360,273],{"class":176},[128,173362,276],{"class":138},[128,173364,279],{"class":134},[128,173366,282],{"class":266},[128,173368,241],{"class":138},[128,173370,173371,173373,173375,173377,173379,173381,173383,173385,173387,173389,173391],{"class":130,"line":330},[128,173372,387],{"class":138},[128,173374,296],{"class":266},[128,173376,258],{"class":138},[128,173378,394],{"class":266},[128,173380,270],{"class":134},[128,173382,399],{"class":166},[128,173384,258],{"class":138},[128,173386,404],{"class":266},[128,173388,270],{"class":134},[128,173390,409],{"class":166},[128,173392,180],{"class":138},[128,173394,173395],{"class":130,"line":335},[128,173396,160],{"emptyLinePlaceholder":159},[128,173398,173399],{"class":130,"line":340},[128,173400,160],{"emptyLinePlaceholder":159},[128,173402,173403,173405,173407],{"class":130,"line":351},[128,173404,162595],{"class":138},[128,173406,270],{"class":134},[128,173408,1588],{"class":138},[128,173410,173411,173414,173416,173418,173420,173422,173424,173426,173428,173430,173432,173434,173436],{"class":130,"line":384},[128,173412,173413],{"class":138},"students.append({",[128,173415,1189],{"class":176},[128,173417,1967],{"class":138},[128,173419,153205],{"class":176},[128,173421,258],{"class":138},[128,173423,1204],{"class":176},[128,173425,1967],{"class":138},[128,173427,4399],{"class":166},[128,173429,258],{"class":138},[128,173431,1219],{"class":176},[128,173433,1967],{"class":138},[128,173435,4734],{"class":166},[128,173437,168031],{"class":138},[128,173439,173440],{"class":130,"line":414},[128,173441,173442],{"class":138},"save_students(students)\n",[128,173444,173445,173447,173449,173452],{"class":130,"line":419},[128,173446,2469],{"class":166},[128,173448,253],{"class":138},[128,173450,173451],{"class":176},"\"保存成功\"",[128,173453,180],{"class":138},[14,173455,173457],{"id":173456},"_814-易错点","8.14 易错点",[26,173459,173460,173464,173470,173475,173482,173489],{},[29,173461,173462,171723],{},[114,173463,4544],{},[29,173465,173466,173467,1842],{},"读写中文要指定 ",[114,173468,173469],{},"encoding=\"utf-8\"",[29,173471,173472,173473,1842],{},"打开文件后要关闭，推荐使用 ",[114,173474,111195],{},[29,173476,173477,173478,173481],{},"读取大文件不要直接 ",[114,173479,173480],{},"read()"," 全部内容。",[29,173483,173484,173485,173488],{},"Windows 写 CSV 时建议加 ",[114,173486,173487],{},"newline=\"\"","，避免空行。",[29,173490,173491],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,173493,173495],{"id":173494},"_815-本章练习","8.15 本章练习",[26,173497,173498,173505,173510,173513,173516],{},[29,173499,173500,173501,173504],{},"写入一个 ",[114,173502,173503],{},"students.txt","，每行保存一个学生姓名。",[29,173506,107718,173507,173509],{},[114,173508,173503],{}," 并输出所有学生。",[29,173511,173512],{},"把学生列表保存为 JSON 文件。",[29,173514,173515],{},"从 JSON 文件读取学生数据，计算平均分。",[29,173517,173518,173519,173522,173523,173526],{},"写一个日志函数 ",[114,173520,173521],{},"write_log(message)","，每次调用向 ",[114,173524,173525],{},"app.log"," 追加一行。",[3659,173528,173529],{},"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":112,"searchDepth":142,"depth":142,"links":173531},[173532,173533,173537,173538,173544,173545,173546,173547,173548,173549,173550,173551,173552,173553,173554],{"id":171043,"depth":142,"text":171044},{"id":171084,"depth":142,"text":171085,"children":173534},[173535,173536],{"id":171088,"depth":156,"text":171089},{"id":171122,"depth":156,"text":171123},{"id":171236,"depth":142,"text":171237},{"id":171329,"depth":142,"text":171330,"children":173539},[173540,173541,173542,173543],{"id":171333,"depth":156,"text":171334},{"id":171420,"depth":156,"text":171421},{"id":171490,"depth":156,"text":171491},{"id":171584,"depth":156,"text":171585},{"id":171654,"depth":142,"text":171655},{"id":171717,"depth":142,"text":171718},{"id":171878,"depth":142,"text":171879},{"id":171941,"depth":142,"text":171942},{"id":172057,"depth":142,"text":172058},{"id":172267,"depth":142,"text":172268},{"id":172579,"depth":142,"text":172580},{"id":172990,"depth":142,"text":172991},{"id":173208,"depth":142,"text":173209},{"id":173456,"depth":142,"text":173457},{"id":173494,"depth":142,"text":173495},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":171035,"description":3686},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":173561,"title":173562,"body":173563,"description":3686,"extension":3687,"meta":175749,"navigation":159,"path":175750,"seo":175751,"stem":175752,"__hash__":175753},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":173564,"toc":175716},[173565,173568,173572,173575,173578,173670,173672,173691,173696,173700,173703,173706,173735,173742,173745,173749,173752,173781,173783,173835,173841,173894,173898,173996,173999,174066,174070,174127,174129,174135,174139,174144,174150,174241,174246,174250,174253,174331,174334,174372,174376,174494,174497,174501,174504,174549,174552,174556,174561,174567,174617,174620,174651,174655,174659,174689,174693,174728,174732,174767,174807,174811,174827,174830,174834,174838,174917,174921,174962,174966,175021,175025,175059,175063,175093,175102,175109,175115,175172,175175,175183,175186,175190,175197,175200,175206,175209,175226,175231,175235,175241,175254,175257,175294,175297,175308,175311,175325,175328,175342,175346,175353,175386,175389,175391,175397,175400,175404,175406,175412,175417,175590,175594,175657,175661,175685,175689,175713],[10,173566,173562],{"id":173567},"_9-异常模块与包",[14,173569,173571],{"id":173570},"_91-什么是异常","9.1 什么是异常",[19,173573,173574],{},"异常是程序运行过程中出现的错误。",[19,173576,173577],{},"常见异常：",[3891,173579,173580,173589],{},[3894,173581,173582],{},[3897,173583,173584,173587],{},[3900,173585,173586],{},"异常",[3900,173588,29355],{},[3938,173590,173591,173601,173611,173620,173630,173640,173650,173660],{},[3897,173592,173593,173598],{},[3943,173594,173595],{},[114,173596,173597],{},"NameError",[3943,173599,173600],{},"使用了未定义变量",[3897,173602,173603,173608],{},[3943,173604,173605],{},[114,173606,173607],{},"TypeError",[3943,173609,173610],{},"类型不匹配",[3897,173612,173613,173617],{},[3943,173614,173615],{},[114,173616,3505],{},[3943,173618,173619],{},"值不合法",[3897,173621,173622,173627],{},[3943,173623,173624],{},[114,173625,173626],{},"IndexError",[3943,173628,173629],{},"列表索引越界",[3897,173631,173632,173637],{},[3943,173633,173634],{},[114,173635,173636],{},"KeyError",[3943,173638,173639],{},"字典 key 不存在",[3897,173641,173642,173647],{},[3943,173643,173644],{},[114,173645,173646],{},"FileNotFoundError",[3943,173648,173649],{},"文件不存在",[3897,173651,173652,173657],{},[3943,173653,173654],{},[114,173655,173656],{},"ZeroDivisionError",[3943,173658,173659],{},"除数为 0",[3897,173661,173662,173667],{},[3943,173663,173664],{},[114,173665,173666],{},"ImportError",[3943,173668,173669],{},"导入失败",[19,173671,3488],{},[106,173673,173675],{"className":122,"code":173674,"language":124,"meta":112,"style":112},"num = int(\"abc\")\n",[114,173676,173677],{"__ignoreMap":112},[128,173678,173679,173681,173683,173685,173687,173689],{"class":130,"line":131},[128,173680,158666],{"class":138},[128,173682,270],{"class":134},[128,173684,638],{"class":166},[128,173686,253],{"class":138},[128,173688,158759],{"class":176},[128,173690,180],{"class":138},[19,173692,173693,173694,1842],{},"会触发 ",[114,173695,3505],{},[14,173697,173699],{"id":173698},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,173701,173702],{},"如果不处理异常，程序会直接终止。",[19,173704,173705],{},"例如用户输入年龄：",[106,173707,173709],{"className":122,"code":173708,"language":124,"meta":112,"style":112},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[114,173710,173711,173729],{"__ignoreMap":112},[128,173712,173713,173715,173717,173719,173721,173723,173725,173727],{"class":130,"line":131},[128,173714,149893],{"class":138},[128,173716,270],{"class":134},[128,173718,638],{"class":166},[128,173720,253],{"class":138},[128,173722,643],{"class":166},[128,173724,253],{"class":138},[128,173726,846],{"class":176},[128,173728,3034],{"class":138},[128,173730,173731,173733],{"class":130,"line":142},[128,173732,2469],{"class":166},[128,173734,158640],{"class":138},[19,173736,173737,173738,173741],{},"用户输入 ",[114,173739,173740],{},"abc","，程序就会报错退出。",[19,173743,173744],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,173746,173748],{"id":173747},"_93-try-except","9.3 try except",[19,173750,173751],{},"基础语法：",[106,173753,173755],{"className":122,"code":173754,"language":124,"meta":112,"style":112},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[114,173756,173757,173764,173769,173776],{"__ignoreMap":112},[128,173758,173759,173762],{"class":130,"line":131},[128,173760,173761],{"class":134},"try",[128,173763,241],{"class":138},[128,173765,173766],{"class":130,"line":142},[128,173767,173768],{"class":138},"    可能出错的代码\n",[128,173770,173771,173774],{"class":130,"line":156},[128,173772,173773],{"class":134},"except",[128,173775,241],{"class":138},[128,173777,173778],{"class":130,"line":163},[128,173779,173780],{"class":138},"    出错后的处理代码\n",[19,173782,3488],{},[106,173784,173786],{"className":122,"code":173785,"language":124,"meta":112,"style":112},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[114,173787,173788,173794,173812,173818,173824],{"__ignoreMap":112},[128,173789,173790,173792],{"class":130,"line":131},[128,173791,173761],{"class":134},[128,173793,241],{"class":138},[128,173795,173796,173798,173800,173802,173804,173806,173808,173810],{"class":130,"line":142},[128,173797,838],{"class":138},[128,173799,270],{"class":134},[128,173801,638],{"class":166},[128,173803,253],{"class":138},[128,173805,643],{"class":166},[128,173807,253],{"class":138},[128,173809,846],{"class":176},[128,173811,3034],{"class":138},[128,173813,173814,173816],{"class":130,"line":156},[128,173815,437],{"class":166},[128,173817,158640],{"class":138},[128,173819,173820,173822],{"class":130,"line":163},[128,173821,173773],{"class":134},[128,173823,241],{"class":138},[128,173825,173826,173828,173830,173833],{"class":130,"line":183},[128,173827,437],{"class":166},[128,173829,253],{"class":138},[128,173831,173832],{"class":176},"\"年龄必须是数字\"",[128,173834,180],{"class":138},[19,173836,173837,173838,173840],{},"不建议裸写 ",[114,173839,173773],{},"，最好指定异常类型。",[106,173842,173844],{"className":122,"code":173843,"language":124,"meta":112,"style":112},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[114,173845,173846,173852,173870,173876,173884],{"__ignoreMap":112},[128,173847,173848,173850],{"class":130,"line":131},[128,173849,173761],{"class":134},[128,173851,241],{"class":138},[128,173853,173854,173856,173858,173860,173862,173864,173866,173868],{"class":130,"line":142},[128,173855,838],{"class":138},[128,173857,270],{"class":134},[128,173859,638],{"class":166},[128,173861,253],{"class":138},[128,173863,643],{"class":166},[128,173865,253],{"class":138},[128,173867,846],{"class":176},[128,173869,3034],{"class":138},[128,173871,173872,173874],{"class":130,"line":156},[128,173873,437],{"class":166},[128,173875,158640],{"class":138},[128,173877,173878,173880,173882],{"class":130,"line":163},[128,173879,173773],{"class":134},[128,173881,655],{"class":166},[128,173883,241],{"class":138},[128,173885,173886,173888,173890,173892],{"class":130,"line":183},[128,173887,437],{"class":166},[128,173889,253],{"class":138},[128,173891,173832],{"class":176},[128,173893,180],{"class":138},[14,173895,173897],{"id":173896},"_94-捕获多个异常","9.4 捕获多个异常",[106,173899,173901],{"className":122,"code":173900,"language":124,"meta":112,"style":112},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[114,173902,173903,173909,173930,173950,173957,173965,173976,173985],{"__ignoreMap":112},[128,173904,173905,173907],{"class":130,"line":131},[128,173906,173761],{"class":134},[128,173908,241],{"class":138},[128,173910,173911,173914,173916,173918,173920,173922,173924,173926,173928],{"class":130,"line":142},[128,173912,173913],{"class":138},"    nums ",[128,173915,270],{"class":134},[128,173917,55608],{"class":138},[128,173919,2592],{"class":166},[128,173921,258],{"class":138},[128,173923,409],{"class":166},[128,173925,258],{"class":138},[128,173927,3827],{"class":166},[128,173929,2376],{"class":138},[128,173931,173932,173935,173937,173939,173941,173943,173945,173948],{"class":130,"line":156},[128,173933,173934],{"class":138},"    index ",[128,173936,270],{"class":134},[128,173938,638],{"class":166},[128,173940,253],{"class":138},[128,173942,643],{"class":166},[128,173944,253],{"class":138},[128,173946,173947],{"class":176},"\"请输入索引:\"",[128,173949,3034],{"class":138},[128,173951,173952,173954],{"class":130,"line":163},[128,173953,437],{"class":166},[128,173955,173956],{"class":138},"(nums[index])\n",[128,173958,173959,173961,173963],{"class":130,"line":183},[128,173960,173773],{"class":134},[128,173962,655],{"class":166},[128,173964,241],{"class":138},[128,173966,173967,173969,173971,173974],{"class":130,"line":188},[128,173968,437],{"class":166},[128,173970,253],{"class":138},[128,173972,173973],{"class":176},"\"索引必须是整数\"",[128,173975,180],{"class":138},[128,173977,173978,173980,173983],{"class":130,"line":193},[128,173979,173773],{"class":134},[128,173981,173982],{"class":166}," IndexError",[128,173984,241],{"class":138},[128,173986,173987,173989,173991,173994],{"class":130,"line":206},[128,173988,437],{"class":166},[128,173990,253],{"class":138},[128,173992,173993],{"class":176},"\"索引越界\"",[128,173995,180],{"class":138},[19,173997,173998],{},"多个异常使用相同处理逻辑：",[106,174000,174002],{"className":122,"code":174001,"language":124,"meta":112,"style":112},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[114,174003,174004,174010,174028,174041,174055],{"__ignoreMap":112},[128,174005,174006,174008],{"class":130,"line":131},[128,174007,173761],{"class":134},[128,174009,241],{"class":138},[128,174011,174012,174014,174016,174018,174020,174022,174024,174026],{"class":130,"line":142},[128,174013,48978],{"class":138},[128,174015,270],{"class":134},[128,174017,638],{"class":166},[128,174019,253],{"class":138},[128,174021,643],{"class":166},[128,174023,253],{"class":138},[128,174025,158675],{"class":176},[128,174027,3034],{"class":138},[128,174029,174030,174032,174034,174036,174038],{"class":130,"line":156},[128,174031,437],{"class":166},[128,174033,253],{"class":138},[128,174035,4196],{"class":166},[128,174037,158925],{"class":134},[128,174039,174040],{"class":138}," num)\n",[128,174042,174043,174045,174047,174049,174051,174053],{"class":130,"line":163},[128,174044,173773],{"class":134},[128,174046,5260],{"class":138},[128,174048,3505],{"class":166},[128,174050,258],{"class":138},[128,174052,173656],{"class":166},[128,174054,34264],{"class":138},[128,174056,174057,174059,174061,174064],{"class":130,"line":183},[128,174058,437],{"class":166},[128,174060,253],{"class":138},[128,174062,174063],{"class":176},"\"输入不合法\"",[128,174065,180],{"class":138},[14,174067,174069],{"id":174068},"_95-获取异常信息","9.5 获取异常信息",[106,174071,174073],{"className":122,"code":174072,"language":124,"meta":112,"style":112},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[114,174074,174075,174081,174095,174106],{"__ignoreMap":112},[128,174076,174077,174079],{"class":130,"line":131},[128,174078,173761],{"class":134},[128,174080,241],{"class":138},[128,174082,174083,174085,174087,174089,174091,174093],{"class":130,"line":142},[128,174084,48978],{"class":138},[128,174086,270],{"class":134},[128,174088,638],{"class":166},[128,174090,253],{"class":138},[128,174092,158759],{"class":176},[128,174094,180],{"class":138},[128,174096,174097,174099,174101,174103],{"class":130,"line":156},[128,174098,173773],{"class":134},[128,174100,655],{"class":166},[128,174102,67982],{"class":134},[128,174104,174105],{"class":138}," e:\n",[128,174107,174108,174110,174112,174114,174117,174119,174121,174123,174125],{"class":130,"line":163},[128,174109,437],{"class":166},[128,174111,253],{"class":138},[128,174113,3019],{"class":134},[128,174115,174116],{"class":176},"\"出错了:",[128,174118,1379],{"class":166},[128,174120,3830],{"class":138},[128,174122,1453],{"class":166},[128,174124,1376],{"class":176},[128,174126,180],{"class":138},[19,174128,149804],{},[106,174130,174133],{"className":174131,"code":174132,"language":111,"meta":112},[109],"出错了:invalid literal for int() with base 10: 'abc'\n",[114,174134,174132],{"__ignoreMap":112},[14,174136,174138],{"id":174137},"_96-else和finally","9.6 else和finally",[19,174140,174141,174143],{},[114,174142,5299],{},"：没有异常时执行。",[19,174145,174146,174149],{},[114,174147,174148],{},"finally","：无论是否异常都会执行。",[106,174151,174153],{"className":122,"code":174152,"language":124,"meta":112,"style":112},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[114,174154,174155,174161,174179,174187,174197,174203,174224,174230],{"__ignoreMap":112},[128,174156,174157,174159],{"class":130,"line":131},[128,174158,173761],{"class":134},[128,174160,241],{"class":138},[128,174162,174163,174165,174167,174169,174171,174173,174175,174177],{"class":130,"line":142},[128,174164,48978],{"class":138},[128,174166,270],{"class":134},[128,174168,638],{"class":166},[128,174170,253],{"class":138},[128,174172,643],{"class":166},[128,174174,253],{"class":138},[128,174176,158675],{"class":176},[128,174178,3034],{"class":138},[128,174180,174181,174183,174185],{"class":130,"line":156},[128,174182,173773],{"class":134},[128,174184,655],{"class":166},[128,174186,241],{"class":138},[128,174188,174189,174191,174193,174195],{"class":130,"line":163},[128,174190,437],{"class":166},[128,174192,253],{"class":138},[128,174194,1782],{"class":176},[128,174196,180],{"class":138},[128,174198,174199,174201],{"class":130,"line":183},[128,174200,5299],{"class":134},[128,174202,241],{"class":138},[128,174204,174205,174207,174209,174211,174214,174216,174218,174220,174222],{"class":130,"line":188},[128,174206,437],{"class":166},[128,174208,253],{"class":138},[128,174210,3019],{"class":134},[128,174212,174213],{"class":176},"\"输入正确:",[128,174215,1379],{"class":166},[128,174217,5267],{"class":138},[128,174219,1453],{"class":166},[128,174221,1376],{"class":176},[128,174223,180],{"class":138},[128,174225,174226,174228],{"class":130,"line":193},[128,174227,174148],{"class":134},[128,174229,241],{"class":138},[128,174231,174232,174234,174236,174239],{"class":130,"line":206},[128,174233,437],{"class":166},[128,174235,253],{"class":138},[128,174237,174238],{"class":176},"\"程序结束\"",[128,174240,180],{"class":138},[19,174242,174243,174245],{},[114,174244,174148],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,174247,174249],{"id":174248},"_97-抛出异常","9.7 抛出异常",[19,174251,174252],{},"程序可以主动抛出异常。",[106,174254,174256],{"className":122,"code":174255,"language":124,"meta":112,"style":112},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[114,174257,174258,174267,174279,174292,174312,174316,174320],{"__ignoreMap":112},[128,174259,174260,174262,174265],{"class":130,"line":131},[128,174261,196],{"class":134},[128,174263,174264],{"class":199}," set_age",[128,174266,164294],{"class":138},[128,174268,174269,174271,174273,174275,174277],{"class":130,"line":142},[128,174270,209],{"class":134},[128,174272,19227],{"class":138},[128,174274,4657],{"class":134},[128,174276,7659],{"class":166},[128,174278,241],{"class":138},[128,174280,174281,174283,174285,174287,174290],{"class":130,"line":156},[128,174282,106795],{"class":134},[128,174284,655],{"class":166},[128,174286,253],{"class":138},[128,174288,174289],{"class":176},"\"年龄不能为负数\"",[128,174291,180],{"class":138},[128,174293,174294,174296,174298,174300,174302,174304,174306,174308,174310],{"class":130,"line":163},[128,174295,437],{"class":166},[128,174297,253],{"class":138},[128,174299,3019],{"class":134},[128,174301,164862],{"class":176},[128,174303,1379],{"class":166},[128,174305,73596],{"class":138},[128,174307,1453],{"class":166},[128,174309,1376],{"class":176},[128,174311,180],{"class":138},[128,174313,174314],{"class":130,"line":183},[128,174315,160],{"emptyLinePlaceholder":159},[128,174317,174318],{"class":130,"line":188},[128,174319,160],{"emptyLinePlaceholder":159},[128,174321,174322,174325,174327,174329],{"class":130,"line":193},[128,174323,174324],{"class":138},"set_age(",[128,174326,4281],{"class":134},[128,174328,2592],{"class":166},[128,174330,180],{"class":138},[19,174332,174333],{},"调用者可以捕获：",[106,174335,174337],{"className":122,"code":174336,"language":124,"meta":112,"style":112},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[114,174338,174339,174345,174356,174366],{"__ignoreMap":112},[128,174340,174341,174343],{"class":130,"line":131},[128,174342,173761],{"class":134},[128,174344,241],{"class":138},[128,174346,174347,174350,174352,174354],{"class":130,"line":142},[128,174348,174349],{"class":138},"    set_age(",[128,174351,4281],{"class":134},[128,174353,2592],{"class":166},[128,174355,180],{"class":138},[128,174357,174358,174360,174362,174364],{"class":130,"line":156},[128,174359,173773],{"class":134},[128,174361,655],{"class":166},[128,174363,67982],{"class":134},[128,174365,174105],{"class":138},[128,174367,174368,174370],{"class":130,"line":163},[128,174369,437],{"class":166},[128,174371,70377],{"class":138},[14,174373,174375],{"id":174374},"_98-自定义异常","9.8 自定义异常",[106,174377,174379],{"className":122,"code":174378,"language":124,"meta":112,"style":112},"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",[114,174380,174381,174395,174399,174403,174407,174415,174425,174436,174446,174450,174454,174460,174477,174488],{"__ignoreMap":112},[128,174382,174383,174385,174388,174390,174393],{"class":130,"line":131},[128,174384,1901],{"class":134},[128,174386,174387],{"class":199}," BalanceNotEnoughError",[128,174389,253],{"class":138},[128,174391,174392],{"class":166},"Exception",[128,174394,34264],{"class":138},[128,174396,174397],{"class":130,"line":142},[128,174398,152857],{"class":134},[128,174400,174401],{"class":130,"line":156},[128,174402,160],{"emptyLinePlaceholder":159},[128,174404,174405],{"class":130,"line":163},[128,174406,160],{"emptyLinePlaceholder":159},[128,174408,174409,174411,174413],{"class":130,"line":183},[128,174410,196],{"class":134},[128,174412,153503],{"class":199},[128,174414,165691],{"class":138},[128,174416,174417,174419,174421,174423],{"class":130,"line":188},[128,174418,209],{"class":134},[128,174420,153459],{"class":138},[128,174422,4705],{"class":134},[128,174424,165468],{"class":138},[128,174426,174427,174429,174432,174434],{"class":130,"line":193},[128,174428,106795],{"class":134},[128,174430,174431],{"class":138}," BalanceNotEnoughError(",[128,174433,153554],{"class":176},[128,174435,180],{"class":138},[128,174437,174438,174440,174442,174444],{"class":130,"line":206},[128,174439,587],{"class":134},[128,174441,165698],{"class":138},[128,174443,4281],{"class":134},[128,174445,153492],{"class":138},[128,174447,174448],{"class":130,"line":221},[128,174449,160],{"emptyLinePlaceholder":159},[128,174451,174452],{"class":130,"line":230},[128,174453,160],{"emptyLinePlaceholder":159},[128,174455,174456,174458],{"class":130,"line":235},[128,174457,173761],{"class":134},[128,174459,241],{"class":138},[128,174461,174462,174464,174466,174469,174471,174473,174475],{"class":130,"line":244},[128,174463,165369],{"class":138},[128,174465,270],{"class":134},[128,174467,174468],{"class":138}," withdraw(",[128,174470,4061],{"class":166},[128,174472,258],{"class":138},[128,174474,3143],{"class":166},[128,174476,180],{"class":138},[128,174478,174479,174481,174484,174486],{"class":130,"line":287},[128,174480,173773],{"class":134},[128,174482,174483],{"class":138}," BalanceNotEnoughError ",[128,174485,279],{"class":134},[128,174487,174105],{"class":138},[128,174489,174490,174492],{"class":130,"line":301},[128,174491,437],{"class":166},[128,174493,70377],{"class":138},[19,174495,174496],{},"入门阶段大多数情况使用内置异常即可。",[14,174498,174500],{"id":174499},"_99-traceback","9.9 traceback",[19,174502,174503],{},"调试时可以输出完整异常堆栈。",[106,174505,174507],{"className":122,"code":174506,"language":124,"meta":112,"style":112},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[114,174508,174509,174516,174520,174526,174536,174544],{"__ignoreMap":112},[128,174510,174511,174513],{"class":130,"line":131},[128,174512,135],{"class":134},[128,174514,174515],{"class":138}," traceback\n",[128,174517,174518],{"class":130,"line":142},[128,174519,160],{"emptyLinePlaceholder":159},[128,174521,174522,174524],{"class":130,"line":156},[128,174523,173761],{"class":134},[128,174525,241],{"class":138},[128,174527,174528,174530,174532,174534],{"class":130,"line":163},[128,174529,5572],{"class":166},[128,174531,253],{"class":138},[128,174533,158759],{"class":176},[128,174535,180],{"class":138},[128,174537,174538,174540,174542],{"class":130,"line":183},[128,174539,173773],{"class":134},[128,174541,655],{"class":166},[128,174543,241],{"class":138},[128,174545,174546],{"class":130,"line":188},[128,174547,174548],{"class":138},"    traceback.print_exc()\n",[19,174550,174551],{},"日志系统中常把异常堆栈记录到文件。",[14,174553,174555],{"id":174554},"_910-什么是模块","9.10 什么是模块",[19,174557,174558,174559,129335],{},"模块就是一个 ",[114,174560,149699],{},[19,174562,174563,174564,28105],{},"例如创建 ",[114,174565,174566],{},"my_math.py",[106,174568,174570],{"className":122,"code":174569,"language":124,"meta":112,"style":112},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[114,174571,174572,174580,174590,174594,174598,174607],{"__ignoreMap":112},[128,174573,174574,174576,174578],{"class":130,"line":131},[128,174575,196],{"class":134},[128,174577,2187],{"class":199},[128,174579,154407],{"class":138},[128,174581,174582,174584,174586,174588],{"class":130,"line":142},[128,174583,587],{"class":134},[128,174585,14396],{"class":138},[128,174587,2457],{"class":134},[128,174589,154418],{"class":138},[128,174591,174592],{"class":130,"line":156},[128,174593,160],{"emptyLinePlaceholder":159},[128,174595,174596],{"class":130,"line":163},[128,174597,160],{"emptyLinePlaceholder":159},[128,174599,174600,174602,174605],{"class":130,"line":183},[128,174601,196],{"class":134},[128,174603,174604],{"class":199}," sub",[128,174606,154407],{"class":138},[128,174608,174609,174611,174613,174615],{"class":130,"line":188},[128,174610,587],{"class":134},[128,174612,14396],{"class":138},[128,174614,4281],{"class":134},[128,174616,154418],{"class":138},[19,174618,174619],{},"在另一个文件中导入：",[106,174621,174623],{"className":122,"code":174622,"language":124,"meta":112,"style":112},"import my_math\n\nprint(my_math.add(1, 2))\n",[114,174624,174625,174632,174636],{"__ignoreMap":112},[128,174626,174627,174629],{"class":130,"line":131},[128,174628,135],{"class":134},[128,174630,174631],{"class":138}," my_math\n",[128,174633,174634],{"class":130,"line":142},[128,174635,160],{"emptyLinePlaceholder":159},[128,174637,174638,174640,174643,174645,174647,174649],{"class":130,"line":156},[128,174639,2469],{"class":166},[128,174641,174642],{"class":138},"(my_math.add(",[128,174644,2592],{"class":166},[128,174646,258],{"class":138},[128,174648,409],{"class":166},[128,174650,3034],{"class":138},[14,174652,174654],{"id":174653},"_911-import导入","9.11 import导入",[72,174656,174658],{"id":174657},"_9111-导入模块","9.11.1 导入模块",[106,174660,174662],{"className":122,"code":174661,"language":124,"meta":112,"style":112},"import random\n\nprint(random.randint(1, 10))\n",[114,174663,174664,174670,174674],{"__ignoreMap":112},[128,174665,174666,174668],{"class":130,"line":131},[128,174667,135],{"class":134},[128,174669,48714],{"class":138},[128,174671,174672],{"class":130,"line":142},[128,174673,160],{"emptyLinePlaceholder":159},[128,174675,174676,174678,174681,174683,174685,174687],{"class":130,"line":156},[128,174677,2469],{"class":166},[128,174679,174680],{"class":138},"(random.randint(",[128,174682,2592],{"class":166},[128,174684,258],{"class":138},[128,174686,4196],{"class":166},[128,174688,3034],{"class":138},[72,174690,174692],{"id":174691},"_9112-导入指定内容","9.11.2 导入指定内容",[106,174694,174696],{"className":122,"code":174695,"language":124,"meta":112,"style":112},"from random import randint\n\nprint(randint(1, 10))\n",[114,174697,174698,174709,174713],{"__ignoreMap":112},[128,174699,174700,174702,174704,174706],{"class":130,"line":131},[128,174701,145],{"class":134},[128,174703,61176],{"class":138},[128,174705,135],{"class":134},[128,174707,174708],{"class":138}," randint\n",[128,174710,174711],{"class":130,"line":142},[128,174712,160],{"emptyLinePlaceholder":159},[128,174714,174715,174717,174720,174722,174724,174726],{"class":130,"line":156},[128,174716,2469],{"class":166},[128,174718,174719],{"class":138},"(randint(",[128,174721,2592],{"class":166},[128,174723,258],{"class":138},[128,174725,4196],{"class":166},[128,174727,3034],{"class":138},[72,174729,174731],{"id":174730},"_9113-起别名","9.11.3 起别名",[106,174733,174735],{"className":122,"code":174734,"language":124,"meta":112,"style":112},"import random as rd\n\nprint(rd.randint(1, 10))\n",[114,174736,174737,174748,174752],{"__ignoreMap":112},[128,174738,174739,174741,174743,174745],{"class":130,"line":131},[128,174740,135],{"class":134},[128,174742,61176],{"class":138},[128,174744,279],{"class":134},[128,174746,174747],{"class":138}," rd\n",[128,174749,174750],{"class":130,"line":142},[128,174751,160],{"emptyLinePlaceholder":159},[128,174753,174754,174756,174759,174761,174763,174765],{"class":130,"line":156},[128,174755,2469],{"class":166},[128,174757,174758],{"class":138},"(rd.randint(",[128,174760,2592],{"class":166},[128,174762,258],{"class":138},[128,174764,4196],{"class":166},[128,174766,3034],{"class":138},[106,174768,174770],{"className":122,"code":174769,"language":124,"meta":112,"style":112},"from random import randint as rint\n\nprint(rint(1, 10))\n",[114,174771,174772,174788,174792],{"__ignoreMap":112},[128,174773,174774,174776,174778,174780,174783,174785],{"class":130,"line":131},[128,174775,145],{"class":134},[128,174777,61176],{"class":138},[128,174779,135],{"class":134},[128,174781,174782],{"class":138}," randint ",[128,174784,279],{"class":134},[128,174786,174787],{"class":138}," rint\n",[128,174789,174790],{"class":130,"line":142},[128,174791,160],{"emptyLinePlaceholder":159},[128,174793,174794,174796,174799,174801,174803,174805],{"class":130,"line":156},[128,174795,2469],{"class":166},[128,174797,174798],{"class":138},"(rint(",[128,174800,2592],{"class":166},[128,174802,258],{"class":138},[128,174804,4196],{"class":166},[128,174806,3034],{"class":138},[72,174808,174810],{"id":174809},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[106,174812,174814],{"className":122,"code":174813,"language":124,"meta":112,"style":112},"from random import *\n",[114,174815,174816],{"__ignoreMap":112},[128,174817,174818,174820,174822,174824],{"class":130,"line":131},[128,174819,145],{"class":134},[128,174821,61176],{"class":138},[128,174823,135],{"class":134},[128,174825,174826],{"class":134}," *\n",[19,174828,174829],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,174831,174833],{"id":174832},"_912-常用内置模块","9.12 常用内置模块",[72,174835,174837],{"id":174836},"_9121-random","9.12.1 random",[106,174839,174841],{"className":122,"code":174840,"language":124,"meta":112,"style":112},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[114,174842,174843,174849,174853,174867,174886],{"__ignoreMap":112},[128,174844,174845,174847],{"class":130,"line":131},[128,174846,135],{"class":134},[128,174848,48714],{"class":138},[128,174850,174851],{"class":130,"line":142},[128,174852,160],{"emptyLinePlaceholder":159},[128,174854,174855,174857,174859,174861,174863,174865],{"class":130,"line":156},[128,174856,2469],{"class":166},[128,174858,174680],{"class":138},[128,174860,2592],{"class":166},[128,174862,258],{"class":138},[128,174864,4196],{"class":166},[128,174866,3034],{"class":138},[128,174868,174869,174871,174874,174876,174878,174880,174882,174884],{"class":130,"line":163},[128,174870,2469],{"class":166},[128,174872,174873],{"class":138},"(random.choice([",[128,174875,153205],{"class":176},[128,174877,258],{"class":138},[128,174879,154253],{"class":176},[128,174881,258],{"class":138},[128,174883,162610],{"class":176},[128,174885,36555],{"class":138},[128,174887,174888,174890,174893,174895,174897,174899,174901,174903,174905,174907,174909,174911,174913,174915],{"class":130,"line":183},[128,174889,2469],{"class":166},[128,174891,174892],{"class":138},"(random.sample([",[128,174894,2592],{"class":166},[128,174896,258],{"class":138},[128,174898,409],{"class":166},[128,174900,258],{"class":138},[128,174902,3827],{"class":166},[128,174904,258],{"class":138},[128,174906,4043],{"class":166},[128,174908,258],{"class":138},[128,174910,4069],{"class":166},[128,174912,115559],{"class":138},[128,174914,409],{"class":166},[128,174916,3034],{"class":138},[72,174918,174920],{"id":174919},"_9122-time","9.12.2 time",[106,174922,174924],{"className":122,"code":174923,"language":124,"meta":112,"style":112},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[114,174925,174926,174932,174936,174943,174951],{"__ignoreMap":112},[128,174927,174928,174930],{"class":130,"line":131},[128,174929,135],{"class":134},[128,174931,35298],{"class":138},[128,174933,174934],{"class":130,"line":142},[128,174935,160],{"emptyLinePlaceholder":159},[128,174937,174938,174940],{"class":130,"line":156},[128,174939,2469],{"class":166},[128,174941,174942],{"class":138},"(time.time())\n",[128,174944,174945,174947,174949],{"class":130,"line":163},[128,174946,98441],{"class":138},[128,174948,2592],{"class":166},[128,174950,180],{"class":138},[128,174952,174953,174955,174957,174960],{"class":130,"line":183},[128,174954,2469],{"class":166},[128,174956,253],{"class":138},[128,174958,174959],{"class":176},"\"1秒后执行\"",[128,174961,180],{"class":138},[72,174963,174965],{"id":174964},"_9123-datetime","9.12.3 datetime",[106,174967,174969],{"className":122,"code":174968,"language":124,"meta":112,"style":112},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[114,174970,174971,174983,174987,174997,175004],{"__ignoreMap":112},[128,174972,174973,174975,174978,174980],{"class":130,"line":131},[128,174974,145],{"class":134},[128,174976,174977],{"class":138}," datetime ",[128,174979,135],{"class":134},[128,174981,174982],{"class":138}," datetime\n",[128,174984,174985],{"class":130,"line":142},[128,174986,160],{"emptyLinePlaceholder":159},[128,174988,174989,174992,174994],{"class":130,"line":156},[128,174990,174991],{"class":138},"now ",[128,174993,270],{"class":134},[128,174995,174996],{"class":138}," datetime.now()\n",[128,174998,174999,175001],{"class":130,"line":163},[128,175000,2469],{"class":166},[128,175002,175003],{"class":138},"(now)\n",[128,175005,175006,175008,175011,175014,175016,175019],{"class":130,"line":183},[128,175007,2469],{"class":166},[128,175009,175010],{"class":138},"(now.strftime(",[128,175012,175013],{"class":176},"\"%Y-%m-",[128,175015,159570],{"class":166},[128,175017,175018],{"class":176}," %H:%M:%S\"",[128,175020,3034],{"class":138},[72,175022,175024],{"id":175023},"_9124-os","9.12.4 os",[106,175026,175028],{"className":122,"code":175027,"language":124,"meta":112,"style":112},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[114,175029,175030,175036,175040,175047],{"__ignoreMap":112},[128,175031,175032,175034],{"class":130,"line":131},[128,175033,135],{"class":134},[128,175035,48691],{"class":138},[128,175037,175038],{"class":130,"line":142},[128,175039,160],{"emptyLinePlaceholder":159},[128,175041,175042,175044],{"class":130,"line":156},[128,175043,2469],{"class":166},[128,175045,175046],{"class":138},"(os.getcwd())\n",[128,175048,175049,175051,175054,175057],{"class":130,"line":163},[128,175050,2469],{"class":166},[128,175052,175053],{"class":138},"(os.listdir(",[128,175055,175056],{"class":176},"\".\"",[128,175058,3034],{"class":138},[72,175060,175062],{"id":175061},"_9125-sys","9.12.5 sys",[106,175064,175066],{"className":122,"code":175065,"language":124,"meta":112,"style":112},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[114,175067,175068,175075,175079,175086],{"__ignoreMap":112},[128,175069,175070,175072],{"class":130,"line":131},[128,175071,135],{"class":134},[128,175073,175074],{"class":138}," sys\n",[128,175076,175077],{"class":130,"line":142},[128,175078,160],{"emptyLinePlaceholder":159},[128,175080,175081,175083],{"class":130,"line":156},[128,175082,2469],{"class":166},[128,175084,175085],{"class":138},"(sys.version)\n",[128,175087,175088,175090],{"class":130,"line":163},[128,175089,2469],{"class":166},[128,175091,175092],{"class":138},"(sys.path)\n",[14,175094,175096,175097,175099,175100,1376],{"id":175095},"_913-if-name-main","9.13 if ",[3903,175098,2773],{}," == \"",[3903,175101,105421],{},[19,175103,175104,175105,175108],{},"模块被直接运行和被导入时，",[114,175106,175107],{},"__name__"," 的值不同。",[19,175110,175111,175112,28105],{},"创建 ",[114,175113,175114],{},"my_module.py",[106,175116,175118],{"className":122,"code":175117,"language":124,"meta":112,"style":112},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[114,175119,175120,175128,175138,175142,175146,175158],{"__ignoreMap":112},[128,175121,175122,175124,175126],{"class":130,"line":131},[128,175123,196],{"class":134},[128,175125,2187],{"class":199},[128,175127,154407],{"class":138},[128,175129,175130,175132,175134,175136],{"class":130,"line":142},[128,175131,587],{"class":134},[128,175133,14396],{"class":138},[128,175135,2457],{"class":134},[128,175137,154418],{"class":138},[128,175139,175140],{"class":130,"line":156},[128,175141,160],{"emptyLinePlaceholder":159},[128,175143,175144],{"class":130,"line":163},[128,175145,160],{"emptyLinePlaceholder":159},[128,175147,175148,175150,175152,175154,175156],{"class":130,"line":183},[128,175149,1800],{"class":134},[128,175151,1803],{"class":166},[128,175153,1806],{"class":134},[128,175155,1809],{"class":176},[128,175157,241],{"class":138},[128,175159,175160,175162,175164,175166,175168,175170],{"class":130,"line":188},[128,175161,437],{"class":166},[128,175163,169479],{"class":138},[128,175165,2592],{"class":166},[128,175167,258],{"class":138},[128,175169,409],{"class":166},[128,175171,3034],{"class":138},[19,175173,175174],{},"作用：",[26,175176,175177,175180],{},[29,175178,175179],{},"直接运行该文件时，执行测试代码。",[29,175181,175182],{},"被其他文件导入时，不执行测试代码。",[19,175184,175185],{},"这是写模块时很常用的习惯。",[14,175187,175189],{"id":175188},"_914-包","9.14 包",[19,175191,175192,175193,175196],{},"包是包含 ",[114,175194,175195],{},"__init__.py"," 的目录，用于组织多个模块。",[19,175198,175199],{},"目录结构：",[106,175201,175204],{"className":175202,"code":175203,"language":111,"meta":112},[109],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[114,175205,175203],{"__ignoreMap":112},[19,175207,175208],{},"导入：",[106,175210,175212],{"className":122,"code":175211,"language":124,"meta":112,"style":112},"from utils.file_utils import read_file\n",[114,175213,175214],{"__ignoreMap":112},[128,175215,175216,175218,175221,175223],{"class":130,"line":131},[128,175217,145],{"class":134},[128,175219,175220],{"class":138}," utils.file_utils ",[128,175222,135],{"class":134},[128,175224,175225],{"class":138}," read_file\n",[19,175227,175228,175230],{},[114,175229,175195],{}," 可以为空，也可以写包初始化逻辑。",[14,175232,175234],{"id":175233},"_915-第三方包","9.15 第三方包",[19,175236,175237,175238,175240],{},"第三方包通过 ",[114,175239,27318],{}," 安装。",[106,175242,175244],{"className":27309,"code":175243,"language":27311,"meta":112,"style":112},"pip install requests\n",[114,175245,175246],{"__ignoreMap":112},[128,175247,175248,175250,175252],{"class":130,"line":131},[128,175249,27318],{"class":199},[128,175251,27321],{"class":176},[128,175253,149449],{"class":176},[19,175255,175256],{},"使用：",[106,175258,175260],{"className":122,"code":175259,"language":124,"meta":112,"style":112},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[114,175261,175262,175268,175272,175287],{"__ignoreMap":112},[128,175263,175264,175266],{"class":130,"line":131},[128,175265,135],{"class":134},[128,175267,149449],{"class":138},[128,175269,175270],{"class":130,"line":142},[128,175271,160],{"emptyLinePlaceholder":159},[128,175273,175274,175277,175279,175282,175285],{"class":130,"line":156},[128,175275,175276],{"class":138},"response ",[128,175278,270],{"class":134},[128,175280,175281],{"class":138}," requests.get(",[128,175283,175284],{"class":176},"\"https:\u002F\u002Fwww.example.com\"",[128,175286,180],{"class":138},[128,175288,175289,175291],{"class":130,"line":163},[128,175290,2469],{"class":166},[128,175292,175293],{"class":138},"(response.status_code)\n",[19,175295,175296],{},"查看已安装包：",[106,175298,175300],{"className":27309,"code":175299,"language":27311,"meta":112,"style":112},"pip list\n",[114,175301,175302],{"__ignoreMap":112},[128,175303,175304,175306],{"class":130,"line":131},[128,175305,27318],{"class":199},[128,175307,122311],{"class":176},[19,175309,175310],{},"导出项目依赖：",[106,175312,175313],{"className":27309,"code":149640,"language":27311,"meta":112,"style":112},[114,175314,175315],{"__ignoreMap":112},[128,175316,175317,175319,175321,175323],{"class":130,"line":131},[128,175318,27318],{"class":199},[128,175320,149649],{"class":176},[128,175322,29707],{"class":134},[128,175324,149654],{"class":176},[19,175326,175327],{},"安装项目依赖：",[106,175329,175330],{"className":27309,"code":149660,"language":27311,"meta":112,"style":112},[114,175331,175332],{"__ignoreMap":112},[128,175333,175334,175336,175338,175340],{"class":130,"line":131},[128,175335,27318],{"class":199},[128,175337,27321],{"class":176},[128,175339,122995],{"class":166},[128,175341,149654],{"class":176},[14,175343,175345],{"id":175344},"_916-模块搜索路径","9.16 模块搜索路径",[19,175347,175348,175349,175352],{},"Python 导入模块时会在 ",[114,175350,175351],{},"sys.path"," 中查找。",[106,175354,175356],{"className":122,"code":175355,"language":124,"meta":112,"style":112},"import sys\n\nfor path in sys.path:\n    print(path)\n",[114,175357,175358,175364,175368,175380],{"__ignoreMap":112},[128,175359,175360,175362],{"class":130,"line":131},[128,175361,135],{"class":134},[128,175363,175074],{"class":138},[128,175365,175366],{"class":130,"line":142},[128,175367,160],{"emptyLinePlaceholder":159},[128,175369,175370,175372,175375,175377],{"class":130,"line":156},[128,175371,2404],{"class":134},[128,175373,175374],{"class":138}," path ",[128,175376,549],{"class":134},[128,175378,175379],{"class":138}," sys.path:\n",[128,175381,175382,175384],{"class":130,"line":163},[128,175383,437],{"class":166},[128,175385,172108],{"class":138},[19,175387,175388],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,175390,160502],{},[106,175392,175395],{"className":175393,"code":175394,"language":111,"meta":112},[109],"random.py\njson.py\ntime.py\n",[114,175396,175394],{"__ignoreMap":112},[19,175398,175399],{},"这些文件名可能导致导入异常。",[14,175401,175403],{"id":175402},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,175405,175199],{},[106,175407,175410],{"className":175408,"code":175409,"language":111,"meta":112},[109],"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",[114,175411,175409],{"__ignoreMap":112},[19,175413,175414,28105],{},[114,175415,175416],{},"utils\u002Ffile_utils.py",[106,175418,175420],{"className":122,"code":175419,"language":124,"meta":112,"style":112},"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",[114,175421,175422,175428,175438,175442,175446,175456,175466,175474,175480,175484,175511,175521,175525,175529,175539,175565],{"__ignoreMap":112},[128,175423,175424,175426],{"class":130,"line":131},[128,175425,135],{"class":134},[128,175427,139],{"class":138},[128,175429,175430,175432,175434,175436],{"class":130,"line":142},[128,175431,145],{"class":134},[128,175433,148],{"class":138},[128,175435,135],{"class":134},[128,175437,153],{"class":138},[128,175439,175440],{"class":130,"line":156},[128,175441,160],{"emptyLinePlaceholder":159},[128,175443,175444],{"class":130,"line":163},[128,175445,160],{"emptyLinePlaceholder":159},[128,175447,175448,175450,175453],{"class":130,"line":183},[128,175449,196],{"class":134},[128,175451,175452],{"class":199}," read_json",[128,175454,175455],{"class":138},"(path):\n",[128,175457,175458,175461,175463],{"class":130,"line":188},[128,175459,175460],{"class":138},"    path ",[128,175462,270],{"class":134},[128,175464,175465],{"class":138}," Path(path)\n",[128,175467,175468,175470,175472],{"class":130,"line":193},[128,175469,209],{"class":134},[128,175471,212],{"class":134},[128,175473,172189],{"class":138},[128,175475,175476,175478],{"class":130,"line":206},[128,175477,224],{"class":134},[128,175479,227],{"class":138},[128,175481,175482],{"class":130,"line":221},[128,175483,160],{"emptyLinePlaceholder":159},[128,175485,175486,175488,175490,175493,175495,175497,175499,175501,175503,175505,175507,175509],{"class":130,"line":230},[128,175487,354],{"class":134},[128,175489,250],{"class":166},[128,175491,175492],{"class":138},"(path, ",[128,175494,261],{"class":176},[128,175496,258],{"class":138},[128,175498,267],{"class":266},[128,175500,270],{"class":134},[128,175502,273],{"class":176},[128,175504,276],{"class":138},[128,175506,279],{"class":134},[128,175508,282],{"class":266},[128,175510,241],{"class":138},[128,175512,175513,175515,175517,175519],{"class":130,"line":235},[128,175514,224],{"class":134},[128,175516,293],{"class":138},[128,175518,296],{"class":266},[128,175520,180],{"class":138},[128,175522,175523],{"class":130,"line":244},[128,175524,160],{"emptyLinePlaceholder":159},[128,175526,175527],{"class":130,"line":287},[128,175528,160],{"emptyLinePlaceholder":159},[128,175530,175531,175533,175536],{"class":130,"line":301},[128,175532,196],{"class":134},[128,175534,175535],{"class":199}," write_json",[128,175537,175538],{"class":138},"(path, data):\n",[128,175540,175541,175543,175545,175547,175549,175551,175553,175555,175557,175559,175561,175563],{"class":130,"line":310},[128,175542,354],{"class":134},[128,175544,250],{"class":166},[128,175546,175492],{"class":138},[128,175548,365],{"class":176},[128,175550,258],{"class":138},[128,175552,267],{"class":266},[128,175554,270],{"class":134},[128,175556,273],{"class":176},[128,175558,276],{"class":138},[128,175560,279],{"class":134},[128,175562,282],{"class":266},[128,175564,241],{"class":138},[128,175566,175567,175570,175572,175574,175576,175578,175580,175582,175584,175586,175588],{"class":130,"line":323},[128,175568,175569],{"class":138},"        json.dump(data, ",[128,175571,296],{"class":266},[128,175573,258],{"class":138},[128,175575,394],{"class":266},[128,175577,270],{"class":134},[128,175579,399],{"class":166},[128,175581,258],{"class":138},[128,175583,404],{"class":266},[128,175585,270],{"class":134},[128,175587,409],{"class":166},[128,175589,180],{"class":138},[19,175591,175592,28105],{},[114,175593,3273],{},[106,175595,175597],{"className":122,"code":175596,"language":124,"meta":112,"style":112},"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",[114,175598,175599,175610,175614,175627,175647],{"__ignoreMap":112},[128,175600,175601,175603,175605,175607],{"class":130,"line":131},[128,175602,145],{"class":134},[128,175604,175220],{"class":138},[128,175606,135],{"class":134},[128,175608,175609],{"class":138}," read_json, write_json\n",[128,175611,175612],{"class":130,"line":142},[128,175613,160],{"emptyLinePlaceholder":159},[128,175615,175616,175618,175620,175623,175625],{"class":130,"line":156},[128,175617,162595],{"class":138},[128,175619,270],{"class":134},[128,175621,175622],{"class":138}," read_json(",[128,175624,177],{"class":176},[128,175626,180],{"class":138},[128,175628,175629,175631,175633,175635,175637,175639,175641,175643,175645],{"class":130,"line":163},[128,175630,173413],{"class":138},[128,175632,1189],{"class":176},[128,175634,1967],{"class":138},[128,175636,153205],{"class":176},[128,175638,258],{"class":138},[128,175640,1219],{"class":176},[128,175642,1967],{"class":138},[128,175644,4734],{"class":166},[128,175646,168031],{"class":138},[128,175648,175649,175652,175654],{"class":130,"line":183},[128,175650,175651],{"class":138},"write_json(",[128,175653,177],{"class":176},[128,175655,175656],{"class":138},", students)\n",[14,175658,175660],{"id":175659},"_918-易错点","9.18 易错点",[26,175662,175663,175666,175671,175676,175679,175682],{},[29,175664,175665],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[29,175667,175668,175669,1842],{},"能指定异常类型就不要裸写 ",[114,175670,173773],{},[29,175672,175673,175675],{},[114,175674,174148],{}," 无论是否出错都会执行。",[29,175677,175678],{},"模块文件名不要和标准库重名。",[29,175680,175681],{},"导入自己写的模块时，要注意运行目录。",[29,175683,175684],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,175686,175688],{"id":175687},"_919-本章练习","9.19 本章练习",[26,175690,175691,175694,175697,175703,175710],{},[29,175692,175693],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[29,175695,175696],{},"写函数读取文件，如果文件不存在则返回空字符串。",[29,175698,175111,175699,175702],{},[114,175700,175701],{},"math_utils.py","，实现加减乘除函数并导入使用。",[29,175704,175705,175706,175709],{},"创建一个 ",[114,175707,175708],{},"utils"," 包，把 JSON 读写函数放进去。",[29,175711,175712],{},"写一个程序，捕获除零异常和输入格式异常。",[3659,175714,175715],{},"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":112,"searchDepth":142,"depth":142,"links":175717},[175718,175719,175720,175721,175722,175723,175724,175725,175726,175727,175728,175734,175741,175743,175744,175745,175746,175747,175748],{"id":173570,"depth":142,"text":173571},{"id":173698,"depth":142,"text":173699},{"id":173747,"depth":142,"text":173748},{"id":173896,"depth":142,"text":173897},{"id":174068,"depth":142,"text":174069},{"id":174137,"depth":142,"text":174138},{"id":174248,"depth":142,"text":174249},{"id":174374,"depth":142,"text":174375},{"id":174499,"depth":142,"text":174500},{"id":174554,"depth":142,"text":174555},{"id":174653,"depth":142,"text":174654,"children":175729},[175730,175731,175732,175733],{"id":174657,"depth":156,"text":174658},{"id":174691,"depth":156,"text":174692},{"id":174730,"depth":156,"text":174731},{"id":174809,"depth":156,"text":174810},{"id":174832,"depth":142,"text":174833,"children":175735},[175736,175737,175738,175739,175740],{"id":174836,"depth":156,"text":174837},{"id":174919,"depth":156,"text":174920},{"id":174964,"depth":156,"text":174965},{"id":175023,"depth":156,"text":175024},{"id":175061,"depth":156,"text":175062},{"id":175095,"depth":142,"text":175742},"9.13 if name == \"main\"",{"id":175188,"depth":142,"text":175189},{"id":175233,"depth":142,"text":175234},{"id":175344,"depth":142,"text":175345},{"id":175402,"depth":142,"text":175403},{"id":175659,"depth":142,"text":175660},{"id":175687,"depth":142,"text":175688},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":173562,"description":3686},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":175755,"title":175756,"body":175757,"description":175920,"extension":3687,"meta":175921,"navigation":159,"path":175922,"seo":175923,"stem":175924,"__hash__":175925},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":175758,"toc":175915},[175759,175762,175765,175768,175779,175781,175855,175858,175861,175864,175867,175870,175873,175876,175879,175882,175885],[10,175760,175756],{"id":175761},"python教程",[19,175763,175764],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,175766,175767],{},"建议学习环境：",[26,175769,175770,175773,175776],{},[29,175771,175772],{},"Python 版本：Python 3.10 及以上。",[29,175774,175775],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[29,175777,175778],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,175780,120434],{"id":120434},[26,175782,175783,175789,175795,175801,175807,175813,175819,175825,175831,175837,175843,175849],{},[29,175784,175785],{},[3989,175786,175788],{"href":175787},".\u002Fch1-Python","Python环境与第一个程序",[29,175790,175791],{},[3989,175792,175794],{"href":175793},".\u002Fch2","基础语法、变量与字符串",[29,175796,175797],{},[3989,175798,175800],{"href":175799},".\u002Fch3","判断语句",[29,175802,175803],{},[3989,175804,175806],{"href":175805},".\u002Fch4","循环语句",[29,175808,175809],{},[3989,175810,175812],{"href":175811},".\u002Fch5","函数基础",[29,175814,175815],{},[3989,175816,175818],{"href":175817},".\u002Fch6","数据容器",[29,175820,175821],{},[3989,175822,175824],{"href":175823},".\u002Fch7","函数进阶",[29,175826,175827],{},[3989,175828,175830],{"href":175829},".\u002Fch8","文件操作",[29,175832,175833],{},[3989,175834,175836],{"href":175835},".\u002Fch9","异常、模块与包",[29,175838,175839],{},[3989,175840,175842],{"href":175841},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[29,175844,175845],{},[3989,175846,175848],{"href":175847},".\u002Fch11","面向对象基础",[29,175850,175851],{},[3989,175852,175854],{"href":175853},".\u002Fch12","综合案例与复习路线",[14,175856,175857],{"id":175857},"学习路线",[19,175859,175860],{},"第一阶段：能运行程序。",[19,175862,175863],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,175865,175866],{},"第二阶段：能组织数据。",[19,175868,175869],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,175871,175872],{},"第三阶段：能封装逻辑。",[19,175874,175875],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,175877,175878],{},"第四阶段：能做小项目。",[19,175880,175881],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,175883,175884],{"id":175884},"参考资料",[26,175886,175887,175894,175901,175908],{},[29,175888,175889,175890],{},"黑马程序员 Python 入门教程推荐：",[3989,175891,175892],{"href":175892,"rel":175893},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[27352],[29,175895,175896,175897],{},"Python 官方中文教程：",[3989,175898,175899],{"href":175899,"rel":175900},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[27352],[29,175902,175903,175904],{},"Python 标准库文档：",[3989,175905,175906],{"href":175906,"rel":175907},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[27352],[29,175909,175910,175911],{},"pyecharts 文档：",[3989,175912,175913],{"href":175913,"rel":175914},"https:\u002F\u002Fpyecharts.org\u002F",[27352],{"title":112,"searchDepth":142,"depth":142,"links":175916},[175917,175918,175919],{"id":120434,"depth":142,"text":120434},{"id":175857,"depth":142,"text":175857},{"id":175884,"depth":142,"text":175884},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":26865},"\u002Fwiki\u002F2024-10-10-python",{"title":175756,"description":175920},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331487766]